<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>f(Program,Poet)=Programet &#187; 计算机</title>
	<atom:link href="http://blog.programet.org/category/computer/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.programet.org</link>
	<description>f(诗,程序)=诗序=思绪 &#124; 记载我们自己的生活</description>
	<lastBuildDate>Fri, 30 Jul 2010 11:27:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>如果你想进入计算机类专业</title>
		<link>http://blog.programet.org/2010/06/computer.html</link>
		<comments>http://blog.programet.org/2010/06/computer.html#comments</comments>
		<pubDate>Sat, 19 Jun 2010 18:44:14 +0000</pubDate>
		<dc:creator>最后的叶子</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[推荐]]></category>
		<category><![CDATA[计算机]]></category>

		<guid isPermaLink="false">http://blog.programet.org/?p=2589</guid>
		<description><![CDATA[这篇文章献给有意填报计算机类专业的童鞋们，也欢迎其他童鞋围观~
现在高中学生及家长老师中对计算机类专业还或多或少有一定的误解，这篇文章里我会针对性地说说我对计算机类专业的理解。如果哪位对内容有疑义，欢迎到下方评论区留言给我。
什么是计算机类专业
计算机类专业其实不是一个很明确的说法。在这里，我把以学习计算机软件高级应用与研究为主的专业称作计算机类专业。这类专业名目繁多，广义上说还包括计算数学这样的数学类专业和信息工程这样的信息类专业，下面列出最典型的一些专业：

计算机科学与技术（部分院校）
计算机软件
软件技术
软件工程
网络工程
信息安全（注意它不是信息类的）
……

这些专业的基础内容很相似，只是在未来更具体更专业化的发展方向上略有差异。在计算机类专业组成的学院里，这些差异难以被察觉。
不过，这些专业可能被分散在很多学院中，很多学校专门设有“软件学院”，其实专业间还是很类似的。
计算机类专业学什么
我的很多童鞋在进入计算机类专业前其实并不知道他们将要学什么，以至于有的同学后悔了，留下了遗憾。为了消除大家的误会，我先说计算机类专业不学什么：

不研究Word、Excel、PowerPoint这样基本的软件。具体怎么用这些常用软件可能会有课程，但是教学深度应该和其他专业是相近的！
不做Flash闪客，不做Photoshop设计师。这些软件高级应用不是学习内容。有同学可能会因为爱好计算机艺术设计而进入计算机系，这是不对的。
基本不学硬件。那是电子类专业的事。
不是学卖电脑的。居然有位高中老师以“前台卖电脑”来解读计算机系，我当场晕掉……
不是修电脑的！很过非计算机类的学生都会修电脑，这种事还不够高端。不过会修电脑在追MM上有一定优势哦！
不是玩游戏的，不是黑客。其实和一些网络上面流行的技术不挨边。
不教授绝大多数特别具体的计算机应用。这些都是根据自己的兴趣课余自学的。授课的内容大多接近于计算机原理和基础，初学者会觉得学的内容和以前认识的计算机相差很远。

通俗地说，计算机类专业学习的内容就是编程。说具体点，大致包括以下几个方面：

数学。计算机科学被戏称为计算机数学……有很长一段时间是泡在数学中的。
计算机语言。换个说法就是简单编程，大家高二的时候应该学过Pascal或者Basic吧？
数据结构与算法。教你写数学含量很高的程序的。
计算机及网络基本原理。其实就是前人的各种对计算机的构想与协定。
更细的专业方向。计算机技术可以细分为很多门类，不同专业对应的具体门类有差异。这是很高端的了。

要说明的是，计算机技术是最复杂的高新技术之一，学起来很困难（真的很吃IQ！），有时还会比较累（但是绝对比建筑类和机械类轻松许多）。很多学生毕了业都几乎没学到什么，写个最简单的程序都写不好，只能就此远离计算机，杯具啊！
计算机类专业的未来发展
计算机类专业几年前异常火热，现在已降温了不少，但是分数线还是比较高的。这是因为计算机类专业学生未来出路较多。
计算机类专业虽然招生很多，但是优秀的毕业生仍然很少，所以IT方向人才需求还是很旺的。只要把专业知识学好，找工作会变得很容易；如果真的很强，进谷歌、百度这样的大IT公司是没问题的。
还有很多优秀毕业生选择创业的，毕竟从事IT技术还是比较辛苦的。计算机方向创业的门槛很低。
还有一批毕业生是读研的。当下计算机科学是发展最快的科学领域之一，计算机领域还有很多技术不健全，应该是亟待发展的，在高校从事这方面研究的很多。
填报计算机类专业的建议
最后，留下我个人的几点重要的建议：

不了解计算机类专业的童鞋在了解前文内容后，最好根据要填报的具体专业，查找有关资料，不同专业间还是有细微差异的。不过“计算机科学与技术”专业一般是分数要求最高的，其学习内容有微弱优势。
对于对计算机技术很感兴趣的童鞋，计算机类专业是个很好的选择。如果能保持这种对计算机的热爱，就很有希望把专业知识学到手，胜过很多知难而退的童鞋，未来就很有优势！况且，学一门自己喜欢的技术，何乐而不为呢？
害怕计算机或编程的童鞋切勿为了未来就业方便而闯入计算机类专业，因为硬着头皮学计算机技术是非常难的，结果是学不到技术，就业中反而占劣势。
认为自己数学（特别是离散数学，高中学的排列组合是离散数学的一部分）学不好的童鞋请慎重填报计算机类专业。如果你觉得高中时的排列组合很难，那么计算机数学会让你疯掉的。相应地，如果你喜欢数学，可以好好考虑计算机类专业，这是现代数学最主要的应用领域。

本文由 最后的叶子 创作，转载或引用前请联系我们。]]></description>
			<content:encoded><![CDATA[<p>这篇文章献给有意填报计算机类专业的童鞋们，也欢迎其他童鞋围观~</p>
<p>现在高中学生及家长老师中对计算机类专业还或多或少有一定的误解，这篇文章里我会针对性地说说我对计算机类专业的理解。如果哪位对内容有疑义，欢迎到下方评论区留言给我。<span id="more-2589"></span></p>
<h3>什么是计算机类专业</h3>
<p>计算机类专业其实不是一个很明确的说法。在这里，我把以学习计算机软件高级应用与研究为主的专业称作计算机类专业。这类专业名目繁多，广义上说还包括计算数学这样的数学类专业和信息工程这样的信息类专业，下面列出最典型的一些专业：</p>
<ul>
<li>计算机科学与技术（部分院校）</li>
<li>计算机软件</li>
<li>软件技术</li>
<li>软件工程</li>
<li>网络工程</li>
<li>信息安全（注意它不是信息类的）</li>
<li>……</li>
</ul>
<p>这些专业的基础内容很相似，只是在未来更具体更专业化的发展方向上略有差异。在计算机类专业组成的学院里，这些差异难以被察觉。</p>
<p>不过，这些专业可能被分散在很多学院中，很多学校专门设有“软件学院”，其实专业间还是很类似的。</p>
<h3>计算机类专业学什么</h3>
<p>我的很多童鞋在进入计算机类专业前其实并不知道他们将要学什么，以至于有的同学后悔了，留下了遗憾。为了消除大家的误会，我先说计算机类专业不学什么：</p>
<ul>
<li>不研究Word、Excel、PowerPoint这样基本的软件。具体怎么用这些常用软件可能会有课程，但是教学深度应该和其他专业是相近的！</li>
<li>不做Flash闪客，不做Photoshop设计师。这些软件高级应用不是学习内容。有同学可能会因为爱好计算机艺术设计而进入计算机系，这是不对的。</li>
<li>基本不学硬件。那是电子类专业的事。</li>
<li>不是学卖电脑的。居然有位高中老师以“前台卖电脑”来解读计算机系，我当场晕掉……</li>
<li>不是修电脑的！很过非计算机类的学生都会修电脑，这种事还不够高端。不过会修电脑在追MM上有一定优势哦！</li>
<li>不是玩游戏的，不是黑客。其实和一些网络上面流行的技术不挨边。</li>
<li>不教授绝大多数特别具体的计算机应用。这些都是根据自己的兴趣课余自学的。授课的内容大多接近于计算机原理和基础，初学者会觉得学的内容和以前认识的计算机相差很远。</li>
</ul>
<p>通俗地说，计算机类专业学习的内容就是编程。说具体点，大致包括以下几个方面：</p>
<ol>
<li>数学。计算机科学被戏称为计算机数学……有很长一段时间是泡在数学中的。</li>
<li>计算机语言。换个说法就是简单编程，大家高二的时候应该学过Pascal或者Basic吧？</li>
<li>数据结构与算法。教你写数学含量很高的程序的。</li>
<li>计算机及网络基本原理。其实就是前人的各种对计算机的构想与协定。</li>
<li>更细的专业方向。计算机技术可以细分为很多门类，不同专业对应的具体门类有差异。这是很高端的了。</li>
</ol>
<p>要说明的是，计算机技术是最复杂的高新技术之一，学起来很困难（真的很吃IQ！），有时还会比较累（但是绝对比建筑类和机械类轻松许多）。很多学生毕了业都几乎没学到什么，写个最简单的程序都写不好，只能就此远离计算机，杯具啊！</p>
<h3>计算机类专业的未来发展</h3>
<p>计算机类专业几年前异常火热，现在已降温了不少，但是分数线还是比较高的。这是因为计算机类专业学生未来出路较多。</p>
<p>计算机类专业虽然招生很多，但是优秀的毕业生仍然很少，所以IT方向人才需求还是很旺的。只要把专业知识学好，找工作会变得很容易；如果真的很强，进谷歌、百度这样的大IT公司是没问题的。</p>
<p>还有很多优秀毕业生选择创业的，毕竟从事IT技术还是比较辛苦的。计算机方向创业的门槛很低。</p>
<p>还有一批毕业生是读研的。当下计算机科学是发展最快的科学领域之一，计算机领域还有很多技术不健全，应该是亟待发展的，在高校从事这方面研究的很多。</p>
<h3>填报计算机类专业的建议</h3>
<p>最后，留下我个人的几点重要的建议：</p>
<ol>
<li>不了解计算机类专业的童鞋在了解前文内容后，最好根据要填报的具体专业，查找有关资料，不同专业间还是有细微差异的。不过“计算机科学与技术”专业一般是分数要求最高的，其学习内容有微弱优势。</li>
<li>对于对计算机技术很感兴趣的童鞋，计算机类专业是个很好的选择。如果能保持这种对计算机的热爱，就很有希望把专业知识学到手，胜过很多知难而退的童鞋，未来就很有优势！况且，学一门自己喜欢的技术，何乐而不为呢？</li>
<li>害怕计算机或编程的童鞋切勿为了未来就业方便而闯入计算机类专业，因为硬着头皮学计算机技术是非常难的，结果是学不到技术，就业中反而占劣势。</li>
<li>认为自己数学（特别是离散数学，高中学的排列组合是离散数学的一部分）学不好的童鞋请慎重填报计算机类专业。如果你觉得高中时的排列组合很难，那么计算机数学会让你疯掉的。相应地，如果你喜欢数学，可以好好考虑计算机类专业，这是现代数学最主要的应用领域。</li>
</ol>
<p><small>本文由 最后的叶子 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2010/06/computer.html/feed</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>软件推荐-Mozilla Thunderbird</title>
		<link>http://blog.programet.org/2010/05/%e8%bd%af%e4%bb%b6%e6%8e%a8%e8%8d%90-mozilla-thunderbird.html</link>
		<comments>http://blog.programet.org/2010/05/%e8%bd%af%e4%bb%b6%e6%8e%a8%e8%8d%90-mozilla-thunderbird.html#comments</comments>
		<pubDate>Tue, 11 May 2010 10:23:13 +0000</pubDate>
		<dc:creator>最后的叶子</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[网络]]></category>
		<category><![CDATA[计算机]]></category>

		<guid isPermaLink="false">http://blog.programet.org/?p=2433</guid>
		<description><![CDATA[提起Mozilla谋智网络，你可能会有下意识的反应——那只怀抱地球的狐狸Firefox。但是，千万别忘了那只可爱的捧着信封的蓝色鸟Thunderbird！
Thunderbird是时下最流行的邮件客户端之一。和Firefox一样，它是开源、跨平台的软件。中文版3.0.4可以点这里下载。
用Thunderbird定时查收邮件
现在很多人不用邮件客户端。确实，常用的邮箱都有很好用的网页版。而邮件客户端的价值在于能够频繁地在后台检查邮件，提供新邮件提醒功能，并省去网页登录邮箱的麻烦。这对于讲究邮件实时性的童鞋很重要。
Thunderbird的账户设置里可以设置邮件检查时间间隔；当然要在启动了Thunderbird的情况下才会自动检查邮件，你需要将Thunderbird图标拖到“开始-&#62;所有程序-&#62;启动”中来实现开机时自动启动Thunderbird；另外，如果要长时间挂Thunderbird，MinisizeToTray revived插件是你需要的，这个插件在后文中有介绍。有疑问的童鞋可以在下面留言或给我们发邮件，叶子用Thunderbird自动查收邮件的^^
特点
Thunderbird当然具备常规普通邮件应具备的功能。它支持IMAP 、SMTP、POP等邮件协议，对Gmail的支持甚佳。至于它的超人之处……

插件和扩展。继承Mozilla的优良传统，Thunderbird有很好的可扩展性。虽然Thunderbird的扩展数量上远不及Firefox，但已有的插件都比较优秀，提供了很实用的功能。
优秀的RSS支持。这是叶子最喜欢的一点。原来用Firefox实时书签等工具收RSS，觉得一点都不“实时”，有更新常常很晚知道。后来改用Thunderbird。Thunderbird可以设置检查RSS时间间隔，并且一旦有更新，会发出提示音（但不会像收到邮件那样弹出提示窗）。这就是为什么叶子常常能很快回复新评论……用Thunderbird看RSS很爽的哦——Thunderbird用的排版引擎和Firefox一样（都是Gecko），而且Thunderbird 3是支持标签页的！
超强的安全性。Thunderbird的安全性恐怕是其他客户端难以企及的。这里的“安全性”有两层含义：一是打开邮件时含风险的元素都被禁止自动加载，需要用户批准；二是邮件的各种加密保护措施保护发送的邮件信息安全，这是企业需要的。

插件和扩展
我的Thunderbird装有几个插件来增强功能。（提示：最方便的插件安装方法是在工具-&#62;附加组件-&#62;搜索附加组件中输入插件名称，直接在Thunderbird内安装。）

Glasser for Thunderbird——给Win Vista/7上的Thunderbird工具栏和任务栏加上玻璃效果。
Lightning——给Thunderbird加上强大的事件和任务管理功能（这个插件真的很强大）。
MinisizeToTray revived (MinTrayR)——这个插件仅仅提供最小化到任务栏通知区的功能，但对于我这种要整天挂Thunderbird的童鞋，这个插件很重要。
ThunderBirthDay——需要配合Lightning插件使用，它自动将通讯录中的生日添加到Lightning事件列表中。

以上插件都支持Thunderbird 3.0。很遗憾，现在很多插件只支持老版本Thunderbird。
好了，这就是我要推荐的Thunderbird。
本文由 最后的叶子 创作，转载或引用前请联系我们。

相关文章：软件推荐-Orbit Downloader让我们比比长短为自己的blogger博客加上标签云


相关文章：<ol><li><a href='http://blog.programet.org/2010/02/%e8%bd%af%e4%bb%b6%e6%8e%a8%e8%8d%90-orbit-downloader.html' rel='bookmark' title='Permanent Link: 软件推荐-Orbit Downloader'>软件推荐-Orbit Downloader</a></li><li><a href='http://blog.programet.org/2008/10/blog-post_21-3.html' rel='bookmark' title='Permanent Link: 让我们比比长短'>让我们比比长短</a></li><li><a href='http://blog.programet.org/2008/08/blogger.html' rel='bookmark' title='Permanent Link: 为自己的blogger博客加上标签云'>为自己的blogger博客加上标签云</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>提起Mozilla谋智网络，你可能会有下意识的反应——那只怀抱地球的狐狸Firefox。但是，千万别忘了那只可爱的捧着信封的蓝色鸟Thunderbird！</p>
<p>Thunderbird是时下最流行的邮件客户端之一。和Firefox一样，它是开源、跨平台的软件。中文版3.0.4可以<a href="http://download.mozilla.org/?product=thunderbird-3.0.4&amp;os=win&amp;lang=zh-CN" target="_blank">点这里下载</a>。<span id="more-2433"></span></p>
<h3>用Thunderbird定时查收邮件</h3>
<p>现在很多人不用邮件客户端。确实，常用的邮箱都有很好用的网页版。而邮件客户端的价值在于能够频繁地在后台检查邮件，提供新邮件提醒功能，并省去网页登录邮箱的麻烦。这对于讲究邮件实时性的童鞋很重要。</p>
<p>Thunderbird的账户设置里可以设置邮件检查时间间隔；当然要在启动了Thunderbird的情况下才会自动检查邮件，你需要将Thunderbird图标拖到“开始-&gt;所有程序-&gt;启动”中来实现开机时自动启动Thunderbird；另外，如果要长时间挂Thunderbird，MinisizeToTray revived插件是你需要的，这个插件在后文中有介绍。有疑问的童鞋可以在下面留言或给我们发邮件，叶子用Thunderbird自动查收邮件的^^</p>
<h3>特点</h3>
<p>Thunderbird当然具备常规普通邮件应具备的功能。它支持IMAP 、SMTP、POP等邮件协议，对Gmail的支持甚佳。至于它的超人之处……</p>
<ul>
<li>插件和扩展。继承Mozilla的优良传统，Thunderbird有很好的可扩展性。虽然Thunderbird的扩展数量上远不及Firefox，但已有的插件都比较优秀，提供了很实用的功能。</li>
<li>优秀的RSS支持。这是叶子最喜欢的一点。原来用Firefox实时书签等工具收RSS，觉得一点都不“实时”，有更新常常很晚知道。后来改用Thunderbird。Thunderbird可以设置检查RSS时间间隔，并且一旦有更新，会发出提示音（但不会像收到邮件那样弹出提示窗）。这就是为什么叶子常常能很快回复新评论……用Thunderbird看RSS很爽的哦——Thunderbird用的排版引擎和Firefox一样（都是Gecko），而且Thunderbird 3是支持标签页的！</li>
<li>超强的安全性。Thunderbird的安全性恐怕是其他客户端难以企及的。这里的“安全性”有两层含义：一是打开邮件时含风险的元素都被禁止自动加载，需要用户批准；二是邮件的各种加密保护措施保护发送的邮件信息安全，这是企业需要的。</li>
</ul>
<h3>插件和扩展</h3>
<p>我的Thunderbird装有几个插件来增强功能。（提示：最方便的插件安装方法是在工具-&gt;附加组件-&gt;搜索附加组件中输入插件名称，直接在Thunderbird内安装。）</p>
<ul>
<li>Glasser for Thunderbird——给Win Vista/7上的Thunderbird工具栏和任务栏加上玻璃效果。</li>
<li>Lightning——给Thunderbird加上强大的事件和任务管理功能（这个插件真的很强大）。</li>
<li>MinisizeToTray revived (MinTrayR)——这个插件仅仅提供最小化到任务栏通知区的功能，但对于我这种要整天挂Thunderbird的童鞋，这个插件很重要。</li>
<li>ThunderBirthDay——需要配合Lightning插件使用，它自动将通讯录中的生日添加到Lightning事件列表中。</li>
</ul>
<p>以上插件都支持Thunderbird 3.0。很遗憾，现在很多插件只支持老版本Thunderbird。</p>
<p>好了，这就是我要推荐的Thunderbird。</p>
<p><small>本文由 最后的叶子 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p>

<p>相关文章：<ol><li><a href='http://blog.programet.org/2010/02/%e8%bd%af%e4%bb%b6%e6%8e%a8%e8%8d%90-orbit-downloader.html' rel='bookmark' title='Permanent Link: 软件推荐-Orbit Downloader'>软件推荐-Orbit Downloader</a></li><li><a href='http://blog.programet.org/2008/10/blog-post_21-3.html' rel='bookmark' title='Permanent Link: 让我们比比长短'>让我们比比长短</a></li><li><a href='http://blog.programet.org/2008/08/blogger.html' rel='bookmark' title='Permanent Link: 为自己的blogger博客加上标签云'>为自己的blogger博客加上标签云</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2010/05/%e8%bd%af%e4%bb%b6%e6%8e%a8%e8%8d%90-mozilla-thunderbird.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[软件推荐]]></series:name>
	</item>
		<item>
		<title>Google Code Jam 2010 尝鲜</title>
		<link>http://blog.programet.org/2010/05/google-code-jam-2010%e5%b0%9d%e9%b2%9c.html</link>
		<comments>http://blog.programet.org/2010/05/google-code-jam-2010%e5%b0%9d%e9%b2%9c.html#comments</comments>
		<pubDate>Sun, 09 May 2010 03:04:06 +0000</pubDate>
		<dc:creator>严酷的魔王</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[推荐]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[计算机]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[GOOGLE]]></category>
		<category><![CDATA[策略]]></category>
		<category><![CDATA[算法]]></category>
		<category><![CDATA[随感]]></category>

		<guid isPermaLink="false">http://blog.programet.org/?p=2415</guid>
		<description><![CDATA[前几天看到GoogleCamp有人在校内分享了GoogleCamp Code Jam的比赛报名呼叫，突然发现其实还有着这么一个东西。之前一直没有参加过，因为高中没有那么多自由的周末给我选择做什么，而且当时估计也正处于NOIP的巨大阴影之中。昨天C++上机课的时候就决定报名了。

昨天早上7点开始比赛，虽说是持续24小时的资格赛，但是不可能和它耗那么久，我就8点起床了。结果一起床发现一整版都是已经做完题目的人……当时那个瀑布汗。反正我已经决定了将整个早上都拿来做这个，就慢慢来好了。没想到……第一题就花了我15min才完全看懂，英文水平还有待欠缺啊……幸好A题很水，算法速度出现，结果我提交small，居然出错。仔细检查了我的输出，发现我所有的输出都写着&#8221;Case #1&#8243;（满脸黑线），改掉之后就AC掉小数据了，然后直接提交大数据，就继续往下走。粗略地看了看B题，发现还是没看懂，但是看到大数据的规模后，Cpp选手表示鸭梨很大，决定略过之。当时大概9点多一点，想着时间还有很多，就耐下性子看C题。C题倒是很好理解，使用模拟就能过小数据，思考大数据的算法我还思考了一下，而我想的顺序和最后Google官方给出的顺序差不多（顺便跪求那个O(N)的算法，我没想到，官方也没有给出明确的解）。然后意识到太复杂的coding是我的弱项，就选了第二个优化方法，填填补补地和模拟算法对拍上了小数据，就提交了。当时好像快11点了，我就决定先到此为止，下午再战B题。
中午和zxy远在美国的同学Simon大约交流了一下进度，发现他已经搞定了B题——因为高精度题目对python选手来说不痛不痒，所以只有Cpp选手在墙角内牛满面。下午4点多的时候回来看了看B题（也看了很久），算法易得，代码难写。最后草草地A掉小数据就完事了，看懂题目后大概花了15min。最近各种杂事，我就把GCJ放下了，其实要进入Round 1 的门槛还是很低的，只需要完整地过掉一题就好了。刚才看了看成绩，我提交了的都AC了，满足，等两个星期之后再战Round 1 。这次进入Round 1的人有8523只，而Round 2会有3000个名额。我看上的是Round 2 的top500可以得到一件拉风的T恤……恩，RP++保佑我能进入Round 2. 下面是我的题解和A、C两题的代码，B题要贴也要加高精度库，这里就不贴了。
A题的大概意思就是：有N个串联在一起的可开关插座板以及一个一直有电的总电源，1号插座板连接着总电源。一开始每一个插座板都处于关闭状态，我每打一个响指，那么所有处于有供能状态的插座板开关都会反转状态，即从开到关或者从关到开。一号插线板一直都处于有供能状态，因为总电源一直有电。而当1号处于ON的状态时，2号才处于有供能状态，当1号和2号都处于ON的状态时，3号才处于供能状态，依此类推。在第N个插线板上面有一个灯泡，问题就是如果我打了K个响指，那么灯泡会不会亮？
显然这个要用二进制来考虑，1表示一个插座板的开关处于ON的状态，而0就表示OFF。那么一开始就是N个0（为了方便讨论不妨设N=5）.第一次响指就变成了00001，第二次响指后就是00010，第三次就是00011，第四次就是00100……看出来了么？进行几次模拟运算之后就会发现打K次响指那么这个二进制串的值就等于K，不过要注意当K&#62;2^N时，整个串会循环出现。那么我们其实就是判断那个K是不是会导致11111的出现。11111就是2^N-1，再考虑到循环出现，则灯泡会亮就等价于 2^N&#124;(K+1)。交一个2^N的表，代码短短就可以解决了，贴在下面。
B题说了那么一大串，都把我弄晕了，其实意思很简单：给出N个正整数，希望找到一个最小的非负整数y，使得有最大的公约数T。首先就是要确定这个T是多少，然后求出y就是很简单的事情了。先看n=2的情况，对于两个正整数，如果且，那么必有T&#124;b-a。再令T最大，那么显然就有T=b-a。得出这个结论后，就可以拓展到n个数字了。这时候的T，就是n个数字一共个两两之差的最大公约数。又可以证明，如果a_1是最小的数，那么这n-1个数的最大公约数等同于之前个数的最大公约数。所以可以用O(N)的时间算出T。最后算y的时候要注意判断y是否等于0的情况。我怕麻烦就没有写高精度，也就没有提交B-large，普通精度的代码就不贴了，一个gcd函数加几句判断就好。
C题是很好理解的，也是这三道题目里最好玩的一题。有一个能容纳k个人的过山车，一天运行r次。同时有很多人来玩这个过山车，但他们是抱成很多团出现的，意即每一堆人要么一起上车，要么不上车，每一堆人玩玩过山车后会还想玩，会按照上车之前的顺序排到队伍的末尾。每一次过山车等到没有人上车（全都上了或者坐不下了）就运行一轮。现在给出过山车的运行次数r，容量k以及n个团的顺序及大小，如果每一个人做一次能得一块钱，请你计算这个过山车这一天内能赚多少钱。给个例子，比如r=4，k=6,n=4,其中每一个团的大小分别是1，4，2，1。第一次运行是第一二个团上车，这时上了5个人，结束时队伍就变成了2,1,1,4，因为前两个团下车后排到了队伍的末尾，第二次运行上了3个团，一共4人，结束后队伍就变成了4,2,1,1。接着队伍还会变成1,1,4,2以及2,1,1,4。此时过山车运行结束，一共赚了21块。
这题初看很像直接模拟的题目，而且直接模拟每一次上人确实是可以解决小数据的，可以写一个用来检查优化算法是否可行。由于在large的时候N&#60;=1000，R=10^9，直接模拟会死人，那么必然不行。首先考虑到，因为R&#62;&#62;N，又由于每一个团都有可能出现在排头，所以其实最多有N只不同的队伍，如果我们建立一个表next[i]表示第i个团做排头时下一个排头是谁，那么就可以加快模拟速度了。但是这个算法在8分钟内难以算完，我们必须接着优化。接着的优化只往前想了一小步，但是效果很明显，因为R&#62;&#62;N，那么必然会出现一个排头的循环，长度不超过N，每一个循环都是一样的，意即我们只要算出每一个循环内赚的钱，再看看当天会有几个完整循环，一乘即可，最后修补一下开始和结束，就可以得到最终结果了。如上面举出的例子，循环长度为3。我就用这个算法过了C的大数据。
Google赛后给出的题解说，还存在一个O(N)的算法，留给大家作为练习，也可以在Group上进行讨论……估计会有什么我不常用的数据结构出现，果断坐等此法。
恩，过两周再加油争取挺进Round 2然后靠RP拿T恤……感觉蛮困难的，不过试试也好~
附：A题代码：

#include&#60;iostream&#62;
using namespace std;
&#160;
&#160;
int t,tt,n,k,i,j,flag,power&#91;31&#93;=&#123;1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824&#125;;
&#160;
int main&#40;&#41;
&#123;
    FILE *in,*out;
    in=freopen&#40;&#34;A-large.in&#34;,&#34;r&#34;,stdin&#41;;
    out=freopen&#40;&#34;A-large.txt&#34;,&#34;w&#34;,stdout&#41;;
    cin&#62;&#62;t;
    for &#40;tt=1;tt&#60;=t;tt++&#41;
    &#123;
        cin&#62;&#62;n&#62;&#62;k;
  [...]


相关文章：<ol><li><a href='http://blog.programet.org/2010/04/%e4%bb%8e01%c3%9701%e5%88%b001%e7%9a%84%e5%8f%8c%e5%b0%84.html' rel='bookmark' title='Permanent Link: 从(0,1]×(0,1]到(0,1]的双射'>从(0,1]×(0,1]到(0,1]的双射</a></li><li><a href='http://blog.programet.org/2009/12/%e6%99%92%ef%bc%9ac%e8%af%ad%e8%a8%80%e6%9c%9f%e4%b8%ad%e5%ae%9e%e9%aa%8c%e6%8a%a5%e5%91%8a.html' rel='bookmark' title='Permanent Link: 晒：C语言期中实验报告'>晒：C语言期中实验报告</a></li><li><a href='http://blog.programet.org/2009/07/%e6%af%8f%e5%91%a8%e8%bd%af%e4%bb%b6%e6%8e%a8%e8%8d%90-tex.html' rel='bookmark' title='Permanent Link: 每周软件推荐-TeX'>每周软件推荐-TeX</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>前几天看到GoogleCamp有人在校内分享了<a href="http://code.google.com/codejam">GoogleCamp Code Jam</a>的比赛报名呼叫，突然发现其实还有着这么一个东西。之前一直没有参加过，因为高中没有那么多自由的周末给我选择做什么，而且当时估计也正处于NOIP的巨大阴影之中。昨天C++上机课的时候就决定报名了。</p>
<p><span id="more-2415"></span></p>
<p>昨天早上7点开始比赛，虽说是持续24小时的资格赛，但是不可能和它耗那么久，我就8点起床了。结果一起床发现一整版都是已经做完题目的人……当时那个瀑布汗。反正我已经决定了将整个早上都拿来做这个，就慢慢来好了。没想到……第一题就花了我15min才完全看懂，英文水平还有待欠缺啊……幸好A题很水，算法速度出现，结果我提交small，居然出错。仔细检查了我的输出，发现我所有的输出都写着&#8221;Case #1&#8243;（满脸黑线），改掉之后就AC掉小数据了，然后直接提交大数据，就继续往下走。粗略地看了看B题，发现还是没看懂，但是看到大数据的规模后，Cpp选手表示鸭梨很大，决定略过之。当时大概9点多一点，想着时间还有很多，就耐下性子看C题。C题倒是很好理解，使用模拟就能过小数据，思考大数据的算法我还思考了一下，而我想的顺序和最后Google官方给出的顺序差不多（顺便跪求那个O(N)的算法，我没想到，官方也没有给出明确的解）。然后意识到太复杂的coding是我的弱项，就选了第二个优化方法，填填补补地和模拟算法对拍上了小数据，就提交了。当时好像快11点了，我就决定先到此为止，下午再战B题。</p>
<p>中午和zxy远在美国的同学Simon大约交流了一下进度，发现他已经搞定了B题——因为高精度题目对python选手来说不痛不痒，所以只有Cpp选手在墙角内牛满面。下午4点多的时候回来看了看B题（也看了很久），算法易得，代码难写。最后草草地A掉小数据就完事了，看懂题目后大概花了15min。最近各种杂事，我就把GCJ放下了，其实要进入Round 1 的门槛还是很低的，只需要完整地过掉一题就好了。刚才看了看成绩，我提交了的都AC了，满足，等两个星期之后再战Round 1 。这次进入Round 1的人有8523只，而Round 2会有3000个名额。我看上的是Round 2 的top500可以得到一件拉风的T恤……恩，RP++保佑我能进入Round 2. 下面是我的题解和A、C两题的代码，B题要贴也要加高精度库，这里就不贴了。</p>
<p>A题的大概意思就是：有N个串联在一起的可开关插座板以及一个一直有电的总电源，1号插座板连接着总电源。一开始每一个插座板都处于关闭状态，我每打一个响指，那么所有处于有供能状态的插座板开关都会反转状态，即从开到关或者从关到开。一号插线板一直都处于有供能状态，因为总电源一直有电。而当1号处于ON的状态时，2号才处于有供能状态，当1号和2号都处于ON的状态时，3号才处于供能状态，依此类推。在第N个插线板上面有一个灯泡，问题就是如果我打了K个响指，那么灯泡会不会亮？</p>
<p>显然这个要用二进制来考虑，1表示一个插座板的开关处于ON的状态，而0就表示OFF。那么一开始就是N个0（为了方便讨论不妨设N=5）.第一次响指就变成了00001，第二次响指后就是00010，第三次就是00011，第四次就是00100……看出来了么？进行几次模拟运算之后就会发现打K次响指那么这个二进制串的值就等于K，不过要注意当K&gt;2^N时，整个串会循环出现。那么我们其实就是判断那个K是不是会导致11111的出现。11111就是2^N-1，再考虑到循环出现，则灯泡会亮就等价于 2^N|(K+1)。交一个2^N的表，代码短短就可以解决了，贴在下面。</p>
<p>B题说了那么一大串，都把我弄晕了，其实意思很简单：给出N个正整数<img src='http://s.wordpress.com/latex.php?latex=a_1%5Csim%20a_n&#038;bg=T&#038;fg=000000&#038;s=0' alt='a_1\sim a_n' title='a_1\sim a_n' class='latex' />，希望找到一个最小的非负整数y，使得<img src='http://s.wordpress.com/latex.php?latex=a_1%2By%2Ca_n%2By&#038;bg=T&#038;fg=000000&#038;s=0' alt='a_1+y,a_n+y' title='a_1+y,a_n+y' class='latex' />有最大的公约数T。首先就是要确定这个T是多少，然后求出y就是很简单的事情了。先看n=2的情况，对于两个正整数<img src='http://s.wordpress.com/latex.php?latex=a%3C%3Db&#038;bg=T&#038;fg=000000&#038;s=0' alt='a&lt;=b' title='a&lt;=b' class='latex' />，如果<img src='http://s.wordpress.com/latex.php?latex=T%7Ca%2By&#038;bg=T&#038;fg=000000&#038;s=0' alt='T|a+y' title='T|a+y' class='latex' />且<img src='http://s.wordpress.com/latex.php?latex=T%7Cb%2By&#038;bg=T&#038;fg=000000&#038;s=0' alt='T|b+y' title='T|b+y' class='latex' />，那么必有T|b-a。再令T最大，那么显然就有T=b-a。得出这个结论后，就可以拓展到n个数字了。这时候的T，就是n个数字一共<img src='http://s.wordpress.com/latex.php?latex=%5Cfrac%7Bn%28n-1%29%7D%7B2%7D&#038;bg=T&#038;fg=000000&#038;s=0' alt='\frac{n(n-1)}{2}' title='\frac{n(n-1)}{2}' class='latex' />个两两之差的最大公约数。又可以证明，如果a_1是最小的数，那么<img src='http://s.wordpress.com/latex.php?latex=a_2-a_1%2Ca_3-a_1%2C%5Ccdots%20%2Ca_n-a_1&#038;bg=T&#038;fg=000000&#038;s=0' alt='a_2-a_1,a_3-a_1,\cdots ,a_n-a_1' title='a_2-a_1,a_3-a_1,\cdots ,a_n-a_1' class='latex' />这n-1个数的最大公约数等同于之前<img src='http://s.wordpress.com/latex.php?latex=%5Cfrac%7Bn%28n-1%29%7D%7B2%7D&#038;bg=T&#038;fg=000000&#038;s=0' alt='\frac{n(n-1)}{2}' title='\frac{n(n-1)}{2}' class='latex' />个数的最大公约数。所以可以用O(N)的时间算出T。最后算y的时候要注意判断y是否等于0的情况。我怕麻烦就没有写高精度，也就没有提交B-large，普通精度的代码就不贴了，一个gcd函数加几句判断就好。</p>
<p>C题是很好理解的，也是这三道题目里最好玩的一题。有一个能容纳k个人的过山车，一天运行r次。同时有很多人来玩这个过山车，但他们是抱成很多团出现的，意即每一堆人要么一起上车，要么不上车，每一堆人玩玩过山车后会还想玩，会按照上车之前的顺序排到队伍的末尾。每一次过山车等到没有人上车（全都上了或者坐不下了）就运行一轮。现在给出过山车的运行次数r，容量k以及n个团的顺序及大小，如果每一个人做一次能得一块钱，请你计算这个过山车这一天内能赚多少钱。给个例子，比如<code>r=4，k=6,n=4,其中每一个团的大小分别是1，4，2，1。第一次运行是第一二个团上车，这时上了5个人，结束时队伍就变成了2,1,1,4，因为前两个团下车后排到了队伍的末尾，第二次运行上了3个团，一共4人，结束后队伍就变成了4,2,1,1。接着队伍还会变成1,1,4,2以及2,1,1,4。此时过山车运行结束，一共赚了21块。</code></p>
<p>这题初看很像直接模拟的题目，而且直接模拟每一次上人确实是可以解决小数据的，可以写一个用来检查优化算法是否可行。由于在large的时候N&lt;=1000，R=10^9，直接模拟会死人，那么必然不行。首先考虑到，因为R&gt;&gt;N，又由于每一个团都有可能出现在排头，所以其实最多有N只不同的队伍，如果我们建立一个表next[i]表示第i个团做排头时下一个排头是谁，那么就可以加快模拟速度了。但是这个算法在8分钟内难以算完，我们必须接着优化。接着的优化只往前想了一小步，但是效果很明显，因为R&gt;&gt;N，那么必然会出现一个排头的循环，长度不超过N，每一个循环都是一样的，意即我们只要算出每一个循环内赚的钱，再看看当天会有几个完整循环，一乘即可，最后修补一下开始和结束，就可以得到最终结果了。如上面举出的例子，循环长度为3。我就用这个算法过了C的大数据。</p>
<p>Google赛后给出的题解说，还存在一个O(N)的算法，留给大家作为练习，也可以在Group上进行讨论……估计会有什么我不常用的数据结构出现，果断坐等此法。</p>
<p>恩，过两周再加油争取挺进Round 2然后靠RP拿T恤……感觉蛮困难的，不过试试也好~</p>
<p>附：A题代码：</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include&lt;iostream&gt;</span>
using namespace std<span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #993333;">int</span> t<span style="color: #339933;">,</span>tt<span style="color: #339933;">,</span>n<span style="color: #339933;">,</span>k<span style="color: #339933;">,</span>i<span style="color: #339933;">,</span>j<span style="color: #339933;">,</span>flag<span style="color: #339933;">,</span>power<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">31</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #009900;">&#123;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span><span style="color: #0000dd;">2</span><span style="color: #339933;">,</span><span style="color: #0000dd;">4</span><span style="color: #339933;">,</span><span style="color: #0000dd;">8</span><span style="color: #339933;">,</span><span style="color: #0000dd;">16</span><span style="color: #339933;">,</span><span style="color: #0000dd;">32</span><span style="color: #339933;">,</span><span style="color: #0000dd;">64</span><span style="color: #339933;">,</span><span style="color: #0000dd;">128</span><span style="color: #339933;">,</span><span style="color: #0000dd;">256</span><span style="color: #339933;">,</span><span style="color: #0000dd;">512</span><span style="color: #339933;">,</span><span style="color: #0000dd;">1024</span><span style="color: #339933;">,</span><span style="color: #0000dd;">2048</span><span style="color: #339933;">,</span><span style="color: #0000dd;">4096</span><span style="color: #339933;">,</span><span style="color: #0000dd;">8192</span><span style="color: #339933;">,</span><span style="color: #0000dd;">16384</span><span style="color: #339933;">,</span><span style="color: #0000dd;">32768</span><span style="color: #339933;">,</span><span style="color: #0000dd;">65536</span><span style="color: #339933;">,</span><span style="color: #0000dd;">131072</span><span style="color: #339933;">,</span><span style="color: #0000dd;">262144</span><span style="color: #339933;">,</span><span style="color: #0000dd;">524288</span><span style="color: #339933;">,</span><span style="color: #0000dd;">1048576</span><span style="color: #339933;">,</span><span style="color: #0000dd;">2097152</span><span style="color: #339933;">,</span><span style="color: #0000dd;">4194304</span><span style="color: #339933;">,</span><span style="color: #0000dd;">8388608</span><span style="color: #339933;">,</span><span style="color: #0000dd;">16777216</span><span style="color: #339933;">,</span><span style="color: #0000dd;">33554432</span><span style="color: #339933;">,</span><span style="color: #0000dd;">67108864</span><span style="color: #339933;">,</span><span style="color: #0000dd;">134217728</span><span style="color: #339933;">,</span><span style="color: #0000dd;">268435456</span><span style="color: #339933;">,</span><span style="color: #0000dd;">536870912</span><span style="color: #339933;">,</span><span style="color: #0000dd;">1073741824</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    FILE <span style="color: #339933;">*</span>in<span style="color: #339933;">,*</span>out<span style="color: #339933;">;</span>
    in<span style="color: #339933;">=</span>freopen<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;A-large.in&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;r&quot;</span><span style="color: #339933;">,</span>stdin<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    out<span style="color: #339933;">=</span>freopen<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;A-large.txt&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;w&quot;</span><span style="color: #339933;">,</span>stdout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    cin<span style="color: #339933;">&gt;&gt;</span>t<span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>tt<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>tt<span style="color: #339933;">&lt;=</span>t<span style="color: #339933;">;</span>tt<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        cin<span style="color: #339933;">&gt;&gt;</span>n<span style="color: #339933;">&gt;&gt;</span>k<span style="color: #339933;">;</span>
        flag<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
        k<span style="color: #339933;">++;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>k<span style="color: #339933;">%</span>power<span style="color: #009900;">&#91;</span>n<span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
            flag<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>flag<span style="color: #009900;">&#41;</span>
            cout<span style="color: #339933;">&lt;&lt;</span><span style="color: #ff0000;">&quot;Case #&quot;</span><span style="color: #339933;">&lt;&lt;</span>tt<span style="color: #339933;">&lt;&lt;</span><span style="color: #ff0000;">&quot;: ON&quot;</span><span style="color: #339933;">&lt;&lt;</span>endl<span style="color: #339933;">;</span>
        <span style="color: #b1b100;">else</span>
            cout<span style="color: #339933;">&lt;&lt;</span><span style="color: #ff0000;">&quot;Case #&quot;</span><span style="color: #339933;">&lt;&lt;</span>tt<span style="color: #339933;">&lt;&lt;</span><span style="color: #ff0000;">&quot;: OFF&quot;</span><span style="color: #339933;">&lt;&lt;</span>endl<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    fclose<span style="color: #009900;">&#40;</span>in<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    fclose<span style="color: #009900;">&#40;</span>out<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    
    <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>C题代码：</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include&lt;iostream&gt;</span>
using namespace std<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">long</span> <span style="color: #993333;">long</span> r<span style="color: #339933;">,</span>n<span style="color: #339933;">,</span>k<span style="color: #339933;">,</span>g<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>head<span style="color: #339933;">,</span>sum<span style="color: #339933;">,</span>once<span style="color: #339933;">,</span>t<span style="color: #339933;">,</span>tt<span style="color: #339933;">,</span>i<span style="color: #339933;">,</span>j<span style="color: #339933;">,</span>a<span style="color: #339933;">,</span>b<span style="color: #339933;">,</span>round<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>mark<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #009900;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>backtrack<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>length<span style="color: #339933;">,</span>circle<span style="color: #339933;">,</span>roundsum<span style="color: #339933;">,</span>markflag<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    FILE <span style="color: #339933;">*</span>in<span style="color: #339933;">,*</span>out<span style="color: #339933;">;</span>
    in<span style="color: #339933;">=</span>freopen<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;C-large.in&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;r&quot;</span><span style="color: #339933;">,</span>stdin<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    out<span style="color: #339933;">=</span>freopen<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;C-small.txt&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;w&quot;</span><span style="color: #339933;">,</span>stdout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    cin<span style="color: #339933;">&gt;&gt;</span>t<span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>tt<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>tt<span style="color: #339933;">&lt;=</span>t<span style="color: #339933;">;</span>tt<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        cin<span style="color: #339933;">&gt;&gt;</span>r<span style="color: #339933;">&gt;&gt;</span>k<span style="color: #339933;">&gt;&gt;</span>n<span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//k is the capacity</span>
        sum<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span>n<span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            cin<span style="color: #339933;">&gt;&gt;</span>g<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            sum<span style="color: #339933;">+=</span>g<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>sum<span style="color: #339933;">&lt;=</span>k<span style="color: #009900;">&#41;</span>
            sum<span style="color: #339933;">=</span>sum<span style="color: #339933;">*</span>r<span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//the simplest case</span>
        <span style="color: #b1b100;">else</span>
        <span style="color: #009900;">&#123;</span>
            sum<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span><span style="color: #0000dd;">1000</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#123;</span>
                mark<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
                backtrack<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            mark<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
            backtrack<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
            markflag<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
            i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> 
            circle<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
            roundsum<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>markflag<span style="color: #339933;">==</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#123;</span>
                once<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>once<span style="color: #339933;">+</span>g<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">&lt;=</span>k<span style="color: #009900;">&#41;</span>
                <span style="color: #009900;">&#123;</span>
                    once<span style="color: #339933;">+=</span>g<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                    i<span style="color: #339933;">=</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%</span>n<span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                round<span style="color: #009900;">&#91;</span>circle<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span>once<span style="color: #339933;">;</span>
                circle<span style="color: #339933;">++;</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>mark<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
                    markflag<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">else</span> 
                <span style="color: #009900;">&#123;</span>
                    mark<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
                    backtrack<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span>circle<span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>j<span style="color: #339933;">=</span>backtrack<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>j<span style="color: #339933;">&lt;</span>circle<span style="color: #339933;">;</span>j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
                roundsum<span style="color: #339933;">+=</span>round<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>                
            length<span style="color: #339933;">=</span>circle<span style="color: #339933;">-</span>backtrack<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            a<span style="color: #339933;">=</span><span style="color: #009900;">&#40;</span>r<span style="color: #339933;">-</span>backtrack<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>length<span style="color: #339933;">;</span>
            b<span style="color: #339933;">=</span><span style="color: #009900;">&#40;</span>r<span style="color: #339933;">-</span>backtrack<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%</span>length<span style="color: #339933;">;</span>
            sum<span style="color: #339933;">=</span>a<span style="color: #339933;">*</span>roundsum<span style="color: #339933;">;</span>
            <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>j<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>j<span style="color: #339933;">&lt;</span>backtrack<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span>b<span style="color: #339933;">;</span>j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#123;</span>
                sum<span style="color: #339933;">+=</span>round<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        cout<span style="color: #339933;">&lt;&lt;</span><span style="color: #ff0000;">&quot;Case #&quot;</span><span style="color: #339933;">&lt;&lt;</span>tt<span style="color: #339933;">&lt;&lt;</span><span style="color: #ff0000;">&quot;: &quot;</span><span style="color: #339933;">&lt;&lt;</span>sum<span style="color: #339933;">&lt;&lt;</span>endl<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    fclose<span style="color: #009900;">&#40;</span>in<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    fclose<span style="color: #009900;">&#40;</span>out<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><small>本文由 严酷的魔王 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p>

<p>相关文章：<ol><li><a href='http://blog.programet.org/2010/04/%e4%bb%8e01%c3%9701%e5%88%b001%e7%9a%84%e5%8f%8c%e5%b0%84.html' rel='bookmark' title='Permanent Link: 从(0,1]×(0,1]到(0,1]的双射'>从(0,1]×(0,1]到(0,1]的双射</a></li><li><a href='http://blog.programet.org/2009/12/%e6%99%92%ef%bc%9ac%e8%af%ad%e8%a8%80%e6%9c%9f%e4%b8%ad%e5%ae%9e%e9%aa%8c%e6%8a%a5%e5%91%8a.html' rel='bookmark' title='Permanent Link: 晒：C语言期中实验报告'>晒：C语言期中实验报告</a></li><li><a href='http://blog.programet.org/2009/07/%e6%af%8f%e5%91%a8%e8%bd%af%e4%bb%b6%e6%8e%a8%e8%8d%90-tex.html' rel='bookmark' title='Permanent Link: 每周软件推荐-TeX'>每周软件推荐-TeX</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2010/05/google-code-jam-2010%e5%b0%9d%e9%b2%9c.html/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>FastestFox及其改进！让你的火狐更便捷</title>
		<link>http://blog.programet.org/2010/05/fastestfox%e5%8f%8a%e5%85%b6%e6%94%b9%e8%bf%9b%ef%bc%81%e8%ae%a9%e4%bd%a0%e7%9a%84%e7%81%ab%e7%8b%90%e6%9b%b4%e4%be%bf%e6%8d%b7.html</link>
		<comments>http://blog.programet.org/2010/05/fastestfox%e5%8f%8a%e5%85%b6%e6%94%b9%e8%bf%9b%ef%bc%81%e8%ae%a9%e4%bd%a0%e7%9a%84%e7%81%ab%e7%8b%90%e6%9b%b4%e4%be%bf%e6%8d%b7.html#comments</comments>
		<pubDate>Wed, 05 May 2010 14:43:09 +0000</pubDate>
		<dc:creator>最后的叶子</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[计算机]]></category>

		<guid isPermaLink="false">http://blog.programet.org/?p=2403</guid>
		<description><![CDATA[Firefox一贯以插件多著称。在这篇文章中我曾推荐过一些Firefox插件，其中有一款名为FastestFox，是用于加速浏览的插件。注意，这里所说的“加速浏览”指的不是加快火狐加载或显示网页的速度，而是通过减少你的操作步骤来提高你的浏览速度。这个插件提供了一些很有创造性的功能，完善了一些平时注意不到却又很烦人的细节，比如选择文字之后文字边上会出现各种搜索引擎和维基百科的链接图标，把类似于链接的普通文字变成链接……

如果你想尝试这个插件，可以进入安装页面：https://addons.mozilla.org/zh-CN/firefox/addon/9825
安好插件之后，你会发现上面这串原本不是链接的普通文字变成链接了！（除非你把插件的链接化Linkify功能关了……）
然而这个插件的bug同样烦人，比如：选择文字后点百度图标搜索，百度搜的是乱码。
在网上查过，要解决问题只好改插件代码：

找到用户文件夹（我的文档的上一级文件夹）
接着打开AppData\Roaming或Application Data下的Mozilla\Firefox\Profiles\（有的文件夹是隐藏的）
接下来有个以.default结尾的文件夹，打开它，然后接着开extensions\smarterwiki@wikiatic.com\chrome\content\，这个文件夹很有意义，它是FastestFox源代码文件夹

对于接下来的步骤，如果觉得麻烦，可以到文章尾部去下我修改后的文件：

用记事本打开popup_bubble.js
找到这一行：

var searchBaiduURL = &#34;http://www.baidu.com/s?wd={searchTerms}&#34;;

改为以下内容（别漏了最后的英文分号）

var searchBaiduURL = &#34;http://www.baidu.com/s?wd={searchTerms}&#38;ie=utf-8&#38;tn=sndo_dg&#34;;


同样，如果你觉得FastestFox的维基英文搜索很烦人，你可以把它改成中文的：

同样在popup_bubble.js中，找到这一行：

var searchWikipediaURL = &#34;http://api3.smarterfox.com/wikisearch/search?q={searchTerms}&#38;locale={language}&#34;;

把它改为：

var searchWikipediaURL = &#34;http://zh.wikipedia.org/zh-cn/{searchTerms}&#34;;


还有一个问题是，链接化（Linkify）时对文字识别不准，比如这个几段话：
欢迎访问http://blog.programet.org！这是叶子的家~
Programet的邮箱是programet.org@gmail.com
好喜欢Programet.org~
发现问题了吧。
解决这个问题的方法同样是改源代码：

按上面带下划线段落指出的方法找到源代码文件夹，用记事本打开Linkify.js
找到这一行：

var url_regexp = new RegExp&#40;&#34;(((https?&#124;ftp&#124;irc&#124;file)://&#124;www\\.)[^&#60;&#62;'\&#34;\\s]*[^&#60;&#62;'\&#34;\\s,.])&#124;([^[\\]&#60;&#62;'\&#34;\\s]+@[^&#60;&#62;'\&#34;\\s]+\\.[^&#60;&#62;'\&#34;\\s]+)&#34;, &#34;gi&#34;&#41;;

把它改为：

var url_regexp = new RegExp&#40;&#34;(\\b[a-z0-9_.\\-+]+@[a-z0-9_\\-+]+\\.[a-z0-9_.\\-+]+\\b)&#124;(\\b(((https?&#124;ftp&#124;irc&#124;file&#124;thunder&#124;flashget&#124;ed2k)://&#124;www\\.)[a-z0-9_./\\\\:&#38;#%?=*\\-+]+))&#124;(\\b[a-z0-9_.\\-]+\\.(com&#124;net&#124;org&#124;cn)((:\\d+)?((/&#124;\\\\)[a-z0-9_./\\\\:&#38;#%?=*\\-+]+)?)?)&#34;, &#34;gi&#34;&#41;;

再找到这一行{

if&#40;url.indexOf&#40;&#34;www.&#34;&#41; == 0&#41; &#123;

把它改为：

if&#40;url.indexOf&#40;&#34;://&#34;&#41; == -1 &#38;&#38; url.indexOf&#40;&#34;@&#34;&#41; == -1&#41; &#123;


如果你觉得太麻烦，你还是去到文章结尾吧……
要说明的是，链接化的识别不可能完全准确，我的版本自认为已经比较准了，但还会有识别错误的。如果谁有更好的改进办法，欢迎写在下面。
最后，附上我修改后的两个文件（打包好了，在这里），这两个文件需要放在Fastest的源代码文件夹替换掉原有文件（找出源代码文件夹的方法已在上面用下划线标出）。
说明：附件是基于FastestFox 4.1.3修改而成，在其他版本下不一定适用。附件是2010.5.23更新的。
本文由 最后的叶子 创作，转载或引用前请联系我们。

相关文章：NumberQuicker传奇每周软件推荐-Firefox火狐及其插件欢迎大家来测试 &#8211; SDCal Pro beta发布


相关文章：<ol><li><a href='http://blog.programet.org/2009/10/numberquicker.html' rel='bookmark' title='Permanent Link: NumberQuicker传奇'>NumberQuicker传奇</a></li><li><a href='http://blog.programet.org/2009/10/%e6%af%8f%e5%91%a8%e8%bd%af%e4%bb%b6%e6%8e%a8%e8%8d%90-firefox%e7%81%ab%e7%8b%90%e5%8f%8a%e5%85%b6%e6%8f%92%e4%bb%b6.html' rel='bookmark' title='Permanent Link: 每周软件推荐-Firefox火狐及其插件'>每周软件推荐-Firefox火狐及其插件</a></li><li><a href='http://blog.programet.org/2010/01/sdcal-pro-beta.html' rel='bookmark' title='Permanent Link: 欢迎大家来测试 &#8211; SDCal Pro beta发布'>欢迎大家来测试 &#8211; SDCal Pro beta发布</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Firefox一贯以插件多著称。在<a href="http://blog.programet.org/2009/10/%E6%AF%8F%E5%91%A8%E8%BD%AF%E4%BB%B6%E6%8E%A8%E8%8D%90-firefox%E7%81%AB%E7%8B%90%E5%8F%8A%E5%85%B6%E6%8F%92%E4%BB%B6.html" target="_blank">这篇文章</a>中我曾推荐过一些Firefox插件，其中有一款名为FastestFox，是用于加速浏览的插件。注意，这里所说的“加速浏览”指的不是加快火狐加载或显示网页的速度，而是通过减少你的操作步骤来提高你的浏览速度。这个插件提供了一些很有创造性的功能，完善了一些平时注意不到却又很烦人的细节，比如选择文字之后文字边上会出现各种搜索引擎和维基百科的链接图标，把类似于链接的普通文字变成链接……</p>
<p><span id="more-2403"></span></p>
<p>如果你想尝试这个插件，可以进入安装页面：https://addons.mozilla.org/zh-CN/firefox/addon/9825</p>
<p>安好插件之后，你会发现上面这串原本不是链接的普通文字变成链接了！（除非你把插件的链接化Linkify功能关了……）</p>
<p>然而这个插件的bug同样烦人，比如：选择文字后点百度图标搜索，百度搜的是乱码。</p>
<p>在网上查过，要解决问题只好改插件代码：</p>
<ol>
<li><span style="text-decoration: underline;">找到用户文件夹（我的文档的上一级文件夹）</span></li>
<li><span style="text-decoration: underline;">接着打开AppData\Roaming或Application Data下的Mozilla\Firefox\Profiles\（有的文件夹是隐藏的）</span></li>
<li><span style="text-decoration: underline;">接下来有个以.default结尾的文件夹，打开它，然后接着开extensions\smarterwiki@wikiatic.com\chrome\content\，这个文件夹很有意义，它是FastestFox源代码文件夹</span></li>
</ol>
<p>对于接下来的步骤，如果觉得麻烦，可以到文章尾部去下我修改后的文件：</p>
<ol>
<li>用记事本打开popup_bubble.js</li>
<li>找到这一行：</li>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> searchBaiduURL <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;http://www.baidu.com/s?wd={searchTerms}&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<li>改为以下内容（别漏了最后的英文分号）</li>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> searchBaiduURL <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;http://www.baidu.com/s?wd={searchTerms}&amp;ie=utf-8&amp;tn=sndo_dg&quot;</span><span style="color: #339933;">;</span></pre></div></div>

</ol>
<p>同样，如果你觉得FastestFox的维基英文搜索很烦人，你可以把它改成中文的：</p>
<ol>
<li>同样在popup_bubble.js中，找到这一行：</li>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> searchWikipediaURL <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;http://api3.smarterfox.com/wikisearch/search?q={searchTerms}&amp;locale={language}&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<li>把它改为：</li>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> searchWikipediaURL <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;http://zh.wikipedia.org/zh-cn/{searchTerms}&quot;</span><span style="color: #339933;">;</span></pre></div></div>

</ol>
<p>还有一个问题是，链接化（Linkify）时对文字识别不准，比如这个几段话：</p>
<blockquote><p>欢迎访问http://blog.programet.org！这是叶子的家~</p>
<p>Programet的邮箱是programet.org@gmail.com</p>
<p>好喜欢Programet.org~</p></blockquote>
<p>发现问题了吧。</p>
<p>解决这个问题的方法同样是改源代码：</p>
<ol>
<li>按上面带下划线段落指出的方法找到源代码文件夹，用记事本打开Linkify.js</li>
<li>找到这一行：</li>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> url_regexp <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;(((https?|ftp|irc|file)://|www<span style="color: #000099; font-weight: bold;">\\</span>.)[^&lt;&gt;'<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #000099; font-weight: bold;">\\</span>s]*[^&lt;&gt;'<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #000099; font-weight: bold;">\\</span>s,.])|([^[<span style="color: #000099; font-weight: bold;">\\</span>]&lt;&gt;'<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #000099; font-weight: bold;">\\</span>s]+@[^&lt;&gt;'<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #000099; font-weight: bold;">\\</span>s]+<span style="color: #000099; font-weight: bold;">\\</span>.[^&lt;&gt;'<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #000099; font-weight: bold;">\\</span>s]+)&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;gi&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<li>把它改为：</li>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> url_regexp <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;(<span style="color: #000099; font-weight: bold;">\\</span>b[a-z0-9_.<span style="color: #000099; font-weight: bold;">\\</span>-+]+@[a-z0-9_<span style="color: #000099; font-weight: bold;">\\</span>-+]+<span style="color: #000099; font-weight: bold;">\\</span>.[a-z0-9_.<span style="color: #000099; font-weight: bold;">\\</span>-+]+<span style="color: #000099; font-weight: bold;">\\</span>b)|(<span style="color: #000099; font-weight: bold;">\\</span>b(((https?|ftp|irc|file|thunder|flashget|ed2k)://|www<span style="color: #000099; font-weight: bold;">\\</span>.)[a-z0-9_./<span style="color: #000099; font-weight: bold;">\\</span><span style="color: #000099; font-weight: bold;">\\</span>:&amp;#%?=*<span style="color: #000099; font-weight: bold;">\\</span>-+]+))|(<span style="color: #000099; font-weight: bold;">\\</span>b[a-z0-9_.<span style="color: #000099; font-weight: bold;">\\</span>-]+<span style="color: #000099; font-weight: bold;">\\</span>.(com|net|org|cn)((:<span style="color: #000099; font-weight: bold;">\\</span>d+)?((/|<span style="color: #000099; font-weight: bold;">\\</span><span style="color: #000099; font-weight: bold;">\\</span>)[a-z0-9_./<span style="color: #000099; font-weight: bold;">\\</span><span style="color: #000099; font-weight: bold;">\\</span>:&amp;#%?=*<span style="color: #000099; font-weight: bold;">\\</span>-+]+)?)?)&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;gi&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<li>再找到这一行{</li>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>url.<span style="color: #660066;">indexOf</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;www.&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></pre></div></div>

<li>把它改为：</li>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>url.<span style="color: #660066;">indexOf</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;://&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span> <span style="color: #339933;">&amp;&amp;</span> url.<span style="color: #660066;">indexOf</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;@&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></pre></div></div>

</ol>
<p>如果你觉得太麻烦，你还是去到文章结尾吧……</p>
<p>要说明的是，链接化的识别不可能完全准确，我的版本自认为已经比较准了，但还会有识别错误的。如果谁有更好的改进办法，欢迎写在下面。</p>
<p>最后，附上我修改后的两个文件（打包好了，在<a href="http://blog.programet.org/wp-content/uploads/FastestFox_ModifiedPart.7z" target="_blank">这里</a>），这两个文件需要放在Fastest的源代码文件夹替换掉原有文件（找出源代码文件夹的方法已在上面用下划线标出）。</p>
<p>说明：附件是基于FastestFox 4.1.3修改而成，在其他版本下不一定适用。附件是2010.5.23更新的。</p>
<p><small>本文由 最后的叶子 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p>

<p>相关文章：<ol><li><a href='http://blog.programet.org/2009/10/numberquicker.html' rel='bookmark' title='Permanent Link: NumberQuicker传奇'>NumberQuicker传奇</a></li><li><a href='http://blog.programet.org/2009/10/%e6%af%8f%e5%91%a8%e8%bd%af%e4%bb%b6%e6%8e%a8%e8%8d%90-firefox%e7%81%ab%e7%8b%90%e5%8f%8a%e5%85%b6%e6%8f%92%e4%bb%b6.html' rel='bookmark' title='Permanent Link: 每周软件推荐-Firefox火狐及其插件'>每周软件推荐-Firefox火狐及其插件</a></li><li><a href='http://blog.programet.org/2010/01/sdcal-pro-beta.html' rel='bookmark' title='Permanent Link: 欢迎大家来测试 &#8211; SDCal Pro beta发布'>欢迎大家来测试 &#8211; SDCal Pro beta发布</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2010/05/fastestfox%e5%8f%8a%e5%85%b6%e6%94%b9%e8%bf%9b%ef%bc%81%e8%ae%a9%e4%bd%a0%e7%9a%84%e7%81%ab%e7%8b%90%e6%9b%b4%e4%be%bf%e6%8d%b7.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>在Windows下配置MinGW编译环境和Code::Blocks编辑器</title>
		<link>http://blog.programet.org/2010/04/mingw-codeblocks.html</link>
		<comments>http://blog.programet.org/2010/04/mingw-codeblocks.html#comments</comments>
		<pubDate>Fri, 09 Apr 2010 04:42:16 +0000</pubDate>
		<dc:creator>最后的叶子</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[计算机]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Code::Blocks]]></category>
		<category><![CDATA[MinGW]]></category>

		<guid isPermaLink="false">http://blog.programet.org/?p=2268</guid>
		<description><![CDATA[本文于2010.6.2为Code::Blocks新稳定版10.05更新。
有很多初学者问我C语言或C++用什么编辑器比较好，也有人问我哪个编辑器比较好用。如果对方是个新手，我会推荐Dev-C++；否则我就会回答“Code::Blocks”。在Windows下我最喜欢的还是MinGW与Code::Blocks的组合。所以今天我来介绍一下如何在Windows下安装配置它们。

新手们（包括一部分有一定编程经历的人）往往会混淆“编译器(Compiler)”和“编辑器(Editor，IDE)”这两个概念。编译器负责把C/C++代码编译成可执行代码，换而言之，它读取.c或.cpp文件并生成.exe文件（Windows下）；编辑器是方便编辑代码用的，它存取.c或.cpp并把里面的代码以比较适合的样式（比如自动缩进、代码高亮）显示在屏幕上，方便编辑，本质上它是一个带有附加功能的记事本。一般来说，我们用编辑器打开代码文件，要编译时，编辑器把文件保存并调用编译器编译这个文件，编译器就会生成可执行文件。
现在的Windows，TCC（Turbo C的编译器）早已衰落，流行的C/C++编译器有两个：

Microsoft C++ Compiler：内嵌在Visual C++中，功能很不错，感觉做得很精致，和编辑器的嵌合很好。
MinGW GCC：GCC全称是GNU Compiler Collection，著名的开源多语言编译器，编译出的代码执行效率比普通编译器高不少，支持单文件编译，得到很多编辑器支持。通常下载到的MinGW GCC都包含包含C编译器gcc-core、C++编译器gcc-g++和另外几种语言的编译器。

流行的编辑器则有很多：

Microsoft Visual Studio：简称VS，功能强大，体积也很强大，它捆绑有编译器。但是软件体积和运行速度都显出它的臃肿。它不支持单文件编译，并且“解决方案”中会生成一大堆相关文件。
Eclipse：IBM的IDE，开源，支持Java等很多语言，常常用于Java的编辑，缺点和微软的一样——很大很慢。我基本没用过，不多加评论。
NetBeans：SUN的IDE，开源，支持Windows、Linux等很多操作系统。与Eclipse类似，支持的语言很多。它内置MinGW作为C/C++编译器。其本身使用Java编写，运行慢，且有些bug。
Dev-C++：经典的迷你C/C++编辑器，开源，支持Windows、Linux等。内置了MinGW，编辑器功能不强但是非常实用，而且支持单文件编译与调试！这些功能对小程序来说都无比合适。但是Dev-C++在大工程编辑上有缺陷，而且最高版本停留在了4.9.9.2——项目已经在五年前停了。
wxDev-C++：Dev-C++的一个著名改版，加上了更强的工程管理功能和wxWidgets组件。wxWidgets是开源界时下最流行的界面工具集，能在Windows、Linux等系统下生成不同的Native级界面代码。wxDev-C++有wxWidgets的界面编辑器，被用来制作基于wxWidgets的软件。
CodeLite：一个比较标准的IDE，各方面比较均衡，不支持单文件编译。我只是简单玩过，不多加评论。
Code::Blocks：中量级的C/C++编辑器，时下非常流行，因为它功能强大，而体积并没有因此而变得臃肿。它可以选用已有的MinGW、Microsoft C++ Compiler或其他可识别的编译器。它是典型的开源软件，支持很多操作系统，插件很多，并依靠插件实现了wxWidgets界面编辑器等功能，甚至还有小游戏插件- -，它还支持Dev-C++的插件包哦！最新的Code::Blocks支持单文件编译，但是不支持单文件调试。有一个不太适合新手的地方：最新版没有中文包。

还有其他的各种编辑器，不过很多要收费。
下面还是回到正题，讲讲MinGW+Code::Blocks的安装方法。分3步：安装MinGW，安装Code::Blocks稳定版，安装Code::Blocks Nightly Builds。
安装MinGW 方法一

其实Code::Blocks网站上有一个包含MinGW的版本供下载，不过版本比较旧，官方说不支持Vista。因而最好自行单独下载安装MinGW。
SourceForge.net（开源软件网站，接下来的很多地址都来自于这里）有一个MinGW的官方在线安装包，下载地址：http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/MinGW%205.1.6/MinGW-5.1.6.exe/download
在安装向导里，你可以选择需要的语言，如C++，Java，ada等。安装时会从SourceForge.net读取文件，因此请保证网络连接（安装程序会参考IE的代理设置）。如果你身处教育网且不能访问SourceForge就比较杯具，自己去找找别的下载网站吧。
另外，注意安装过程中的这个页面：
必须至少选中MinGW base tools、g++ compiler、MinGW Make三项。
这个方法的不足之处在于很多常用的MinGW组件没有包含进来，比如gdb调试器，iconv字符集转换器等。下面的方法可以加装gdb。
gdb是MinGW配套的调试器，不存在于上述MinGW安装包中。因此要单独下载。在这个页面可以找到MinGW的其他相关组件的下载链接，可以找到“GNU Source-Level Debugger”一项，这一栏中包含gdb最新版。现在的最新版是7.1，下载地址：http://sourceforge.net/projects/mingw/files/GNU%20Source-Level%20Debugger/GDB-7.1/gdb-7.1-2-mingw32-bin.tar.gz/download
下载后解压，然后复制到MinGW安装目录即可——此时压缩包中的bin文件夹和MinGW安装目录中的bin文件夹应该会合并，如果合并了就说明你复制到的位置对了。
安装MinGW 方法二
这个方法比较方便，如果不需要除C/C++以外的编译器，推荐使用这个方法。
有人为C/C++编译环境通常用到的组件重编译并打了个包，叫做TDM&#8217;s GCC/mingw32  Builds，你可以看看最新版下载页面。现在我看到的最新版下载链接是http://sourceforge.net/projects/tdm-gcc/files/TDM-MinGW%20Installer/1.908.0/tdm-mingw-1.908.0-4.4.1-2.exe/download
直接安装即可。这个包已经包含了gdb、iconv等。
安装Code::Blocks稳定版
最新的稳定版是10.05。下载链接：http://download.berlios.de/codeblocks/codeblocks-10.05-setup.exe
如果你不想用10.05，你可以选择上一个稳定版8.02。给几个链接，任选一个下载安装即可（现在貌似后两个比较好用）：
http://downloads.sourceforge.net/codeblocks/codeblocks-8.02-setup.exe
http://download.berlios.de/codeblocks/codeblocks-8.02-setup.exe
http://download2.berlios.de/codeblocks/codeblocks-8.02-setup.exe
这几个链接，是在官方网站的这个页面找到的。
安装Code::Blocks Nightly Builds
最新的10.05在本文最后更新时还没有Nightly Builds。
如果你是用的是8.02版本，你可以按下文方法选择安装。
在Code::Blocks论坛里常常会放出最新的Nightly Builds版本：http://forums.codeblocks.org/index.php?PHPSESSID=0ab4555fb9123d5e4ef7e2dfc23a5ee7&#38;board=20.0
这一页的的一个非黑体字的栏目就是最新的版本，下载下来解压缩到安装目录即可（有很多文件被替换就对了）。
我写这篇文章的时候最新的是2010.2.27的6181版，下载地址：http://prdownload.berlios.de/codeblocks/CB_20100227_rev6181_win32.7z
这样，Code::Blocks就进入很健康的状态了，试着写段程序吧！第一次使用的时候，Code::Blocks会让你指定编译器，如果你已经安装了Visual Studio，你也可以选择用它作为编译器（其实我不推荐这么做）。另外，练好你的英文哦！（实在练不好的只好找非官方中文包，不一定兼容最新的Nightly Builds。）
附：消除Code::Blocks生成程序中中文乱码的方法
因为字符集的问题，Code::Blocks在Windows下会生成含乱码的程序。这里，我们可以给编译器增加参数来达到消除乱码。
首先，你的MinGW需要包含iconv。按前面介绍的“安装MinGW方法二”安装的MinGW包含iconv，不必操心了。如果你的MinGW不包含iconv，用下面的方法是无效的，只会带来一个新的编译错误。
好了，讲讲具体操作。
找出编译器和调试器设置：Settings-&#62;Compiler and Debugger。
左边选Global compiler settings，右边选Compiler settings下的Other options。
在下面大大的文本区中可以填入编译器选项。我们需要加上一行
-fexec-charset=GBK
加上后的效果如图所示：






如果你打开了一个别的编辑器中编写的源代码，你可能需要再加上一行
-finput-charset=GBK
这两个命令指定了MinGW编译时生成或读取文件所使用的字符集。
如果还有什么疑问，欢迎在下面留言。
本文由 最后的叶子 创作，转载或引用前请联系我们。

相关文章：NumberQuicker传奇SDCal Pro 正式发布！Google Code Jam 2010 尝鲜


相关文章：<ol><li><a href='http://blog.programet.org/2009/10/numberquicker.html' rel='bookmark' title='Permanent Link: NumberQuicker传奇'>NumberQuicker传奇</a></li><li><a href='http://blog.programet.org/2010/04/sdcal-pro.html' rel='bookmark' title='Permanent Link: SDCal Pro 正式发布！'>SDCal Pro 正式发布！</a></li><li><a href='http://blog.programet.org/2010/05/google-code-jam-2010%e5%b0%9d%e9%b2%9c.html' rel='bookmark' title='Permanent Link: Google Code Jam 2010 尝鲜'>Google Code Jam 2010 尝鲜</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;"><strong>本文于2010.6.2为Code::Blocks新稳定版10.05更新。</strong></span></p>
<p>有很多初学者问我C语言或C++用什么编辑器比较好，也有人问我哪个编辑器比较好用。如果对方是个新手，我会推荐Dev-C++；否则我就会回答“Code::Blocks”。在Windows下我最喜欢的还是MinGW与Code::Blocks的组合。所以今天我来介绍一下如何在Windows下安装配置它们。</p>
<p><span id="more-2268"></span></p>
<p>新手们（包括一部分有一定编程经历的人）往往会混淆“编译器(Compiler)”和“编辑器(Editor，IDE)”这两个概念。编译器负责把C/C++代码编译成可执行代码，换而言之，它读取.c或.cpp文件并生成.exe文件（Windows下）；编辑器是方便编辑代码用的，它存取.c或.cpp并把里面的代码以比较适合的样式（比如自动缩进、代码高亮）显示在屏幕上，方便编辑，本质上它是一个带有附加功能的记事本。一般来说，我们用编辑器打开代码文件，要编译时，编辑器把文件保存并调用编译器编译这个文件，编译器就会生成可执行文件。</p>
<p>现在的Windows，TCC（Turbo C的编译器）早已衰落，流行的C/C++编译器有两个：</p>
<ul>
<li>Microsoft C++ Compiler：内嵌在Visual C++中，功能很不错，感觉做得很精致，和编辑器的嵌合很好。</li>
<li>MinGW GCC：GCC全称是GNU Compiler Collection，著名的开源多语言编译器，编译出的代码执行效率比普通编译器高不少，支持单文件编译，得到很多编辑器支持。通常下载到的MinGW GCC都包含包含C编译器gcc-core、C++编译器gcc-g++和另外几种语言的编译器。</li>
</ul>
<p>流行的编辑器则有很多：</p>
<ul>
<li>Microsoft Visual Studio：简称VS，功能强大，体积也很强大，它捆绑有编译器。但是软件体积和运行速度都显出它的臃肿。它不支持单文件编译，并且“解决方案”中会生成一大堆相关文件。</li>
<li>Eclipse：IBM的IDE，开源，支持Java等很多语言，常常用于Java的编辑，缺点和微软的一样——很大很慢。我基本没用过，不多加评论。</li>
<li>NetBeans：SUN的IDE，开源，支持Windows、Linux等很多操作系统。与Eclipse类似，支持的语言很多。它内置MinGW作为C/C++编译器。其本身使用Java编写，运行慢，且有些bug。</li>
<li>Dev-C++：经典的迷你C/C++编辑器，开源，支持Windows、Linux等。内置了MinGW，编辑器功能不强但是非常实用，而且支持单文件编译与调试！这些功能对小程序来说都无比合适。但是Dev-C++在大工程编辑上有缺陷，而且最高版本停留在了4.9.9.2——项目已经在五年前停了。</li>
<li>wxDev-C++：Dev-C++的一个著名改版，加上了更强的工程管理功能和wxWidgets组件。wxWidgets是开源界时下最流行的界面工具集，能在Windows、Linux等系统下生成不同的Native级界面代码。wxDev-C++有wxWidgets的界面编辑器，被用来制作基于wxWidgets的软件。</li>
<li>CodeLite：一个比较标准的IDE，各方面比较均衡，不支持单文件编译。我只是简单玩过，不多加评论。</li>
<li>Code::Blocks：中量级的C/C++编辑器，时下非常流行，因为它功能强大，而体积并没有因此而变得臃肿。它可以选用已有的MinGW、Microsoft C++ Compiler或其他可识别的编译器。它是典型的开源软件，支持很多操作系统，插件很多，并依靠插件实现了wxWidgets界面编辑器等功能，甚至还有小游戏插件- -，它还支持Dev-C++的插件包哦！最新的Code::Blocks支持单文件编译，但是不支持单文件调试。有一个不太适合新手的地方：最新版没有中文包。</li>
</ul>
<p>还有其他的各种编辑器，不过很多要收费。</p>
<p>下面还是回到正题，讲讲MinGW+Code::Blocks的安装方法。分3步：安装MinGW，安装Code::Blocks稳定版，安装Code::Blocks Nightly Builds。</p>
<h3>安装MinGW 方法一<strong><br />
</strong></h3>
<p>其实Code::Blocks网站上有一个包含MinGW的版本供下载，不过版本比较旧，官方说不支持Vista。因而最好自行单独下载安装MinGW。</p>
<p>SourceForge.net（开源软件网站，接下来的很多地址都来自于这里）有一个MinGW的官方在线安装包，下载地址：<a href="http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/MinGW%205.1.6/MinGW-5.1.6.exe/download" target="_blank">http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/MinGW%205.1.6/MinGW-5.1.6.exe/download</a></p>
<p>在安装向导里，你可以选择需要的语言，如C++，Java，ada等。安装时会从SourceForge.net读取文件，因此请保证网络连接（安装程序会参考IE的代理设置）。如果你身处教育网且不能访问SourceForge就比较杯具，自己去找找别的下载网站吧。</p>
<p>另外，注意安装过程中的这个页面：</p>
<div id="attachment_2272" class="wp-caption aligncenter" style="width: 420px"><img class="size-full wp-image-2272 " title="MinGW Setup" src="http://blog.programet.org/index.php?feedimage=wp-content/uploads/mingw-1.jpg" alt="MinGW Setup" width="410" height="318" /><p class="wp-caption-text">MinGW安装选项</p></div>
<p>必须至少选中MinGW base tools、g++ compiler、MinGW Make三项。</p>
<p>这个方法的不足之处在于很多常用的MinGW组件没有包含进来，比如gdb调试器，iconv字符集转换器等。下面的方法可以加装gdb。</p>
<p>gdb是MinGW配套的调试器，不存在于上述MinGW安装包中。因此要单独下载。在<a href="http://sourceforge.net/projects/mingw/files/" target="_blank">这个页面</a>可以找到MinGW的其他相关组件的下载链接，可以找到“GNU Source-Level Debugger”一项，这一栏中包含gdb最新版。现在的最新版是7.1，下载地址：<a href="http://sourceforge.net/projects/mingw/files/GNU%20Source-Level%20Debugger/GDB-7.1/gdb-7.1-2-mingw32-bin.tar.gz/download" target="_blank">http://sourceforge.net/projects/mingw/files/GNU%20Source-Level%20Debugger/GDB-7.1/gdb-7.1-2-mingw32-bin.tar.gz/download</a></p>
<p>下载后解压，然后复制到MinGW安装目录即可——此时压缩包中的bin文件夹和MinGW安装目录中的bin文件夹应该会合并，如果合并了就说明你复制到的位置对了。</p>
<h3>安装MinGW 方法二</h3>
<p>这个方法比较方便，如果不需要除C/C++以外的编译器，推荐使用这个方法。</p>
<p>有人为C/C++编译环境通常用到的组件重编译并打了个包，叫做TDM&#8217;s GCC/mingw32  Builds，你可以看看<a href="http://www.tdragon.net/recentgcc/" target="_blank">最新版下载页面</a>。现在我看到的最新版下载链接是<a href="http://sourceforge.net/projects/tdm-gcc/files/TDM-MinGW%20Installer/1.908.0/tdm-mingw-1.908.0-4.4.1-2.exe/download" target="_blank">http://sourceforge.net/projects/tdm-gcc/files/TDM-MinGW%20Installer/1.908.0/tdm-mingw-1.908.0-4.4.1-2.exe/download</a></p>
<p>直接安装即可。这个包已经包含了gdb、iconv等。</p>
<h3>安装Code::Blocks稳定版</h3>
<p><span style="color: #ff0000;"><strong>最新的稳定版是10.05。下载链接：</strong></span><a href="http://download.berlios.de/codeblocks/codeblocks-10.05-setup.exe">http://download.berlios.de/codeblocks/codeblocks-10.05-setup.exe</a></p>
<p>如果你不想用10.05，你可以选择上一个稳定版8.02。给几个链接，任选一个下载安装即可（现在貌似后两个比较好用）：</p>
<p><a href="http://downloads.sourceforge.net/codeblocks/codeblocks-8.02-setup.exe" target="_blank">http://downloads.sourceforge.net/codeblocks/codeblocks-8.02-setup.exe</a></p>
<p><a href="http://download.berlios.de/codeblocks/codeblocks-8.02-setup.exe" target="_blank">http://download.berlios.de/codeblocks/codeblocks-8.02-setup.exe</a></p>
<p><a href="http://download2.berlios.de/codeblocks/codeblocks-8.02-setup.exe" target="_blank">http://download2.berlios.de/codeblocks/codeblocks-8.02-setup.exe</a></p>
<p>这几个链接，是在官方网站的这个页面找到的。</p>
<h3>安装Code::Blocks Nightly Builds</h3>
<p><strong><span style="color: #ff0000;">最新的10.05在本文最后更新时还没有Nightly Builds。</span></strong></p>
<p>如果你是用的是8.02版本，你可以按下文方法选择安装。</p>
<p>在Code::Blocks论坛里常常会放出最新的Nightly Builds版本：<a href="http://forums.codeblocks.org/index.php?PHPSESSID=0ab4555fb9123d5e4ef7e2dfc23a5ee7&amp;board=20.0" target="_blank">http://forums.codeblocks.org/index.php?PHPSESSID=0ab4555fb9123d5e4ef7e2dfc23a5ee7&amp;board=20.0</a></p>
<p>这一页的的一个非黑体字的栏目就是最新的版本，下载下来解压缩到安装目录即可（有很多文件被替换就对了）。</p>
<p>我写这篇文章的时候最新的是2010.2.27的6181版，下载地址：<a href="http://prdownload.berlios.de/codeblocks/CB_20100227_rev6181_win32.7z" target="_blank">http://prdownload.berlios.de/codeblocks/CB_20100227_rev6181_win32.7z</a></p>
<p>这样，Code::Blocks就进入很健康的状态了，试着写段程序吧！第一次使用的时候，Code::Blocks会让你指定编译器，如果你已经安装了Visual Studio，你也可以选择用它作为编译器（其实我不推荐这么做）。另外，练好你的英文哦！（实在练不好的只好找非官方中文包，不一定兼容最新的Nightly Builds。）</p>
<h3>附：消除Code::Blocks生成程序中中文乱码的方法</h3>
<p>因为字符集的问题，Code::Blocks在Windows下会生成含乱码的程序。这里，我们可以给编译器增加参数来达到消除乱码。</p>
<p>首先，你的MinGW需要包含iconv。按前面介绍的“安装MinGW方法二”安装的MinGW包含iconv，不必操心了。如果你的MinGW不包含iconv，用下面的方法是无效的，只会带来一个新的编译错误。</p>
<p>好了，讲讲具体操作。</p>
<p>找出编译器和调试器设置：Settings-&gt;Compiler and Debugger。</p>
<p>左边选Global compiler settings，右边选Compiler settings下的Other options。</p>
<p>在下面大大的文本区中可以填入编译器选项。我们需要加上一行</p>
<blockquote><p>-fexec-charset=GBK</p></blockquote>
<p>加上后的效果如图所示：</p>
<p style="text-align: center;">
<div class="mceTemp mceIEcenter">
<dl id="attachment_2273" class="wp-caption aligncenter" style="width: 817px;">
<dt class="wp-caption-dt"><img class="size-full wp-image-2273    " title="Code::Blocks消除乱码设置" src="http://blog.programet.org/index.php?feedimage=wp-content/uploads/Corel.jpg" alt="Code::Blocks消除乱码设置" width="807" height="735" /></dt>
</dl>
</div>
<p>如果你打开了一个别的编辑器中编写的源代码，你可能需要再加上一行</p>
<blockquote><p>-finput-charset=GBK</p></blockquote>
<p>这两个命令指定了MinGW编译时生成或读取文件所使用的字符集。</p>
<p>如果还有什么疑问，欢迎在下面留言。</p>
<p><small>本文由 最后的叶子 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p>

<p>相关文章：<ol><li><a href='http://blog.programet.org/2009/10/numberquicker.html' rel='bookmark' title='Permanent Link: NumberQuicker传奇'>NumberQuicker传奇</a></li><li><a href='http://blog.programet.org/2010/04/sdcal-pro.html' rel='bookmark' title='Permanent Link: SDCal Pro 正式发布！'>SDCal Pro 正式发布！</a></li><li><a href='http://blog.programet.org/2010/05/google-code-jam-2010%e5%b0%9d%e9%b2%9c.html' rel='bookmark' title='Permanent Link: Google Code Jam 2010 尝鲜'>Google Code Jam 2010 尝鲜</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2010/04/mingw-codeblocks.html/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>SDCal Pro 正式发布！</title>
		<link>http://blog.programet.org/2010/04/sdcal-pro.html</link>
		<comments>http://blog.programet.org/2010/04/sdcal-pro.html#comments</comments>
		<pubDate>Sun, 04 Apr 2010 17:57:37 +0000</pubDate>
		<dc:creator>最后的叶子</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[计算机]]></category>

		<guid isPermaLink="false">http://blog.programet.org/?p=2252</guid>
		<description><![CDATA[经过冬歇期之后一周的调试与改进，SDCal Pro正式版发布了！先给一个截图：


如果你还没明白SDCal Pro为何物，你可以前往以前的博文《欢迎大家来测试 – SDCal Pro beta发布》或者看看这篇博文的缩略版：
SDCal是我在高二完成的一个数独解答程序，能提供对于某个数独问题的求解（所有解），或单步求解，显示求解的步骤。
从去年11月开始，我开始编写SDCal的改进版，SDCal绝大部分被重写。我把它称作SDCal Pro，相当于SDCal的2.0版。12月份由于期考等各种事务，工作停滞。终于，经过努力，SDCal Pro beta发布了。
SDCal有了很大的改进，主要如下：

有一个不错的图形界面，用Gtk+编写。数独编辑功能强大。
支持估计数独题难度。
可以显示解题步骤。
加入了数独生成算法，可以根据设定的难度范围，随机生成数独。但是效率还有改进的余地。
多操作系统支持。


现在，SDCal Pro已针对测试者提出建议进行了修改，并加入了中文支持（如果你希望看看我蹩脚的英文的话，你需要使用英文操作系统或用其他一些技术手段）。界面也进行了一定的修改，但仍然使用Gtk+和libglade组织。核心算法未做任何改变，只是清理了代码，算法在前面提到的那篇博文中已有初步描述：
SDCal算法分为两个部分：sdcal和sdcreate。
sdcal用于数独求解。它使用一组算法来得到数独的解，其中主干部分是逻辑推理（模拟算法），此外还使用guessing（搜索算法）加以辅助。这个模块可以得到以很快的速度得到数独的多个解。目前，sdcal求得数独解的上限被设定为99。sdcal包含数独难度估计算法，它分析解题时每一步的难度，并将整个数独题难度记为每一步难度的总和。
sdcreate用于生成数独问题。它依赖于sdcal。sdcreate首先生成一个多解、很难的数独题，使用sdcal求解并估计难度，最后设法将题目变为单一解、难度适中的题目。sdcreate支持自定义题目难度范围、空格数、对称性等参数，并过滤掉不符合要求的问题；但是过滤是个漫长的过程，这降低了sdcreate的效率。
SDCal Pro正式版已发布在http://sdcal.sf.net。这一次释放了源代码和Windows版安装程序，其中安装程序包含Gtk+和libglade运行库，安装程序会检测Gtk+是否已安装（这个检测不准确，所以安装Gtk+是可选的）。如果希望在其他系统中编译，则系统中必须包含库libgtk2.0-dev，libglade2.0-dev。
好了，不说太多。接下来是固定栏目：
感谢
SDCal 1.0测试者：Sherry Zhou。
SDCal Pro Alpha测试者：严酷的魔王（其实这个不用感谢），时间矢，Liangent，王主任。
数独事业关注者：rombalance，WYZ。
本文由 最后的叶子 创作，转载或引用前请联系我们。

相关文章：欢迎大家来测试 &#8211; SDCal Pro beta发布


相关文章：<ol><li><a href='http://blog.programet.org/2010/01/sdcal-pro-beta.html' rel='bookmark' title='Permanent Link: 欢迎大家来测试 &#8211; SDCal Pro beta发布'>欢迎大家来测试 &#8211; SDCal Pro beta发布</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>经过冬歇期之后一周的调试与改进，SDCal Pro正式版发布了！先给一个截图：</p>
<p style="text-align: center;"><img class="size-full wp-image-2256 aligncenter" title="sdcalpro" src="http://blog.programet.org/index.php?feedimage=wp-content/uploads/sdcalpro.jpg" alt="" width="394" height="268" /></p>
<p><span id="more-2252"></span></p>
<p>如果你还没明白SDCal Pro为何物，你可以前往以前的博文<a href="http://blog.programet.org/2010/01/sdcal-pro-beta.html">《欢迎大家来测试 – SDCal Pro beta发布》</a>或者看看这篇博文的缩略版：</p>
<blockquote><p>SDCal是我在高二完成的一个数独解答程序，能提供对于某个数独问题的求解（所有解），或单步求解，显示求解的步骤。</p>
<p>从去年11月开始，我开始编写SDCal的改进版，SDCal绝大部分被重写。我把它称作SDCal Pro，相当于SDCal的2.0版。12月份由于期考等各种事务，工作停滞。终于，经过努力，SDCal Pro beta发布了。</p>
<p>SDCal有了很大的改进，主要如下：</p>
<ul>
<li>有一个不错的图形界面，用Gtk+编写。数独编辑功能强大。</li>
<li>支持估计数独题难度。</li>
<li>可以显示解题步骤。</li>
<li>加入了数独生成算法，可以根据设定的难度范围，随机生成数独。但是效率还有改进的余地。</li>
<li>多操作系统支持。</li>
</ul>
</blockquote>
<p>现在，SDCal Pro已针对测试者提出建议进行了修改，并加入了中文支持（如果你希望看看我蹩脚的英文的话，你需要使用英文操作系统或用其他一些技术手段）。界面也进行了一定的修改，但仍然使用Gtk+和libglade组织。核心算法未做任何改变，只是清理了代码，算法在前面提到的那篇博文中已有初步描述：</p>
<blockquote><p>SDCal算法分为两个部分：sdcal和sdcreate。</p>
<p>sdcal用于数独求解。它使用一组算法来得到数独的解，其中主干部分是逻辑推理（模拟算法），此外还使用guessing（搜索算法）加以辅助。这个模块可以得到以很快的速度得到数独的多个解。目前，sdcal求得数独解的上限被设定为99。sdcal包含数独难度估计算法，它分析解题时每一步的难度，并将整个数独题难度记为每一步难度的总和。</p>
<p>sdcreate用于生成数独问题。它依赖于sdcal。sdcreate首先生成一个多解、很难的数独题，使用sdcal求解并估计难度，最后设法将题目变为单一解、难度适中的题目。sdcreate支持自定义题目难度范围、空格数、对称性等参数，并过滤掉不符合要求的问题；但是过滤是个漫长的过程，这降低了sdcreate的效率。</p></blockquote>
<p>SDCal Pro正式版已发布在http://sdcal.sf.net。这一次释放了<a href="http://sourceforge.net/projects/sdcal/files/SDCal%20Pro%202.0.2.2/SDCalPro-2.0.2-src.7z/download" target="_blank">源代码</a>和<a href="http://sourceforge.net/projects/sdcal/files/SDCal%20Pro%202.0.2.2/SDCalPro-2.0.2-installer.exe/download" target="_blank">Windows版安装程序</a>，其中安装程序包含Gtk+和libglade运行库，安装程序会检测Gtk+是否已安装（这个检测不准确，所以安装Gtk+是可选的）。如果希望在其他系统中编译，则系统中必须包含库libgtk2.0-dev，libglade2.0-dev。</p>
<p>好了，不说太多。接下来是固定栏目：</p>
<p><em><strong>感谢</strong></em></p>
<p>SDCal 1.0测试者：Sherry Zhou。</p>
<p>SDCal Pro Alpha测试者：严酷的魔王（其实这个不用感谢），时间矢，Liangent，王主任。</p>
<p>数独事业关注者：rombalance，WYZ。</p>
<p><small>本文由 最后的叶子 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p>

<p>相关文章：<ol><li><a href='http://blog.programet.org/2010/01/sdcal-pro-beta.html' rel='bookmark' title='Permanent Link: 欢迎大家来测试 &#8211; SDCal Pro beta发布'>欢迎大家来测试 &#8211; SDCal Pro beta发布</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2010/04/sdcal-pro.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Wormux——开源百战天虫</title>
		<link>http://blog.programet.org/2010/04/wormux%e2%80%94%e2%80%94%e5%bc%80%e6%ba%90%e7%99%be%e6%88%98%e5%a4%a9%e8%99%ab.html</link>
		<comments>http://blog.programet.org/2010/04/wormux%e2%80%94%e2%80%94%e5%bc%80%e6%ba%90%e7%99%be%e6%88%98%e5%a4%a9%e8%99%ab.html#comments</comments>
		<pubDate>Fri, 02 Apr 2010 12:27:48 +0000</pubDate>
		<dc:creator>最后的叶子</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[推荐]]></category>
		<category><![CDATA[游戏]]></category>
		<category><![CDATA[计算机]]></category>

		<guid isPermaLink="false">http://blog.programet.org/?p=2240</guid>
		<description><![CDATA[叶子今天第一次尝试为大家推荐一个游戏，因为这个游戏是极个别的能够留在叶子的电脑里的游戏。
Wormux &#8211; http://www.wormux.org

他叫做Wormux，大概是Worms和Linux的缩写。Worms for Linux，顾名思义，是为Linux打造的游戏——当然是免费开源的，是叶子玩过的最好的Linux游戏了。
想必不少人应该听说过经典游戏“百战天虫”吧。一群可爱的小虫子分成几派，在奇奇怪怪的山坡、奶酪、垃圾场上扛起小炮筒，挂起降落伞，你争我斗；每位玩家可以操纵一支队，可以有多个玩家在同一台电脑上玩（这样玩其实很有喜感），或是联机玩。
百战天虫最经典的版本是世界聚会版（Worms World Party），这一版年代很久远，最开始时甚至不支持XP，现在在XP上能玩的是经过修改过的。即使这样，对更高版本的Windows（包括Wine）和部分显卡的支持仍存在问题，比如不支持叶子的本本。更新的版本没有坚持世界聚会的传统，而变成了3D版本，反而失去了味道。
Worms World Party让虫迷们难以忘怀，于是，有人便组织了开源项目Wormux，制作一个仿百战天虫游戏，使它能够兼容最新的硬件和操作系统。现在Wormux支持Windows、Linux、Mac OS、Meamo port、HaiKu、FreeBSD等多种操作系统和N种语言（包括简体中文）。

有意思的是，Wormux把所有的虫子换成了各种开源软件的标志，比如Firefox的狐狸，GNU的牛；不过叶子喜欢用的是蓝色的雷鸟（ThunderBird）。Wormux的地图惊人的多，这是开源人共同努力的结果；有些地图很有意思也很需要技巧，比如蜂巢状的地图。
最新的Wormux 0.9已经支持人机对战，有个还不错的AI。武器还算丰富，但是与Worms World Party还有差距。游戏最多可以有4支队，每对10只（魔王认为这很利于毒害宿舍）。
Wormux还是个开发中的项目，更新非常快，过半个月再访问一次Wormux的站点，很可能就会发现新版本。现在Wormux还不是很稳定——不过已经比以前好多了，以前的Windows版Wormux经常因为语言或某种武器而崩溃。
截至这篇文章发布时止（我只能这么说），Wormux的最新版本为0.9.1。下面给出几个链接：
下载选择列表地址：http://www.wormux.org/phpboost/download/download.php
Windows版Wormux 0.9.1下载地址：http://www.wormux.org/phpboost/download/file-3+wormux-0-9-1-windows.php
附加地图下载地址：http://www.wormux.org/phpboost/download/download-6+bonus-map-pack-2010-02-21.php
附加地图应该保存到的位置：
Linux：~/.local/share/wormux/map/
Windows XP：C:\Documents and Settings\（用户名）\Application Data\Wormux\map\
Windows Vista/7: C:\Users\（用户名）\AppData\Roaming\Wormux\map\
谢谢大家对Wormux的支持！
本文由 最后的叶子 创作，转载或引用前请联系我们。

相关文章：NumberQuicker传奇Tell Me Why推荐时间：划线骑士2


相关文章：<ol><li><a href='http://blog.programet.org/2009/10/numberquicker.html' rel='bookmark' title='Permanent Link: NumberQuicker传奇'>NumberQuicker传奇</a></li><li><a href='http://blog.programet.org/2008/09/tell-me-why.html' rel='bookmark' title='Permanent Link: Tell Me Why'>Tell Me Why</a></li><li><a href='http://blog.programet.org/2009/08/%e6%8e%a8%e8%8d%90%e6%97%b6%e9%97%b4%ef%bc%9a%e5%88%92%e7%ba%bf%e9%aa%91%e5%a3%ab2.html' rel='bookmark' title='Permanent Link: 推荐时间：划线骑士2'>推荐时间：划线骑士2</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>叶子今天第一次尝试为大家推荐一个游戏，因为这个游戏是极个别的能够留在叶子的电脑里的游戏。</p>
<blockquote><p>Wormux &#8211; <a href="http://www.wormux.org" target="_blank">http://www.wormux.org</a></p></blockquote>
<p><span id="more-2240"></span></p>
<p>他叫做Wormux，大概是Worms和Linux的缩写。Worms for Linux，顾名思义，是为Linux打造的游戏——当然是免费开源的，是叶子玩过的最好的Linux游戏了。</p>
<p>想必不少人应该听说过经典游戏“百战天虫”吧。一群可爱的小虫子分成几派，在奇奇怪怪的山坡、奶酪、垃圾场上扛起小炮筒，挂起降落伞，你争我斗；每位玩家可以操纵一支队，可以有多个玩家在同一台电脑上玩（这样玩其实很有喜感），或是联机玩。</p>
<p>百战天虫最经典的版本是世界聚会版（Worms World Party），这一版年代很久远，最开始时甚至不支持XP，现在在XP上能玩的是经过修改过的。即使这样，对更高版本的Windows（包括Wine）和部分显卡的支持仍存在问题，比如不支持叶子的本本。更新的版本没有坚持世界聚会的传统，而变成了3D版本，反而失去了味道。</p>
<p>Worms World Party让虫迷们难以忘怀，于是，有人便组织了开源项目Wormux，制作一个仿百战天虫游戏，使它能够兼容最新的硬件和操作系统。现在Wormux支持Windows、Linux、Mac OS、Meamo port、HaiKu、FreeBSD等多种操作系统和N种语言（包括简体中文）。</p>
<p><img class="alignnone" title="Wormux" src="../wp-content/uploads/%E6%97%A0%E6%A0%87%E9%A2%981.jpg" alt="" width="400" height="230" /></p>
<p>有意思的是，Wormux把所有的虫子换成了各种开源软件的标志，比如Firefox的狐狸，GNU的牛；不过叶子喜欢用的是蓝色的雷鸟（ThunderBird）。Wormux的地图惊人的多，这是开源人共同努力的结果；有些地图很有意思也很需要技巧，比如蜂巢状的地图。</p>
<p>最新的Wormux 0.9已经支持人机对战，有个还不错的AI。武器还算丰富，但是与Worms World Party还有差距。游戏最多可以有4支队，每对10只（魔王认为这很利于毒害宿舍）。</p>
<p>Wormux还是个开发中的项目，更新非常快，过半个月再访问一次Wormux的站点，很可能就会发现新版本。现在Wormux还不是很稳定——不过已经比以前好多了，以前的Windows版Wormux经常因为语言或某种武器而崩溃。</p>
<p>截至这篇文章发布时止（我只能这么说），Wormux的最新版本为0.9.1。下面给出几个链接：</p>
<blockquote><p>下载选择列表地址：<a href="http://www.wormux.org/phpboost/download/download.php" target="_blank">http://www.wormux.org/phpboost/download/download.php</a></p>
<p>Windows版Wormux 0.9.1下载地址：<a href="http://www.wormux.org/phpboost/download/file-3+wormux-0-9-1-windows.php" target="_blank">http://www.wormux.org/phpboost/download/file-3+wormux-0-9-1-windows.php</a></p>
<p>附加地图下载地址：<a href="http://www.wormux.org/phpboost/download/download-6+bonus-map-pack-2010-02-21.php" target="_blank">http://www.wormux.org/phpboost/download/download-6+bonus-map-pack-2010-02-21.php</a></p>
<p>附加地图应该保存到的位置：</p>
<p>Linux：<em>~/.local/share/wormux/map/</em></p>
<p>Windows XP：<em>C:\Documents and Settings\（用户名）\Application Data\Wormux\map\</em></p>
<p>Windows Vista/7: <em>C:\Users\</em><em>（用户名）</em><em>\AppData\Roaming\Wormux\map\</em></p></blockquote>
<p>谢谢大家对Wormux的支持！</p>
<p><small>本文由 最后的叶子 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p>

<p>相关文章：<ol><li><a href='http://blog.programet.org/2009/10/numberquicker.html' rel='bookmark' title='Permanent Link: NumberQuicker传奇'>NumberQuicker传奇</a></li><li><a href='http://blog.programet.org/2008/09/tell-me-why.html' rel='bookmark' title='Permanent Link: Tell Me Why'>Tell Me Why</a></li><li><a href='http://blog.programet.org/2009/08/%e6%8e%a8%e8%8d%90%e6%97%b6%e9%97%b4%ef%bc%9a%e5%88%92%e7%ba%bf%e9%aa%91%e5%a3%ab2.html' rel='bookmark' title='Permanent Link: 推荐时间：划线骑士2'>推荐时间：划线骑士2</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2010/04/wormux%e2%80%94%e2%80%94%e5%bc%80%e6%ba%90%e7%99%be%e6%88%98%e5%a4%a9%e8%99%ab.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>软件推荐-Orbit Downloader</title>
		<link>http://blog.programet.org/2010/02/%e8%bd%af%e4%bb%b6%e6%8e%a8%e8%8d%90-orbit-downloader.html</link>
		<comments>http://blog.programet.org/2010/02/%e8%bd%af%e4%bb%b6%e6%8e%a8%e8%8d%90-orbit-downloader.html#comments</comments>
		<pubDate>Mon, 08 Feb 2010 04:08:28 +0000</pubDate>
		<dc:creator>Malloc</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[网络]]></category>
		<category><![CDATA[下载]]></category>
		<category><![CDATA[软件推荐]]></category>
		<category><![CDATA[迅雷]]></category>

		<guid isPermaLink="false">http://blog.programet.cn/?p=2105</guid>
		<description><![CDATA[这个栏目貌似不能叫每周软件推荐了，因为已经跳票很久了- -。今天兴致上来，到畏死它下面玩玩软件，就发现了这么一款下载软件。
Orbit Dowloader, leader of download manager revolution, is devoted to new generation web (web2.0) downloading, such as video/music/streaming media from Myspace, YouTube, Imeem, Pandora, Rapidshare, support RTMP. And to make general downloading easier and faster.

啧啧啧，很大的口气。不过目前我还没有体验它宣称的强大的多媒体下载功能。我的安装它的目标是让它成为迅雷的替代者。目前看来它是合格的。
首先它占用资源少。安装文件2.5M，安装完成之后是8M。在畏死它打开它之后，有两个进程，加起来没超过1M（难道是用汇编写的么- -）！我下载腾讯游戏大厅的时候，内存占用也只有4M。
然后它不弹出任何广告，用户界面上也没有任何多余的广告栏。这不禁让我想起用网络蚂蚁的青葱岁月（很奇怪，现在网络蚂蚁居然下载不了东西）。


速度方面。Orbit 采用和迅雷一样的p2p技术，下载速度不相上下。下载腾讯游戏大厅的时候，是以极速下载的（我的是1Mbps的宽带，换算过来就是128k/s的下载速度）。
Orbit还集成了多个浏览器支持：IE, Google Chrome, Firefox, Opera, Maxthon, Netscape。
那些饱受迅雷广告轰炸之苦的盆友可以考虑试用一下这款下载工具。安装的时候注意插件。
本文由 Malloc 创作，转载或引用前请联系我们。

相关文章：软件推荐-Mozilla Thunderbird


相关文章：<ol><li><a href='http://blog.programet.org/2010/05/%e8%bd%af%e4%bb%b6%e6%8e%a8%e8%8d%90-mozilla-thunderbird.html' rel='bookmark' title='Permanent Link: 软件推荐-Mozilla Thunderbird'>软件推荐-Mozilla Thunderbird</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>这个栏目貌似不能叫每周软件推荐了，因为已经跳票很久了- -。今天兴致上来，到畏死它下面玩玩软件，就发现了这么一款下载软件。</p>
<blockquote><p><strong>Orbit Dowloader</strong>, leader of download manager revolution, is devoted to new generation web (web2.0) downloading, such as video/music/streaming media from Myspace, YouTube, Imeem, Pandora, Rapidshare, support RTMP. And to make general downloading easier and faster.</p></blockquote>
<p><span id="more-2105"></span></p>
<p>啧啧啧，很大的口气。不过目前我还没有体验它宣称的强大的多媒体下载功能。我的安装它的目标是让它成为迅雷的替代者。目前看来它是合格的。</p>
<p>首先它占用资源少。安装文件2.5M，安装完成之后是8M。在畏死它打开它之后，有两个进程，加起来没超过1M（难道是用汇编写的么- -）！我下载腾讯游戏大厅的时候，内存占用也只有4M。</p>
<p>然后它不弹出任何广告，用户界面上也没有任何多余的广告栏。这不禁让我想起用网络蚂蚁的青葱岁月（很奇怪，现在网络蚂蚁居然下载不了东西）。</p>
<hr /><img src="http://www.orbitdownloader.com/img2/screenshot1.jpg" alt="" align="center" /></p>
<hr />
<p>速度方面。Orbit 采用和迅雷一样的p2p技术，下载速度不相上下。下载腾讯游戏大厅的时候，是以极速下载的（我的是1Mbps的宽带，换算过来就是128k/s的下载速度）。</p>
<p>Orbit还集成了多个浏览器支持：<strong>IE, Google Chrome, Firefox, Opera, Maxthon, Netscape</strong>。</p>
<p>那些饱受迅雷广告轰炸之苦的盆友可以考虑试用一下这款下载工具。安装的时候注意插件。</p>
<p><small>本文由 Malloc 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p>

<p>相关文章：<ol><li><a href='http://blog.programet.org/2010/05/%e8%bd%af%e4%bb%b6%e6%8e%a8%e8%8d%90-mozilla-thunderbird.html' rel='bookmark' title='Permanent Link: 软件推荐-Mozilla Thunderbird'>软件推荐-Mozilla Thunderbird</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2010/02/%e8%bd%af%e4%bb%b6%e6%8e%a8%e8%8d%90-orbit-downloader.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<series:name><![CDATA[软件推荐]]></series:name>
	</item>
		<item>
		<title>欢迎大家来测试 &#8211; SDCal Pro beta发布</title>
		<link>http://blog.programet.org/2010/01/sdcal-pro-beta.html</link>
		<comments>http://blog.programet.org/2010/01/sdcal-pro-beta.html#comments</comments>
		<pubDate>Sat, 16 Jan 2010 15:20:47 +0000</pubDate>
		<dc:creator>最后的叶子</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[计算机]]></category>
		<category><![CDATA[SDCal]]></category>
		<category><![CDATA[数独]]></category>

		<guid isPermaLink="false">http://blog.programet.cn/?p=1933</guid>
		<description><![CDATA[SDCal是我在高二完成的一个数独解答程序，能提供对于某个数独问题的求解（所有解），或单步求解，显示求解的步骤。
从去年11月开始，我开始编写SDCal的改进版，SDCal绝大部分被重写。我把它称作SDCal Pro，相当于SDCal的2.0版。12月份由于期考等各种事务，工作停滞。终于，经过努力，SDCal Pro beta发布了。

SDCal有了很大的改进，主要如下：

有一个不错的图形界面，用Gtk+编写。数独编辑功能强大。
支持估计数独题难度。
可以显示解题步骤。
加入了数独生成算法，可以根据设定的难度范围，随机生成数独。但是效率还有改进的余地。
多操作系统支持。

前几天我完成了SDCal Pro的修改，Windows的beta版已经发布在http://sdcal.sf.net，在这个页面可以下载。很抱歉，现在还没来得及做中文包及Linux版（源文件应该可以在含libgtk2.0-dev库的Linux下编译运行，欢迎大家帮忙用gettext做一个中文包）。
关于SDCal算法
SDCal算法分为两个部分：sdcal和sdcreate。
sdcal用于数独求解。它使用一组算法来得到数独的解，其中主干部分是逻辑推理（模拟算法），此外还使用guessing（搜索算法）加以辅助。这个模块可以得到以很快的速度得到数独的多个解。目前，sdcal求得数独解的上限被设定为99。sdcal包含数独难度估计算法，它分析解题时每一步的难度，并将整个数独题难度记为每一步难度的总和。
sdcreate用于生成数独问题。它依赖于sdcal。sdcreate首先生成一个多解、很难的数独题，使用sdcal求解并估计难度，最后设法将题目变为单一解、难度适中的题目。sdcreate支持自定义题目难度范围、空格数、对称性等参数，并过滤掉不符合要求的问题；但是过滤是个漫长的过程，这降低了sdcreate的效率。
感谢
SDCal 1.0测试者：Sherry Zhou。
SDCal Pro Alpha测试者：严酷的魔王（其实这个不用感谢），时间矢，Liangent。
本博客数独事业关注者：rombalance。
本文由 最后的叶子 创作，转载或引用前请联系我们。

相关文章：SDCal Pro 正式发布！


相关文章：<ol><li><a href='http://blog.programet.org/2010/04/sdcal-pro.html' rel='bookmark' title='Permanent Link: SDCal Pro 正式发布！'>SDCal Pro 正式发布！</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>SDCal是我在高二完成的一个数独解答程序，能提供对于某个数独问题的求解（所有解），或单步求解，显示求解的步骤。</p>
<p>从去年11月开始，我开始编写SDCal的改进版，SDCal绝大部分被重写。我把它称作SDCal Pro，相当于SDCal的2.0版。12月份由于期考等各种事务，工作停滞。终于，经过努力，SDCal Pro beta发布了。</p>
<p><span id="more-1933"></span></p>
<p>SDCal有了很大的改进，主要如下：</p>
<ul>
<li>有一个不错的图形界面，用Gtk+编写。数独编辑功能强大。</li>
<li>支持估计数独题难度。</li>
<li>可以显示解题步骤。</li>
<li>加入了数独生成算法，可以根据设定的难度范围，随机生成数独。但是效率还有改进的余地。</li>
<li>多操作系统支持。</li>
</ul>
<p>前几天我完成了SDCal Pro的修改，Windows的beta版已经发布在http://sdcal.sf.net，在<a href="https://sourceforge.net/projects/sdcal/files/" target="_blank">这个页面</a>可以下载。很抱歉，现在还没来得及做中文包及Linux版（源文件应该可以在含libgtk2.0-dev库的Linux下编译运行，<span style="color: #008080;"><strong>欢迎大家帮忙用gettext做一个中文包</strong></span>）。</p>
<p><em><strong>关于SDCal算法</strong></em></p>
<p>SDCal算法分为两个部分：sdcal和sdcreate。</p>
<p>sdcal用于数独求解。它使用一组算法来得到数独的解，其中主干部分是逻辑推理（模拟算法），此外还使用guessing（搜索算法）加以辅助。这个模块可以得到以很快的速度得到数独的多个解。目前，sdcal求得数独解的上限被设定为99。sdcal包含数独难度估计算法，它分析解题时每一步的难度，并将整个数独题难度记为每一步难度的总和。</p>
<p>sdcreate用于生成数独问题。它依赖于sdcal。sdcreate首先生成一个多解、很难的数独题，使用sdcal求解并估计难度，最后设法将题目变为单一解、难度适中的题目。sdcreate支持自定义题目难度范围、空格数、对称性等参数，并过滤掉不符合要求的问题；但是过滤是个漫长的过程，这降低了sdcreate的效率。</p>
<p><em><strong>感谢</strong></em></p>
<p>SDCal 1.0测试者：Sherry Zhou。</p>
<p>SDCal Pro Alpha测试者：严酷的魔王（其实这个不用感谢），时间矢，Liangent。</p>
<p>本博客数独事业关注者：rombalance。</p>
<p><small>本文由 最后的叶子 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p>

<p>相关文章：<ol><li><a href='http://blog.programet.org/2010/04/sdcal-pro.html' rel='bookmark' title='Permanent Link: SDCal Pro 正式发布！'>SDCal Pro 正式发布！</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2010/01/sdcal-pro-beta.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>译：ACM中队员的合作策略</title>
		<link>http://blog.programet.org/2009/12/%e8%af%91%ef%bc%9aacm%e4%b8%ad%e9%98%9f%e5%91%98%e7%9a%84%e5%90%88%e4%bd%9c%e7%ad%96%e7%95%a5.html</link>
		<comments>http://blog.programet.org/2009/12/%e8%af%91%ef%bc%9aacm%e4%b8%ad%e9%98%9f%e5%91%98%e7%9a%84%e5%90%88%e4%bd%9c%e7%ad%96%e7%95%a5.html#comments</comments>
		<pubDate>Tue, 15 Dec 2009 06:15:50 +0000</pubDate>
		<dc:creator>严酷的魔王</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[推荐]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[计算机]]></category>
		<category><![CDATA[思维]]></category>
		<category><![CDATA[智慧]]></category>
		<category><![CDATA[笔记]]></category>

		<guid isPermaLink="false">http://blog.programet.cn/?p=1781</guid>
		<description><![CDATA[最近刚刚开始认真的ACM…于是去网上找了找关于合作方面的内容，找到一篇E文的，不知道作者是谁。我看了看，感觉还不错，准备收藏。但是一想总觉得看E文的水平毕竟欠佳，没有中文一目十行的那种快感。于是我将其简单地翻译了一下，懒得润色了，还是贴了出来，方便大家的阅读与交流。因为翻译上的缺陷在所难免，所以我已经做好了被拍砖的准备TT……原文的txt版点击这里下载。

简介
自1977以来就有了ACM。这项由资格赛和决赛逐级递进的竞赛为大学生提供了磨砺自己的机会。三个学生要在5小时内用一台电脑解出尽可能多的问题。解出最多问题的队伍就是冠军——解出问题指的是对每个输入都给出了正确的输出。虽然说队员的个人能力很重要，但是如果想要登峰造极，队员们之间还需要有效地配合。我们作为1995年世界决赛的参赛者（我们仨中的两人还参加了1994年的），倒是总结出了不少团队合作的策略。
我们准备在这篇文章里总结我们这么多场比赛的经验，希望这对想参加ACM（或者其他比赛）的你有用。
最基础的东西：练习，练习，练习！！
因为三个人手头只有一台电脑，所以良好的合作是非常必要的。当然，为了让策略更有效，你首先必须尽力提高自己的能力。你不一定要是一个天才，因为勤奋与刻苦也可以让你走得很远。我们认为，一个队伍是否出色取决于下面三点：

 对经典算法的了解以及找到每一个问题的算法的能力；
 编码实现算法的能力；
 队友之间有效的沟通策略。

这篇文章将重点阐述第三点。不过仍然会有一些提高个人能力的建议。
我们分析了以前的比赛题目，发现同类型的题目不断地出现——可以分类为以下五个类型：

 搜索类题目。这些题目需要对很多的情况进行考察以找出最佳的一种。因为搜索最头疼的是时间限制，所以说你应该多注意算法的时间复杂度。
 图论问题。这些问题有特殊的可以转化为一个图的性质，所以可以用经典算法来解决。
 几何问题。主要是形状，线段以及角度的问题。
 模拟题。这些题目的算法很容易想到，但是细致的编码则常常需要很长的时间。
 杂题。

你可以在各种资料里面找到前三类问题的算法，你要做的就是事先编好他们的代码然后带到赛场。这样你就可以避免总是犯下同样的（小）错误，然后集中精力对付问题真正困难的那部分。
练习的另一个目的是高效地编程。这并不意味着你要飞速地敲打键盘然后花上海量时间进行调试。相反，应该把问题想清楚，考虑每一种有可能出现的情况，然后开始编码，要保证你的编码能够将调试的时间减少至最低——通常调试都会用掉大量的宝贵时间。
为了磨合一个队伍，做大量的仿真练习是必要的：5小时，一台机器，三个人以及一个评测系统。
团队合作策略的理论
当你的算法和编码水平到了一个难以进一步提高的境界时，改善你们的合作策略会在你冲顶的助你一臂之力。我们和很多不同的队友使用不同的策略练习比赛很多年了，同时发现很多其他队伍也这样做。从中我们归纳出了一套如何让一个队伍最优化的理论。不过，改良策略不一定是必要的：1995年的世界冠军弗赖堡大学只是一支新手队，1994年的西北欧冠军华沙大学的队员们在赛前2个星期才互相认识。
为什么合作策略这么重要？比赛的时候只有一台电脑，所以大家要共用它。问题要被分成几块。为什么不让全队人共同参与呢？“各有所长”(Specialization)是一个很好的分工合作的依据。如果每一个队员都是解决某一类问题的专家，那么他们自然对这类问题的编码更确定，也有可能实现的动作更迅速。对于其他方面，“各有所长”也是很有用的。比如某一个队员是击打键盘的好手但是对设计算法不是很擅长，而另一个队员是算法专家但是不能很流畅地实现算法——他们合作的成果就是能够流畅解决复杂问题的代码！
另一个分工合作的办法就是让两个人分析所有的问题。两双眼睛看得更清楚，也能更准确地判断一道题目的难度。在早期形成一个“思维坦克”(Think Tank)对找到最合适的题目以及对应的算法非常有帮助。不过，一旦把算法分析透彻了，就只能让一个人进行编码。
经验告诉我们，最有效的编码方式就是一个人完成。这样可以避免相互交流的时候由编程风格的差异造成的混乱——即使你们尽量使用相同的变量名和函数风格，这样的差异仍然是不可避免的。一个人编码能让3*1等于4.
其他的注意事项
因为最后的排名是根据AC的题目数量以及（如果数量相等）运行所有程序花去的时间之和。所以一支队伍应该在5小时里面尽可能地AC，将耗时视为其次的目标。每一次比赛都有队伍在前三个小时内都处在前六名的位置上，但是最后连前十都没有进，相反的过程也经常发生。因此一个长期的策略非常重要：尽量最优化15个人力小时以及5小时的计算机时间，而不要去担心如何最快AC前两题。
为了珍惜宝贵的时间，尽量完成每一个已经动手了的问题。一个已经解决了99%的问题对你们来说没有任何意义。一开始就应该分析清楚题目难易（比如使用“思维坦克”策略）以避免你本就无法完成的题目，或者是防止放过一道伪装得很好的水题。你需要对问题的难度有一个很好的嗅觉，这是选出5小时内你能完成的问题的唯一方法。
因为永远不可能得到最准确的信息，所以你必须冒险。如果你采取了高风险的策略——准备着手解决大量的问题，可能最后你的排名位于后半区，同时电脑上有一堆解决了90%的题目——或者你会笑到最后。反过来，选择比较平稳的策略——选择少量问题，一般就会让你在前4个半小时内完美地AC他们，但是剩下的时间对于一个新问题来说又太短了，这样就浪费了10%的比赛时间。
时间规划应该成为你的策略的一部分。如果你准备对一个难题问题下手，那么请立刻动手，否则你难以完成它。虽然这听起来没什么，但是有很多队伍刚开始选择了小问题，迅速切掉，然后比赛结束时一共也就AC了三题——因为他们没有解决难题。我们认为最后的一个半小时内应该最优先考虑调试而不是新题。如果你在比赛的晚期又开始了一题，那么比赛的最后时刻（最后一个半小时）将成为一个瓶颈。
显然，对最后时刻的安排是决定性的。虽然绝大部分的程序都比较小（不超过100行），最后时刻仍然是一个瓶颈：三个人都想好好利用电脑来做自己的程序。怎么样解决这个问题？首先要记住：坐在电脑前永远只能打字，而不能思考。将你的程序写在纸上，一直到最后一个分号。这样一来你通常都会有一个更好的全局观念，同时你可以仔细考虑每一种特殊情况而不必担心旁边有人虎视眈眈你掌控着的电脑。一旦你写完了整个程序，录入进电脑就不会超过15分钟。虽然你应该避免调试（如果你在纸上写得很认真，那么这是有可能的），但你真正调试的时候应该这样做：从你的程序中收集尽可能多的数据然后和你的代码一起打印出来，然后进行分析。动态跟踪调试是无比罪恶的事情。
一些策略样例：
1.最简单的策略
这条策略对于新手或者是不想沉沦于题海中的人来说非常实用，当然这条策略基本没有什么很好的效果。基本思想就是各做个的题目然后将交流的时间降至最低。每一个人都读一道题，然后挑出一个进行编码。完成一个之后就接着下一个。
这种方法的好处就在于基本上不用练习，程序运行耗时被降到最低——因为最简单的问题最先被解决。但是有几个缺点很明显：因为最早被解决的问题通常都是一样水的题目，那么三个人都会在差不多的时间内完成他的程序，所以在最后，电脑的使用权就会引起冲突。另外，只有最简单的程序被解决因为没有时间剩给难题了。最后可以得出这样的结论：假设你的编程水平不算差，那么你们队就应该能解决三到四题。这会使你的耗时很少，可能进入前十，但是不太可能进入前三。
2.终结者策略
在终结者策略中，只有一位队员T在使用电脑。另外两位则负责分析问题，将算法和代码的关键部分写下，然这时后T应该要完成必要的输入输出部分。当算法完成时，T就开始打字，如果必要还应该简单调试一下。如果bug难以发现那么这题算法的设计者就过来一起调试。
这种方法的好处在于最后时刻不再是瓶颈，同时解决问题的不同过程交给了不同的人。这个方法的一个缺点就是T在打字之外没能发挥任何的作用，只是像一个秘书一样。如果你是唯一一个比较熟悉编程环境的人，那么这可能是一个好方法。你可以一开始在队友思考的时候打出大段大段的基础代码作为热身。是否选择这个方法与你在这支队伍中的地位关系密切。
3.思维坦克
我们自己赛前练习以及在1995年总决赛上使用的策略就是前文提到的“思维坦克”策略（Think Tank,TT——套套？）。我们感觉在早期选择和分析问题是一个决定性的步骤，所以不能只让一个人来完成。队内两名最擅长问题分析的人组成了套套，同时开始读题，同时第三个人就在电脑上面打一些常用的程序段以及所有的测试数据，并且要确定准确无误。15分钟过后，套套简单地讨论了一下问题同时选出最适合第三个人的题目。交流过核心思想之后他们就可以开始工作了。然后套套将所有的问题都彻底讨论一遍，并将主要思想写下来。我们发现两个人讨论一道难题经常会出现富有创造性的方法。估计一个小时后，套套对整个问题都有了了解，同时找到了所有的算法。接下来的关键就是你想解决多少问题。最短或者最容易的问题通常都交给第三个人，然后套套就瓜分了剩下的问题。
最后时刻只是用来将纸上的代码誊到电脑上，或者是解决一个有bug的程序。如果一个程序没有AC却又找不到错误，那么就将其放到一边直至最后一个小时。原则上最后一个半小时都不应该再输入新代码了。此时整个队伍应该简短地讨论一下当下情况，然后对剩下的代码制定一个调试方案。
这个策略的优点就在于：基本上每一题都可以被解决，因为套套在早期就开始考虑难题。一个明显的缺点就是你们的开头会比较落后，同时耗时不一定最少，所以你们要比其他组多AC一题才能获胜。我们觉得对于一个队员水平相对均衡的队伍来说，这套策略能够帮助你们解决尽可能多的问题。
本文由 严酷的魔王 创作，转载或引用前请联系我们。

相关文章：推荐时间：与机器人对话推荐时间：maTHmU晒：C语言期中实验报告


相关文章：<ol><li><a href='http://blog.programet.org/2009/01/blog-post_01.html' rel='bookmark' title='Permanent Link: 推荐时间：与机器人对话'>推荐时间：与机器人对话</a></li><li><a href='http://blog.programet.org/2009/09/%e6%8e%a8%e8%8d%90%e6%97%b6%e9%97%b4%ef%bc%9amathmu.html' rel='bookmark' title='Permanent Link: 推荐时间：maTHmU'>推荐时间：maTHmU</a></li><li><a href='http://blog.programet.org/2009/12/%e6%99%92%ef%bc%9ac%e8%af%ad%e8%a8%80%e6%9c%9f%e4%b8%ad%e5%ae%9e%e9%aa%8c%e6%8a%a5%e5%91%8a.html' rel='bookmark' title='Permanent Link: 晒：C语言期中实验报告'>晒：C语言期中实验报告</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>最近刚刚开始认真的ACM…于是去网上找了找关于合作方面的内容，找到<a href="http://bbs.oursdu.com/thread-139802-1-1.html">一篇E文的</a>，不知道作者是谁。我看了看，感觉还不错，准备收藏。但是一想总觉得看E文的水平毕竟欠佳，没有中文一目十行的那种快感。于是我将其简单地翻译了一下，懒得润色了，还是贴了出来，方便大家的阅读与交流。因为翻译上的缺陷在所难免，所以我已经做好了被拍砖的准备TT……原文的txt版<a href="http://blog.programet.cn/wp-content/uploads/ACM.txt">点击这里下载</a>。<span id="more-1781"></span></p>
<blockquote>
<h4><strong>简介</strong></h4>
<p>自1977以来就有了ACM。这项由资格赛和决赛逐级递进的竞赛为大学生提供了磨砺自己的机会。三个学生要在5小时内用一台电脑解出尽可能多的问题。解出最多问题的队伍就是冠军——解出问题指的是对每个输入都给出了正确的输出。虽然说队员的个人能力很重要，但是如果想要登峰造极，队员们之间还需要有效地配合。我们作为1995年世界决赛的参赛者（我们仨中的两人还参加了1994年的），倒是总结出了不少团队合作的策略。<br />
我们准备在这篇文章里总结我们这么多场比赛的经验，希望这对想参加ACM（或者其他比赛）的你有用。</p>
<h4><strong>最基础的东西：练习，练习，练习！！</strong></h4>
<p>因为三个人手头只有一台电脑，所以良好的合作是非常必要的。当然，为了让策略更有效，你首先必须尽力提高自己的能力。你不一定要是一个天才，因为勤奋与刻苦也可以让你走得很远。我们认为，一个队伍是否出色取决于下面三点：</p>
<ul>
<li> 对经典算法的了解以及找到每一个问题的算法的能力；</li>
<li> 编码实现算法的能力；</li>
<li> 队友之间有效的沟通策略。</li>
</ul>
<p>这篇文章将重点阐述第三点。不过仍然会有一些提高个人能力的建议。<br />
我们分析了以前的比赛题目，发现同类型的题目不断地出现——可以分类为以下五个类型：</p>
<ol>
<li> 搜索类题目。这些题目需要对很多的情况进行考察以找出最佳的一种。因为搜索最头疼的是时间限制，所以说你应该多注意算法的时间复杂度。</li>
<li> 图论问题。这些问题有特殊的可以转化为一个图的性质，所以可以用经典算法来解决。</li>
<li> 几何问题。主要是形状，线段以及角度的问题。</li>
<li> 模拟题。这些题目的算法很容易想到，但是细致的编码则常常需要很长的时间。</li>
<li> 杂题。</li>
</ol>
<p>你可以在各种资料里面找到前三类问题的算法，你要做的就是事先编好他们的代码然后带到赛场。这样你就可以避免总是犯下同样的（小）错误，然后集中精力对付问题真正困难的那部分。<br />
练习的另一个目的是高效地编程。这并不意味着你要飞速地敲打键盘然后花上海量时间进行调试。相反，应该把问题想清楚，考虑每一种有可能出现的情况，然后开始编码，要保证你的编码能够将调试的时间减少至最低——通常调试都会用掉大量的宝贵时间。<br />
为了磨合一个队伍，做大量的仿真练习是必要的：5小时，一台机器，三个人以及一个评测系统。</p>
<h4><strong>团队合作策略的理论</strong></h4>
<p>当你的算法和编码水平到了一个难以进一步提高的境界时，改善你们的合作策略会在你冲顶的助你一臂之力。我们和很多不同的队友使用不同的策略练习比赛很多年了，同时发现很多其他队伍也这样做。从中我们归纳出了一套如何让一个队伍最优化的理论。不过，改良策略不一定是必要的：1995年的世界冠军弗赖堡大学只是一支新手队，1994年的西北欧冠军华沙大学的队员们在赛前2个星期才互相认识。<br />
为什么合作策略这么重要？比赛的时候只有一台电脑，所以大家要共用它。问题要被分成几块。为什么不让全队人共同参与呢？“各有所长”(Specialization)是一个很好的分工合作的依据。如果每一个队员都是解决某一类问题的专家，那么他们自然对这类问题的编码更确定，也有可能实现的动作更迅速。对于其他方面，“各有所长”也是很有用的。比如某一个队员是击打键盘的好手但是对设计算法不是很擅长，而另一个队员是算法专家但是不能很流畅地实现算法——他们合作的成果就是能够流畅解决复杂问题的代码！<br />
另一个分工合作的办法就是让两个人分析所有的问题。两双眼睛看得更清楚，也能更准确地判断一道题目的难度。在早期形成一个“思维坦克”(Think Tank)对找到最合适的题目以及对应的算法非常有帮助。不过，一旦把算法分析透彻了，就只能让一个人进行编码。<br />
经验告诉我们，最有效的编码方式就是一个人完成。这样可以避免相互交流的时候由编程风格的差异造成的混乱——即使你们尽量使用相同的变量名和函数风格，这样的差异仍然是不可避免的。一个人编码能让3*1等于4.</p>
<h4><strong>其他的注意事项</strong></h4>
<p>因为最后的排名是根据AC的题目数量以及（如果数量相等）运行所有程序花去的时间之和。所以一支队伍应该在5小时里面尽可能地AC，将耗时视为其次的目标。每一次比赛都有队伍在前三个小时内都处在前六名的位置上，但是最后连前十都没有进，相反的过程也经常发生。因此一个长期的策略非常重要：尽量最优化15个人力小时以及5小时的计算机时间，而不要去担心如何最快AC前两题。<br />
为了珍惜宝贵的时间，尽量完成每一个已经动手了的问题。一个已经解决了99%的问题对你们来说没有任何意义。一开始就应该分析清楚题目难易（比如使用“思维坦克”策略）以避免你本就无法完成的题目，或者是防止放过一道伪装得很好的水题。你需要对问题的难度有一个很好的嗅觉，这是选出5小时内你能完成的问题的唯一方法。<br />
因为永远不可能得到最准确的信息，所以你必须冒险。如果你采取了高风险的策略——准备着手解决大量的问题，可能最后你的排名位于后半区，同时电脑上有一堆解决了90%的题目——或者你会笑到最后。反过来，选择比较平稳的策略——选择少量问题，一般就会让你在前4个半小时内完美地AC他们，但是剩下的时间对于一个新问题来说又太短了，这样就浪费了10%的比赛时间。<br />
时间规划应该成为你的策略的一部分。如果你准备对一个难题问题下手，那么请立刻动手，否则你难以完成它。虽然这听起来没什么，但是有很多队伍刚开始选择了小问题，迅速切掉，然后比赛结束时一共也就AC了三题——因为他们没有解决难题。我们认为最后的一个半小时内应该最优先考虑调试而不是新题。如果你在比赛的晚期又开始了一题，那么比赛的最后时刻（最后一个半小时）将成为一个瓶颈。<br />
显然，对最后时刻的安排是决定性的。虽然绝大部分的程序都比较小（不超过100行），最后时刻仍然是一个瓶颈：三个人都想好好利用电脑来做自己的程序。怎么样解决这个问题？首先要记住：坐在电脑前永远只能打字，而不能思考。将你的程序写在纸上，一直到最后一个分号。这样一来你通常都会有一个更好的全局观念，同时你可以仔细考虑每一种特殊情况而不必担心旁边有人虎视眈眈你掌控着的电脑。一旦你写完了整个程序，录入进电脑就不会超过15分钟。虽然你应该避免调试（如果你在纸上写得很认真，那么这是有可能的），但你真正调试的时候应该这样做：从你的程序中收集尽可能多的数据然后和你的代码一起打印出来，然后进行分析。动态跟踪调试是无比罪恶的事情。</p>
<h4><strong>一些策略样例：</strong></h4>
<p><strong>1.最简单的策略</strong><br />
这条策略对于新手或者是不想沉沦于题海中的人来说非常实用，当然这条策略基本没有什么很好的效果。基本思想就是各做个的题目然后将交流的时间降至最低。每一个人都读一道题，然后挑出一个进行编码。完成一个之后就接着下一个。<br />
这种方法的好处就在于基本上不用练习，程序运行耗时被降到最低——因为最简单的问题最先被解决。但是有几个缺点很明显：因为最早被解决的问题通常都是一样水的题目，那么三个人都会在差不多的时间内完成他的程序，所以在最后，电脑的使用权就会引起冲突。另外，只有最简单的程序被解决因为没有时间剩给难题了。最后可以得出这样的结论：假设你的编程水平不算差，那么你们队就应该能解决三到四题。这会使你的耗时很少，可能进入前十，但是不太可能进入前三。<br />
<strong>2.终结者策略</strong><br />
在终结者策略中，只有一位队员T在使用电脑。另外两位则负责分析问题，将算法和代码的关键部分写下，然这时后T应该要完成必要的输入输出部分。当算法完成时，T就开始打字，如果必要还应该简单调试一下。如果bug难以发现那么这题算法的设计者就过来一起调试。<br />
这种方法的好处在于最后时刻不再是瓶颈，同时解决问题的不同过程交给了不同的人。这个方法的一个缺点就是T在打字之外没能发挥任何的作用，只是像一个秘书一样。如果你是唯一一个比较熟悉编程环境的人，那么这可能是一个好方法。你可以一开始在队友思考的时候打出大段大段的基础代码作为热身。是否选择这个方法与你在这支队伍中的地位关系密切。<br />
<strong>3.思维坦克</strong><br />
我们自己赛前练习以及在1995年总决赛上使用的策略就是前文提到的“思维坦克”策略（Think Tank,TT——套套？）。我们感觉在早期选择和分析问题是一个决定性的步骤，所以不能只让一个人来完成。队内两名最擅长问题分析的人组成了套套，同时开始读题，同时第三个人就在电脑上面打一些常用的程序段以及所有的测试数据，并且要确定准确无误。15分钟过后，套套简单地讨论了一下问题同时选出最适合第三个人的题目。交流过核心思想之后他们就可以开始工作了。然后套套将所有的问题都彻底讨论一遍，并将主要思想写下来。我们发现两个人讨论一道难题经常会出现富有创造性的方法。估计一个小时后，套套对整个问题都有了了解，同时找到了所有的算法。接下来的关键就是你想解决多少问题。最短或者最容易的问题通常都交给第三个人，然后套套就瓜分了剩下的问题。<br />
最后时刻只是用来将纸上的代码誊到电脑上，或者是解决一个有bug的程序。如果一个程序没有AC却又找不到错误，那么就将其放到一边直至最后一个小时。原则上最后一个半小时都不应该再输入新代码了。此时整个队伍应该简短地讨论一下当下情况，然后对剩下的代码制定一个调试方案。<br />
这个策略的优点就在于：基本上每一题都可以被解决，因为套套在早期就开始考虑难题。一个明显的缺点就是你们的开头会比较落后，同时耗时不一定最少，所以你们要比其他组多AC一题才能获胜。我们觉得对于一个队员水平相对均衡的队伍来说，这套策略能够帮助你们解决尽可能多的问题。</p></blockquote>
<p><small>本文由 严酷的魔王 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p>

<p>相关文章：<ol><li><a href='http://blog.programet.org/2009/01/blog-post_01.html' rel='bookmark' title='Permanent Link: 推荐时间：与机器人对话'>推荐时间：与机器人对话</a></li><li><a href='http://blog.programet.org/2009/09/%e6%8e%a8%e8%8d%90%e6%97%b6%e9%97%b4%ef%bc%9amathmu.html' rel='bookmark' title='Permanent Link: 推荐时间：maTHmU'>推荐时间：maTHmU</a></li><li><a href='http://blog.programet.org/2009/12/%e6%99%92%ef%bc%9ac%e8%af%ad%e8%a8%80%e6%9c%9f%e4%b8%ad%e5%ae%9e%e9%aa%8c%e6%8a%a5%e5%91%8a.html' rel='bookmark' title='Permanent Link: 晒：C语言期中实验报告'>晒：C语言期中实验报告</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2009/12/%e8%af%91%ef%bc%9aacm%e4%b8%ad%e9%98%9f%e5%91%98%e7%9a%84%e5%90%88%e4%bd%9c%e7%ad%96%e7%95%a5.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
