<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[Kenwell]]></title>
  <subtitle type="html"><![CDATA[我会一直站在你身别]]></subtitle>
  <id>http://www.kenwell.org/blog/</id> 
  <link rel="alternate" type="text/html" href="http://www.kenwell.org/blog/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.kenwell.org/blog/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.4.1022">PJBlog2</generator> 
  <updated>2008-08-05T19:01:22+08:00</updated> 

  <entry>
	  <title type="html"><![CDATA[父母不容易]]></title>
	  <author>
		 <name>kenwell</name>
		 <uri>http://www.kenwell.org/blog/</uri>
		 <email>kenwell.ustc@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.kenwell.org/blog/default.asp?cateID=8" label="日常心情" /> 
	  <updated>2008-08-05T19:01:22+08:00</updated>
	  <published>2008-08-05T19:01:22+08:00</published>
		  <summary type="html"><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;自己没事喜欢bg，尤其喜欢逛一些bg网站。最近一直在水木家版瞎逛，发现现在的人都很自私，越是受了高等教育的越是这样。家版最火的帖子通常都是婆媳关系。那些受过高等教育的媳妇天天都在水木上叫屈，说婆婆不好，我就觉得奇怪，难道天下的婆婆都是坏的？自己有偏见，自己不喜欢不要打着婆婆不好的幌子，明明很多事情都是自己不好，自己先入为主。<br/>&nbsp;&nbsp;&nbsp;&nbsp;还有那些bs老公接父母到家住的人，父母养个儿子这么多年，付出了多少。老了，让儿子养很正常的事情，人不能太自私。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kenwell.org/blog/default.asp?id=311" /> 
	  <id>http://www.kenwell.org/blog/default.asp?id=311</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[运气不佳]]></title>
	  <author>
		 <name>kenwell</name>
		 <uri>http://www.kenwell.org/blog/</uri>
		 <email>kenwell.ustc@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.kenwell.org/blog/default.asp?cateID=8" label="日常心情" /> 
	  <updated>2008-07-25T23:43:49+08:00</updated>
	  <published>2008-07-25T23:43:49+08:00</published>
		  <summary type="html"><![CDATA[&nbsp;&nbsp;&nbsp;呵呵，今天被几道智力题给难到了，其实智力题不难，可是自己就没想到，人变笨了啊。本来很简单的题目，可能自己以前没遇到过这种题目，一时也没想到。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kenwell.org/blog/default.asp?id=310" /> 
	  <id>http://www.kenwell.org/blog/default.asp?id=310</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[相伴]]></title>
	  <author>
		 <name>kenwell</name>
		 <uri>http://www.kenwell.org/blog/</uri>
		 <email>kenwell.ustc@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.kenwell.org/blog/default.asp?cateID=8" label="日常心情" /> 
	  <updated>2008-07-17T19:05:34+08:00</updated>
	  <published>2008-07-17T19:05:34+08:00</published>
		  <summary type="html"><![CDATA[&nbsp;&nbsp;&nbsp;今天看一个节目名字叫：大洋彼岸，讲的是妻子在美国读书，丈夫过去陪读，两人在美国四年的生活。通过节目，可以看到他们生活的不如意，一个读书，一个无工作，两人在美国全靠妻子的奖学金生活，日子太苦了，两个人的矛盾也越来越多。所以说，出国还是看人的，不要一窝蜂都想出去。看看那位妻子，年青时是那么的漂亮，现在还没过几年，整个人都发福了，很难看出他年青时是什么样？]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kenwell.org/blog/default.asp?id=309" /> 
	  <id>http://www.kenwell.org/blog/default.asp?id=309</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[奇人•奇梦•奇书——《梦断代码》(Dream in code)]]></title>
	  <author>
		 <name>kenwell</name>
		 <uri>http://www.kenwell.org/blog/</uri>
		 <email>kenwell.ustc@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.kenwell.org/blog/default.asp?cateID=17" label="c++学习" /> 
	  <updated>2008-07-13T19:22:03+08:00</updated>
	  <published>2008-07-13T19:22:03+08:00</published>
		  <summary type="html"><![CDATA[呵呵看了如下的书评：搞得自己很想看了：）<br/>当年Lotus&nbsp;Development的创始银，Lotus&nbsp;1-2-3的设计者Mitchell&nbsp;Kapor，离开Lotus后拉开单干，成立了开源应用基金会(OSAF)。他招募了一堆牛程，开发号称革命性的下一代个人信息管理系统－－Chandler。我还记得Mitchell&nbsp;Kapor宣布要开发Chandler的时候，开源社区一片鼓噪，媒体报道铺天盖地，哭喊终于有人出手，搞死天杀的Outlook，抽翻恶心的Lotus&nbsp;Notes了。&nbsp;那是2001年6月前后，黄历上写“忌：诸事不宜”。<br/>　　<br/>　　一瞬间，6年过去。当年风头一时无二的Chandler勉强挣扎到0.7版。除了几个无聊的八卦银，比如我，和一堆开源的拥泵，比如Ted&nbsp;Leung，大多数人只知道《老友记》里有个Chandler胖了瘦，瘦了胖，搞定了人见人耐的Monica，2003年在新泽西乡下买了房子逍遥去了，导致老友们彻底散伙。<br/>　　<br/>　　怎么回事呢？Mitchell&nbsp;Kapor算是当代最牛B的程序员兼管理者之一。OSAF下招募的老大们也是开源干将。大家不缺钱，不缺技术，不缺经验，不缺雄心，偏偏不能发布一款看似简单的软件，搞得中国足球队见球迷时的胆气都壮了不少。今年Scott&nbsp;Rosenberg的新书上架：Dreaming&nbsp;In&nbsp;Code。这本书详细讨论了一群牛人在长达6年的马拉松里面，犯了什么样的错误，导致一坨本来很有希望的项目半死不活。书里有八卦，有技术，有项目管理；有冷静的分析，也有狂热的布道；有编程高手泪洒键盘，也有商业奇才魂断开源。。。嗯，其实最后几句是我恶俗地胡说八道。不过书肯定值得一读。已经有人把这本书和史诗般的经典程序员故事Soul&nbsp;of&nbsp;a&nbsp;New&nbsp;Machine&nbsp;，&nbsp;以及Show&nbsp;Stopper相提并论。当初读Soul&nbsp;Of&nbsp;a&nbsp;New&nbsp;Machine和Show&nbsp;Stopper时被书里的传奇人物传奇故事激动得彻夜难眠。Dreaming&nbsp;In&nbsp;Code真有那么动人，该是程序员的福气。<br/>　　<br/>　　“两打程序员，三年，4732个bugs，和对非凡软件的不懈追求”。Scott&nbsp;Rosenberg的新书Dreaming&nbsp;In&nbsp;Code&nbsp;寄到了，果然没有辜负俺的期待和这句带有宿命意味的题记激发出的强烈好奇心。连花了两个晚上读完这本精彩作品。强烈推荐。作者把Chandler的开发历程，软件开发的历史，和软件开发的基础概念精巧地编织起来，只为探索一个问题：为什么软件开发那么困难？<br/>　　<br/>　　先说说安逸的地方。首先是文字。作为多年文青，资深记者，Salon的主编，Scott&nbsp;Rosenberg的笔头没得说。三年漫长写作和Chandler项目的艰辛曲折并没有消磨Scott的热情。相反，他的文字蕴涵着他对软件开发的强烈热情，很有感染力。书里涉及大量技术概念，从OOP到Literate&nbsp;Programming到停机问题，作者都科普得浅显明白。看局外人怎么理解软件开发，也是颇有意思的事情。<br/>　　<br/>　　其次是资料翔实。光靠Wikipedia和Google随意搜寻是绝对写不出这样一本书的。大量的采访，连续三年实地跟踪Chandler项目组开会讨论，几百篇参考资料，包括大量经典论文和访谈录，和作者细心的整理，方才构成这本书丰厚的肌理。<br/>　　<br/>　　第三当然就是八卦满天飞了，尤其是著名项目和大牛们的故事及观点。呵呵。非常符合俺这种八卦爱好者的口味。虽然绝大部分八卦俺都知道，但放在软件开发这个大题目下系统读一次感觉还是不同。Alan&nbsp;Kay,&nbsp;Don&nbsp;Knuth,&nbsp;Alan&nbsp;Turning,&nbsp;Charles&nbsp;Simoni,&nbsp;Bill&nbsp;Joy,&nbsp;Frederick&nbsp;P.&nbsp;Brooks,&nbsp;David&nbsp;Parnas,&nbsp;Peter&nbsp;Drucker,&nbsp;Gerald&nbsp;Winberg,&nbsp;Douglas&nbsp;Engelbart等等等等。颇有新的领悟外，也是享受。书里也有一些俺从未听说的八卦。比如这条：一位叫Robert&nbsp;Britcher的程序员写了本回忆录，The&nbsp;Limits&nbsp;of&nbsp;Software，记录了美国航空管理局(FAA)1981年上马的AAS（Advanced&nbsp;Automation&nbsp;System）项目的悲惨过程。用Scott的话说，就是“没有人—哪怕作者—可以全身而退（No&nbsp;one—including,&nbsp;plainly,&nbsp;the&nbsp;author—escape&nbsp;scar&nbsp;free）。项目高峰期，1500名IBM程序员为FAA工作，每天花掉政府100万美元。项目最终失败了，因为项目的要求超出了当时技术和人力的极限。巨大的压力给参与项目的程序员带来心理上的严重创伤。有人砸烂自己的汽车。有人疯掉（我靠！），有人自杀。有个项目经理开始吃纸上瘾。项目拖后得越多，他在开会时嘴里的塞的纸就越多（靠靠靠！）。当初我读Ellen&nbsp;Ullman的小说The&nbsp;Bug的时候还对文中主角在地下室自杀有点不解。看来那也不是女文青Ellen自己的想当然。<br/>　　<br/>　　书里记述了OASF(开发Chandler的组织)犯下的大量错误。这些案例值得我们学习。我觉得比较出奇的是Chandler项目成员开始决定用P2P架构这种来共享日历。虽然用P2P共享个人信息时非常困难的问题，但他们居然不全力设计相关算法或协议，而是花大量时间去讨论&nbsp;Chandler的界面。这一拖就是几个月。最后P2P架构被彻底放弃。Damien以一人之力搞出了基于文档的分布式数据库。不知道如果OASF找到&nbsp;Damien，情况会不会有所改观。Joel&nbsp;Spolsky已经写了篇关于OASF错误的详尽评论。强烈推荐。我就不饶舌了。<br/>　　<br/>　　再说说让人遗憾的地方。书的背面有若干书评。第一条是The&nbsp;Atlantic的James&nbsp;Fallows写的，说Dreaming&nbsp;In&nbsp;Code可以和Tracy&nbsp;Kidder的《新机器的灵魂》（The&nbsp;Soul&nbsp;of&nbsp;a&nbsp;New&nbsp;Machine）媲美。Tracy&nbsp;Kidder的书是一代经典，写尽工程师的光荣与梦想。《新机器的灵魂》里电脑工程师为了做出新一代电脑同DEC的VAX竞争，破釜沉舟，灵魂冲突激荡。历经曲折后，项目终于成功。一时间彷佛东方有日出，喷薄欲破晓，好不酣畅淋漓。可惜，这种痛快的阅读感受在Dreaming&nbsp;In&nbsp;Code里体会不到。我想原因有二。一是Chandler是个失败（至少前途还不明朗）的项目。5年过去，几百万花掉，Chandler才到0.7版。当年的设计被一次又一次的更改。当年Mitche&nbsp;Kapor心目中的杀手特性被一个又一个地去掉。看到书的后半部分，俺甚至觉得有些郁闷。正因为这样，Dreaming&nbsp;In&nbsp;Code缺乏戏剧性。我们看不到有独特魅力的灵魂人物，比如《新》书里的Tom&nbsp;West，比如Show&nbsp;Stopper里的Dave&nbsp;Cutler。二是作者把Chandler的项目当作讨论软件开发为什么那么难的案例来写。这样做人物形象就显得比较单薄。书里很少描写Chandler&nbsp;项目组里的成员的心理和行为。我甚至不记得里面有谁曾经意气风发过。问题是，谁没有在设计自己心爱的软件时浑然忘我，神情激越过？这点更远远比不上《新》和Show&nbsp;Stopper。这两本书里的工程师有非常突出的个性。Dreaming&nbsp;In&nbsp;Code里看不到像Show&nbsp;Stopper里微软的愤青们鄙视IBM，决定中止同IBM&nbsp;OS/2团队合作的戏剧性场面的，看不到Jim&nbsp;Alchin早上五点钟跑到高尔夫球场与同事开会的疯狂场景，也看不到两个微软工程师决定到加勒比海边设计Windows&nbsp;NT的API，把他们的经理气得发疯，结果两人一周就搞定了1000多个API的初稿这样的传奇故事。甚至Mitch&nbsp;Kapor在Dreaming&nbsp;In&nbsp;Code里也像个好好先生。<br/>　　<br/>　　另外一个小小的瑕疵（如果算的话）是Scott有时候会穿插大段软件开发的基本概念。有时候穿插得太多了一点。第八章和第九章基本全是软件开发的科普，显得有些游离主题。又比如Scott谈到在Chandler里处理可以反复发生的事件（比如说我在日历上加了一个会议，希望这个会议每周定时举行）不是件容易事。紧接着就引申到递归和图灵的停机问题。且不说这都是哪儿跟哪儿啊，至少我怀疑有多少读者对停机问题感兴趣。<br/>　　<br/>　　Dreaming&nbsp;In&nbsp;Code里还有一些小错误。比如说作者提到Chandler的前身Agenda可以处理自然语言：用户输入”From&nbsp;year&nbsp;2006-01-03&nbsp;to&nbsp;next&nbsp;week”，Agenda能自动算出对应的日期。这没什么问题。可作者紧接着说，太多的软件不允许用户在电话号码或身份证号码中间加空格，加破折号什么的，可见这个问题的多么困难。这就搞笑了。识别日期的自然语言描述是个困难的问题。可不允许用户在一串号码中加分隔符就纯属程序员懒惰了。二者根本不能相提并论。<br/>　　<br/>　　不管怎么说，Dreaming&nbsp;In&nbsp;Code是本非常不错的书。俺小声说一句，每个程序员都可以读一读。&nbsp;]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kenwell.org/blog/default.asp?id=308" /> 
	  <id>http://www.kenwell.org/blog/default.asp?id=308</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[收了个妹妹]]></title>
	  <author>
		 <name>kenwell</name>
		 <uri>http://www.kenwell.org/blog/</uri>
		 <email>kenwell.ustc@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.kenwell.org/blog/default.asp?cateID=8" label="日常心情" /> 
	  <updated>2008-07-11T23:37:30+08:00</updated>
	  <published>2008-07-11T23:37:30+08:00</published>
		  <summary type="html"><![CDATA[&nbsp;&nbsp;&nbsp;一直以来，自己一直做弟弟，叫人家姐姐，有好多姐姐的。最近收了一个妹妹，很可爱的，人又聪明，善良，本来自己妹妹就不多，所以就更加高兴了。<br/>&nbsp;&nbsp;在读研究生这两年，认识了不少人，结识了不少好友，这是我最大的财富了。<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kenwell.org/blog/default.asp?id=307" /> 
	  <id>http://www.kenwell.org/blog/default.asp?id=307</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[新模板]]></title>
	  <author>
		 <name>kenwell</name>
		 <uri>http://www.kenwell.org/blog/</uri>
		 <email>kenwell.ustc@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.kenwell.org/blog/default.asp?cateID=8" label="日常心情" /> 
	  <updated>2008-07-08T21:05:12+08:00</updated>
	  <published>2008-07-08T21:05:12+08:00</published>
		  <summary type="html"><![CDATA[新模板，新气象，说说心里话。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kenwell.org/blog/default.asp?id=306" /> 
	  <id>http://www.kenwell.org/blog/default.asp?id=306</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[c++考试]]></title>
	  <author>
		 <name>kenwell</name>
		 <uri>http://www.kenwell.org/blog/</uri>
		 <email>kenwell.ustc@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.kenwell.org/blog/default.asp?cateID=8" label="日常心情" /> 
	  <updated>2008-07-04T22:37:42+08:00</updated>
	  <published>2008-07-04T22:37:42+08:00</published>
		  <summary type="html"><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;刚才看小师弟出的c++试题，题目有点难，有道题我都搞错了。就更不要说那些大一的小孩子了，据小师弟说，改卷子到目前还没有到80分了，可怜这些小孩子，好在考试成绩占的比重不多，否则这些小孩子就惨了。<br/>&nbsp;&nbsp;&nbsp;想自己大一学习c语言时，也是一头雾水，考试考得一般般，那时候看见助教，都觉得很牛，一脸崇拜。呵呵，出一道小孩子们考试考的题:<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.kenwell.org/blog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>void&nbsp;f(int&nbsp;i)<br/>{<br/>&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;&#34;f(int&nbsp;i):&#34;&nbsp;&lt;&lt;&nbsp;i&nbsp;&lt;&lt;&nbsp;endl;<br/>}<br/><br/>void&nbsp;f(float&nbsp;i)<br/>{<br/>&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;&#34;f(float&nbsp;i):&#34;&nbsp;&lt;&lt;&nbsp;i&nbsp;&lt;&lt;&nbsp;endl;<br/>}<br/><br/><br/>template&lt;class&nbsp;T&gt;<br/>void&nbsp;f(T&nbsp;i)<br/>{<br/>&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;&#34;f(T&nbsp;i):&#34;&nbsp;&lt;&lt;&nbsp;i&nbsp;&lt;&lt;&nbsp;endl;<br/>}<br/><br/>int&nbsp;main()<br/>{<br/>&nbsp;&nbsp;f(1);<br/>&nbsp;&nbsp;f(1.2);<br/>}<br/></div></div><br/>请问输出结果是什么]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kenwell.org/blog/default.asp?id=305" /> 
	  <id>http://www.kenwell.org/blog/default.asp?id=305</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[百度之星2007年初试题及参考代码（c++)]]></title>
	  <author>
		 <name>kenwell</name>
		 <uri>http://www.kenwell.org/blog/</uri>
		 <email>kenwell.ustc@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.kenwell.org/blog/default.asp?cateID=9" label="computer" /> 
	  <updated>2008-05-11T13:34:50+08:00</updated>
	  <published>2008-05-11T13:34:50+08:00</published>
		  <summary type="html"><![CDATA[共四题（100分）<br/><br/>第一题：连续正整数（10分）<br/><br/>题目描述：<br/>一个正整数有可能可以被表示为n(n&gt;=2)个连续正整数之和，如：<br/>15=1+2+3+4+5<br/>15=4+5+6<br/>15=7+8<br/>请编写程序，根据输入的任何一个正整数，找出符合这种要求的所有连续正整数序列。<br/><br/>输入数据：一个正整数，以命令行参数的形式提供给程序。<br/><br/><br/>输出数据：在标准输出上打印出符合题目描述的全部正整数序列，每行一个序列，每个序列都从该序列的最小正整数开始、以从小到大的顺序打印。如果结果有多个序列，按各序列的最小正整数的大小从小到大打印各序列。此外，序列不允许重复，序列内的整数用一个空格分隔。如果没有符合要求的序列，输出“NONE”。<br/>例如，对于15，其输出结果是：<br/>1&nbsp;2&nbsp;3&nbsp;4&nbsp;5<br/>4&nbsp;5&nbsp;6<br/>7&nbsp;8<br/>对于16，其输出结果是：<br/>NONE<br/>评分标准：<br/>程序输出结果是否正确。<br/><br/>参考代码：<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.kenwell.org/blog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>#include&nbsp;&lt;iostream&gt;<br/>using&nbsp;namespace&nbsp;std;<br/><br/>int&nbsp;func()<br/>{<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;int&nbsp;a;<br/>&#160;&#160;&#160;&#160;cin&nbsp;&gt;&gt;&nbsp;a;<br/>&#160;&#160;&#160;&#160;if(a&nbsp;==&nbsp;1)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cout&nbsp;&lt;&lt;&nbsp;a&nbsp;&lt;&lt;&nbsp;endl;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;0;<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;int&nbsp;max&nbsp;=&nbsp;a&nbsp;/&nbsp;2&nbsp;+&nbsp;1;<br/>&#160;&#160;&#160;&#160;int&nbsp;num&nbsp;=&nbsp;0;<br/>&#160;&#160;&#160;&#160;int&nbsp;sum;<br/>&#160;&#160;&#160;&#160;for(int&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;max;&nbsp;i++)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sum&nbsp;=&nbsp;0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for(int&nbsp;j&nbsp;=&nbsp;i;&nbsp;j&nbsp;&lt;=&nbsp;max;&nbsp;j++)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sum&nbsp;+=&nbsp;j;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(sum&nbsp;==&nbsp;a)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for(int&nbsp;k&nbsp;=&nbsp;i;&nbsp;k&nbsp;&lt;=&nbsp;j;&nbsp;k++)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cout&nbsp;&lt;&lt;&nbsp;k&nbsp;&lt;&lt;&nbsp;&#34;&nbsp;&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cout&nbsp;&lt;&lt;&nbsp;endl;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;num++;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;if(num&nbsp;==&nbsp;0)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cout&nbsp;&lt;&lt;&nbsp;&#34;NONE&#34;&nbsp;&lt;&lt;&nbsp;endl;<br/><br/>&#160;&#160;&#160;&#160;return&nbsp;0;<br/>}<br/><br/><br/>int&nbsp;main()<br/>{<br/>&#160;&#160;&#160;&#160;func();<br/>}<br/></div></div><br/>第二题：重叠区间大小（20分）<br/><br/>题目描述：<br/>请编写程序，找出下面“输入数据及格式”中所描述的输入数据文件中最大重叠区间的大<br/>小。<br/>对一个正整数n，如果n在数据文件中某行的两个正整数（假设为A和B）之间，即A&lt;&nbsp;=n<br/>&lt;=B或A&gt;=n&gt;=B，则n属于该行；如果n同时属于行i和j，则i和j有重叠区间；重叠区间的大<br/>小是同时属于行i和j的整数个数。<br/>例如，行（10&nbsp;20）和（12&nbsp;25）的重叠区间为[12&nbsp;20]，其大小为9；行（20&nbsp;10）和（<br/>12&nbsp;18）的重叠区间为[10&nbsp;12]，其大小为3；行(20&nbsp;10)和（20&nbsp;30）的重叠区间大小为1。<br/><br/>输入数据：<br/>程序读入已被命名为input.txt的输入数据文本文件，该文件的行数在1到1,000,000之间，<br/>每行有用一个空格分隔的2个正整数，这2个正整数的大小次序随机，每个数都在1和2^32-<br/>1之间。（为便于调试，您可下载测试input.txt文件，实际运行时我们会使用不同内容的<br/>输入文件。）<br/><br/><br/>输出数据：<br/>在标准输出上打印出输入数据文件中最大重叠区间的大小，如果所有行都没有重叠区间，<br/>则输出0。<br/>评分标准：<br/>程序输出结果必须正确，内存使用必须不超过256MB，程序的执行时间越快越好。<br/><br/>参考代码：<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.kenwell.org/blog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>#include&nbsp;&lt;fstream&gt;<br/>#include&nbsp;&lt;iostream&gt;<br/>#include&nbsp;&lt;string&gt;<br/>#include&nbsp;&lt;vector&gt;<br/>#include&nbsp;&lt;algorithm&gt;<br/>using&nbsp;namespace&nbsp;std;<br/><br/>class&nbsp;Num<br/>{<br/>public:<br/>&#160;&#160;&#160;&#160;Num(int&nbsp;m_left,&nbsp;int&nbsp;m_right)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;left&nbsp;=&nbsp;m_left;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;right&nbsp;=&nbsp;m_right;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;int&nbsp;left;<br/>&#160;&#160;&#160;&#160;int&nbsp;right;<br/><br/>&#160;&#160;&#160;&#160;<br/>};<br/><br/>class&nbsp;LessCompare<br/>{<br/>public:<br/>&#160;&#160;&#160;&#160;bool&nbsp;operator()(Num&nbsp;left,&nbsp;Num&nbsp;right)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;left.left&nbsp;&lt;&nbsp;right.left;<br/>&#160;&#160;&#160;&#160;}<br/>};<br/><br/>void&nbsp;func()<br/>{<br/>&#160;&#160;&#160;&#160;fstream&nbsp;file(&#34;input.txt&#34;,&nbsp;std::ios_base::in);<br/><br/>&#160;&#160;&#160;&#160;int&nbsp;&nbsp;num;<br/>&#160;&#160;&#160;&#160;vector&lt;Num&gt;&nbsp;numVector;<br/><br/>&#160;&#160;&#160;&#160;while(file&nbsp;&gt;&gt;&nbsp;num)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int&nbsp;left&nbsp;=&nbsp;num;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int&nbsp;right&nbsp;=&nbsp;0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(file.good())<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;file&nbsp;&gt;&gt;&nbsp;num;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;right&nbsp;=&nbsp;num;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(left&nbsp;&gt;=&nbsp;right)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int&nbsp;tmp&nbsp;=&nbsp;left;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;left&nbsp;=&nbsp;right;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;right&nbsp;=&nbsp;tmp;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Num&nbsp;newNum(left,&nbsp;right);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;numVector.push_back(newNum);<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;sort(numVector.begin(),&nbsp;numVector.end(),&nbsp;LessCompare());<br/><br/><br/><br/>&#160;&#160;&#160;&#160;Num&nbsp;pre&nbsp;=&nbsp;numVector[0];<br/>&#160;&#160;&#160;&#160;bool&nbsp;isSame&nbsp;=&nbsp;true;<br/>&#160;&#160;&#160;&#160;vector&lt;Num&gt;&nbsp;newNumVector;<br/>&#160;&#160;&#160;&#160;for(int&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;numVector.size();&nbsp;i++)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Num&nbsp;m_num&nbsp;=&nbsp;numVector[i];<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(m_num.left&nbsp;==&nbsp;pre.left)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(m_num.right&nbsp;&gt;&nbsp;pre.right)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pre&nbsp;=&nbsp;m_num;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;isSame&nbsp;=&nbsp;true;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;newNumVector.push_back(pre);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;isSame&nbsp;=&nbsp;false;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pre&nbsp;=&nbsp;m_num;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;newNumVector.push_back(pre);<br/><br/><br/><br/>&#160;&#160;&#160;&#160;Num&nbsp;max&nbsp;=&nbsp;newNumVector[0];<br/>&#160;&#160;&#160;&#160;int&nbsp;maxlength&nbsp;=&nbsp;0;<br/>&#160;&#160;&#160;&#160;for(int&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;newNumVector.size();&nbsp;i++)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Num&nbsp;now&nbsp;=&nbsp;newNumVector[i];<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(now.left&nbsp;&lt;&nbsp;max.right)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int&nbsp;length&nbsp;=&nbsp;0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(max.right&nbsp;&lt;&nbsp;now.right)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;length&nbsp;=&nbsp;max.right&nbsp;-&nbsp;now.left;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;length&nbsp;=&nbsp;now.right&nbsp;-&nbsp;now.left;<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(length&nbsp;&gt;&nbsp;maxlength)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;maxlength&nbsp;=&nbsp;length;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(now.right&nbsp;&gt;&nbsp;max.right)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;max&nbsp;=&nbsp;now;<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;cout&lt;&lt;&nbsp;maxlength&nbsp;&lt;&lt;&nbsp;endl;<br/><br/>}<br/><br/>int&nbsp;main()<br/>{<br/>&#160;&#160;&#160;&#160;func();<br/>}<br/></div></div><br/><br/>第三题：字符串替换（30分）<br/><br/>题目描述：请编写程序，根据指定的对应关系，把一个文本中的字符串替换成另外的字符串。<br/><br/>输入数据：程序读入已被命名为text.txt和dict.txt的两个输入数据文本文件，text.txt为一个包含大量字符串（含中文）的文本，以&nbsp;whitespace为分隔符；dict.txt为表示字符串（s1）与字符串（s2）的对应关系的另一个文本（含中文），大约在1万行左右，每行两个字符串（即s1和s2），用一个\t或空格分隔。dict.txt中各行的s1没有排序，并有可能有重复，这时以最后出现的那次s1所对应的s2为准。&nbsp;text.txt和dict.txt中的每个字符串都可能包含除whitespace之外的任何字符。text.txt中的字符串必须和dict.txt&nbsp;中的某s1完全匹配才能被替换。（为便于调试，您可下载测试text.txt和dict.txt文件，实际运行时我们会使用不同内容的输入文件。）<br/><br/>输出数据：在标准输出上打印text.txt被dict.txt替换后了的整个文本。&nbsp;评分标准：程序输出结果必须正确，内存使用越少越好，程序的执行时间越快越好。<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.kenwell.org/blog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>#include&nbsp;&lt;iostream&gt;<br/>#include&nbsp;&lt;string&gt;<br/>#include&nbsp;&lt;map&gt;<br/>#include&nbsp;&lt;fstream&gt;<br/>using&nbsp;namespace&nbsp;std;<br/><br/><br/>void&nbsp;dicfunc()<br/>{<br/>&#160;&#160;&#160;&#160;fstream&nbsp;dict(&#34;dict.txt&#34;,&nbsp;ios_base::in);<br/>&#160;&#160;&#160;&#160;<br/><br/>&#160;&#160;&#160;&#160;map&lt;string,&nbsp;string&gt;&nbsp;dictmap;<br/><br/>&#160;&#160;&#160;&#160;string&nbsp;input;<br/>&#160;&#160;&#160;&#160;while(dict&nbsp;&gt;&gt;&nbsp;input)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;string&nbsp;key&nbsp;=&nbsp;input;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;string&nbsp;value;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(dict.good())<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;dict&nbsp;&gt;&gt;&nbsp;input;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;value&nbsp;=&nbsp;input;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;dictmap[key]&nbsp;=&nbsp;value;<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;dict.close();<br/>&#160;&#160;&#160;&#160;fstream&nbsp;text(&#34;text.txt&#34;,&nbsp;ios_base::in);<br/>&#160;&#160;&#160;&#160;while(text&nbsp;&gt;&gt;&nbsp;input)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int&nbsp;count&nbsp;=&nbsp;dictmap.count(input);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(count&nbsp;==&nbsp;0)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cout&nbsp;&lt;&lt;&nbsp;input;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cout&nbsp;&lt;&lt;&nbsp;dictmap[input];<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cout&nbsp;&lt;&lt;&nbsp;&#34;&nbsp;&#34;;<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;text.close();<br/><br/>}<br/><br/>int&nbsp;main()<br/>{<br/>&#160;&#160;&#160;&#160;dicfunc();<br/>}<br/><br/></div></div><br/>第四题：低频词过滤（40分）<br/><br/>题目描述：请编写程序，从包含大量单词的文本中删除出现次数最少的单词。如果有多个单词都出现最少的次数，则将这些单词都删除。<br/><br/>输入数据：程序读入已被命名为corpus.txt的一个大数据量的文本文件，该文件包含英文单词和中文单词，词与词之间以一个或多个whitespace分隔。（为便于调试，您可下载测试corpus.txt文件，实际运行时我们会使用不同内容的输入文件。）<br/><br/>输出数据：在标准输出上打印删除了corpus.txt中出现次数最少的单词之后的文本（词与词保持原来的顺序，仍以空格分隔）。&nbsp;评分标准：程序输出结果必须正确，内存使用越少越好，程序的执行时间越快越好。<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.kenwell.org/blog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>#include&nbsp;&lt;iostream&gt;<br/>#include&nbsp;&lt;fstream&gt;<br/>#include&nbsp;&lt;vector&gt;<br/>#include&nbsp;&lt;map&gt;<br/>#include&nbsp;&lt;algorithm&gt;<br/>#include&nbsp;&lt;limits&gt;<br/>#include&nbsp;&lt;string&gt;<br/>using&nbsp;namespace&nbsp;std;<br/><br/>void&nbsp;removefunc()<br/>{<br/>&#160;&#160;&#160;&#160;fstream&nbsp;corpus(&#34;corpus.txt&#34;,&nbsp;ios_base::in);<br/><br/>&#160;&#160;&#160;&#160;string&nbsp;str;<br/>&#160;&#160;&#160;&#160;map&lt;string,&nbsp;int&gt;&nbsp;corpusMap;<br/><br/>&#160;&#160;&#160;&#160;int&nbsp;minCount&nbsp;=&nbsp;numeric_limits&lt;int&gt;::max();<br/>&#160;&#160;&#160;&#160;vector&lt;string&gt;&nbsp;minVector;<br/>&#160;&#160;&#160;&#160;while(corpus&nbsp;&gt;&gt;&nbsp;str)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int&nbsp;isCount&nbsp;=&nbsp;corpusMap.count(str);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;isCount&nbsp;=&nbsp;isCount&nbsp;+&nbsp;1;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;corpusMap[str]&nbsp;=&nbsp;isCount;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(isCount&nbsp;&lt;&nbsp;minCount)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;minCount&nbsp;=&nbsp;isCount;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;minVector.clear();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;minVector.push_back(str);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&nbsp;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&nbsp;if(isCount&nbsp;==&nbsp;minCount)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;minVector.push_back(str);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if((isCount&nbsp;-&nbsp;1)&nbsp;==&nbsp;minCount)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;vector&lt;string&gt;::iterator&nbsp;iter&nbsp;=&nbsp;find(minVector.begin(),&nbsp;minVector.end(),&nbsp;str);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;minVector.erase(iter);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cout&nbsp;&lt;&lt;&nbsp;isCount&nbsp;&lt;&lt;&nbsp;endl;<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;minVector.size();&nbsp;i++)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;string&nbsp;substr&nbsp;=&nbsp;minVector[i];<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cout&nbsp;&lt;&lt;&nbsp;substr&nbsp;&lt;&lt;&nbsp;&#34;&nbsp;&#34;&nbsp;&lt;&lt;&nbsp;endl;<br/>&#160;&#160;&#160;&#160;}<br/>}<br/><br/><br/>int&nbsp;main()<br/>{<br/>&#160;&#160;&#160;&#160;removefunc();<br/><br/>}<br/><br/></div></div><br/><br/>欢迎大家讨论：）]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kenwell.org/blog/default.asp?id=303" /> 
	  <id>http://www.kenwell.org/blog/default.asp?id=303</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[百度之星2007程序设计大赛 复赛题目]]></title>
	  <author>
		 <name>kenwell</name>
		 <uri>http://www.kenwell.org/blog/</uri>
		 <email>kenwell.ustc@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.kenwell.org/blog/default.asp?cateID=17" label="c++学习" /> 
	  <updated>2008-05-10T22:41:47+08:00</updated>
	  <published>2008-05-10T22:41:47+08:00</published>
		  <summary type="html"><![CDATA[百度之星2007程序设计大赛复赛于今日21：00顺利结束。复赛有4题，共1000分。某位参赛选手为我站提供了复赛的4道题目，现在全部公布出来，让更多的百度爱好者和编程爱好者进行共享和交流。感谢该热心网友对我站的支持和帮助！<br/><br/>1.好心的出租车司机<br/><br/>北京的一位出租车司机向你抱怨：城市发展太快，公路越来越多，他已经疲于计算行驶路线，于是求助你开发一个自动导航的工具。<br/>出租车只能在公路上行驶。所有的公路都是笔直、双向的，相交的公路视为连通（可以在交叉点处从一条公路开到另一公路上）。由于道路施工，整个城市的公路系统可能并不完全通畅。如果乘客的目的地不在公路边，则乘客下车后要步行前往，步行路线不受公路限制。这位好心的司机还特别提出，乘客步行距离越短越好；其次，出租车行驶里程越短越好。<br/>方便起见，用笛卡儿坐标系来描述城市地图，所有坐标都在第一象限[0,&nbsp;10000]的范围内。公路宽度忽略不计。<br/><br/>输入格式<br/>第一行是一个正整数k，代表公路条数。以下k行每行用4个非负整数描述一条公路（用空格隔开），前两个表示公路起点的坐标，后两个表示公路终点的坐标。下一行包含4个非负整数（用空格隔开），前两个表示乘客上车点（保证在某条公路上），后两个表示乘客目的地坐标。<br/><br/>输出格式<br/>仅一行，为出租车行驶的里程数，保留一位小数（四舍五入）。<br/><br/>输入样例&nbsp;例<br/>2<br/>2&nbsp;2&nbsp;10&nbsp;10<br/>10&nbsp;2&nbsp;2&nbsp;10<br/>3&nbsp;3&nbsp;9&nbsp;4<br/><br/>输出样例&nbsp;例<br/>7.8<br/><br/>评分规则<br/><br/>&nbsp;&nbsp;&nbsp;1.&nbsp;程序将运行在一台Linux机器上（内存使用不作严格限制），在每一测试用例上运行不能超过1秒，否则该用例不得分；<br/>&nbsp;&nbsp;&nbsp;2.&nbsp;要求程序能按照输入样例的格式读取标准输入数据，按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据，该题将不得分；<br/>&nbsp;&nbsp;&nbsp;3.&nbsp;本题包含20个测试点，前10组满足k&lt;=10，后10组满足k&lt;=50。每个测试点10分，共200分。<br/><br/>2.Robots.txt&nbsp;协议<br/><br/>搜索引擎是靠Web&nbsp;Robot（又称Spider）来收集互联网上浩如烟海的网页的。Spider就像一个旅行家一般，不知疲倦地奔波于万维网的空间，将遇到的页面收集下来供搜索引擎索引。对于一个网站的管理员来说，如果想指定某些不希望搜索引擎访问的内容，该如何去做呢？他需要的就是Robots&nbsp;Exclusion&nbsp;Protocol协议，这里简单的称它做Robots.txt协议。<br/><br/>Robots.txt是一个放置在网站根目录下的纯文本文件。举例来说，当Spider访问一个网站（比如&nbsp;<a href="http://www.example.com" target="_blank">http://www.example.com</a>）时，首先会检查该网站中是否存在<a href="http://www.example.com/robots.txt" target="_blank">http://www.example.com/robots.txt</a>这个文件，如果Spider找到这个文件，它就会根据这个文件的内容，来确定它访问权限的范围。<br/><br/><a href="http://www.robotstxt.org/" target="_blank">http://www.robotstxt.org/</a>是robots.txt协议的Home&nbsp;Page，在这个站点上你可以找到很多robots.txt协议相关的资料。Robots.txt协议在<a href="http://www.robotstxt.org/wc/norobots.html" target="_blank">http://www.robotstxt.org/wc/norobots.html</a>（本地拷贝）上有比较详尽的描述。<br/><br/>你的任务就是编写Spider中的一个逻辑单元，用来判断一个网站的一些URL是否被禁止抓取。对方网站的站点在这里假设是www.example.com，这个Spider的User-agent当然是Baiduspider。注意，这个逻辑单元除了本身的判断逻辑要求与robots.txt协议一致外，还要注意容错的问题。互联网上纷繁芜杂，会出现很多意想不到的错误。如何能够对一个对错参半的&nbsp;robots.txt进行解析，把其中正确的挑拣出来、把错误的部分忽略掉，也是一个不小的挑战哦。都会遇到什么错误？在开始爬行互联网之前，谁都不知道。<br/><br/>输入格式<br/>第一行是一个非负整数m，表示robots.txt文件的行数，后面跟m行，是robots.txt的全文。下一行包含一个非负整数n，&nbsp;表示URL的行数，后面跟n行URL，这个就是你要判断的URL的列表。<br/><br/>输出格式<br/>每条URL输出一行，每行两列，第一列是一个数字，如果这条URL被禁止，则输出0，否则输出1。第二列是这条URL本身。两部分以一个空格隔开。<br/><br/>样例输入&nbsp;例<br/>2<br/>User-agent:&nbsp;*<br/>Disallow:&nbsp;/tmp/<br/>2<br/><a href="http://www.example.com/index.html" target="_blank">http://www.example.com/index.html</a><br/><a href="http://www.example.com/tmp/somepage.html" target="_blank">http://www.example.com/tmp/somepage.html</a><br/><br/>样例输出&nbsp;例<br/>1&nbsp;<a href="http://www.example.com" target="_blank">http://www.example.com</a>/index.html<br/>0&nbsp;<a href="http://www.example.com" target="_blank">http://www.example.com</a>/tmp/somepage.html<br/><br/>评分规则<br/><br/>&nbsp;&nbsp;&nbsp;1.&nbsp;程序将运行在一台Linux机器上（内存使用不作严格限制），在每一测试用例上运行不能超过1秒，否则该用例不得分；<br/>&nbsp;&nbsp;&nbsp;2.&nbsp;要求程序能按照输入样例的格式读取标准输入数据，按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据，该题将不得分；<br/>&nbsp;&nbsp;&nbsp;3.&nbsp;本题包含20个测试点，均满足0&lt;=n,m&lt;=100。本题每个测试点10分，共200分。<br/><br/>3.简单印象<br/><br/>简单、可依赖是百度的性格，百度之星们又有怎样的性格呢？<br/><br/>有n名选手入围了百度之星程序设计大赛的复赛阶段。为了让选手相互之间有更多的了解和更好的交流，组委会工作人员邀请每位选手选择一些不同的词语来介绍自己的性格。每名选手需要为自己选定的每一个词语指定一个绝对值不超过100的整数权值q，表示这个词语在多大程度上描述了自己的性格。例如“美丽&nbsp;90”表示该选手认为自己非常美丽，“冷淡&nbsp;-60”表示比较热情，而“外向&nbsp;-5”表示稍微有一点点偏内向。你不需要考虑词语本身的语义，比如“外向&nbsp;-5”不代表“内向&nbsp;5”。<br/><br/>组委会发现不少选手的性格都有相似之处，所以希望找到一组词语尽量准确的描述所有的选手。对于选出的词语集合S，定义选手i被描述的精确程度P&nbsp;(i)为S中所有词语在选手i眼中的权值之和（选手i没有提到的词权值视为0），组委会希望让最小的P(i)尽量大，因为这样才能让选出的词语能够描述所有选手，而不仅仅是部分。<br/><br/>另外，所选词语的个数也是有讲究的。词语太少会略显单薄，而词语太多又不方便宣传，所以组委会设定了词语个数的最小值min和最大值max。<br/><br/>输入数据<br/>输入数据第一行为三个非负整数n,&nbsp;min和max，表示选手的个数、词语数的最小值和最大值，接下来的n行，每行包括若干“词语-权值”对（用空格隔开）。词语保证由不超过10个汉字组成（用GBK编码，不含非汉字），权值为绝对值不超过100的整数。<br/><br/>输出数据<br/>仅一行，输出各个词语，用空格隔开。词语总数必须不小于min且不大于max，每个词语都必须至少被一个选手提到过，否则视为非法输出。你的输出不必是最优的，只要输出合法，就能得到一定的分数。<br/><br/>输入样例&nbsp;例<br/>3&nbsp;2&nbsp;4<br/>美丽&nbsp;90&nbsp;冷淡&nbsp;-60&nbsp;外向&nbsp;-5&nbsp;乐观&nbsp;20<br/>美丽&nbsp;10&nbsp;冷淡&nbsp;20<br/>外向&nbsp;20&nbsp;乐观&nbsp;-5<br/><br/>输出样例&nbsp;例<br/>美丽&nbsp;冷淡&nbsp;外向<br/><br/>样例解释<br/>如果把选手按照输入中出现的顺序编号为1~3，则P(1)=90-60-5=25，P(2)=10+20=30，P(3)=20，所有P中的最小值为20。<br/><br/>注意事项<br/>输入数据的中文采用GBK编码。<br/>GBK：是又一个汉字编码标准，全称《汉字内码扩展规范》。采用双字节表示，总体编码范围为&nbsp;8140-FEFE，首字节在&nbsp;81-FE&nbsp;之间，尾字节在&nbsp;40-FE&nbsp;之间，排除xx7F。总计&nbsp;23940&nbsp;个码位，共收入&nbsp;21886&nbsp;个汉字和图形符号，其中汉字（包括部首和构件）21003&nbsp;个，图形符号&nbsp;883&nbsp;个。<br/><br/>评分规则<br/><br/>&nbsp;&nbsp;&nbsp;1.&nbsp;程序将运行在一台Linux机器上（内存使用不作严格限制），在每一测试用例上运行不能超过2秒，否则该用例不得分；<br/>&nbsp;&nbsp;&nbsp;2.&nbsp;要求程序能按照输入样例的格式读取标准输入数据，按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据，该题将不得分；<br/>&nbsp;&nbsp;&nbsp;3.&nbsp;本题包含30个测试点，每个测试点10分，共300分。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;测试点1~10满足n&lt;=100,&nbsp;1&lt;=min&lt;=max&lt;=5,&nbsp;涉及到的词语不超过500个。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;测试点11~20满足n&lt;=200,&nbsp;10&lt;=min&lt;=max&lt;=15,&nbsp;涉及到的词语不超过2000个。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;测试点21~30满足n&lt;=400,&nbsp;25&lt;=min&lt;=max&lt;=30,&nbsp;涉及到的词语不超过10000个。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每个测试点独立评分。对于每个测试点，你的得分不仅取决于你的输出，还取决于其他选手的输出。非法输出的得分为0，合法输出的得分大于0。设合法输出的程序数为M，比程序i的方案严格更优的程序数为Y(i)，则该测试点程序i的分值为10(1-Y(i)/M)。换句话说，输出该测试点最优解的程序将获得&nbsp;10分，而最差解惟一的情况，输出最差解（但合法）的选手将得到10/M分。注意：每个测试点的得分不一定为整数。<br/><br/>&nbsp;4.紧急修复<br/><br/>2050年的一天，某市k家公司的计算机系统突然同时瘫痪。市政府很快找到了问题的所在，并开始研发一套自动修复系统。该系统启用后整个城市的计算机系统将恢复正常，但由于研发时间较长，在此之前各公司仍将蒙受不小的损失。为此，市政府决定派出n支维修能力相同的维修队到各公司进行手工修复，力图在系统启用前将整个城市的总损失降低到最小限度。<br/><br/>城市被划分成R*C的网格，各行从上到下编号为1~R，各列从左到右编号为1~C。每个格子为空地、障碍物和建筑物之一（公司总是位于某个建筑物格子中，且不同的公司总是在不同的建筑物格中）。维修队每次只能往上（行编号减1）、下（行编号加1）、左（列编号减1）、右（列编号加1）四个方向移动，第i支维修队每个小时可以移动s(i)格。维修队在任何时候都不能位于障碍物中，但建筑物可以从它上下左右的相邻空地进入，也可以从这些格子出去。注意：不能直接从一个建筑物格移动到另一个建筑物格，而必须先移动到相邻的空地，在空地上移动，然后再进入另一个建筑物。每个格子的实际尺寸很大，因此可以有多个维修队同时在同一个格子中。第i家公司的位置为(r(i),&nbsp;c(i))，瘫痪程度为B(i)，每小时的经济损失为P(i)元。瘫痪程度的单位是“队·小时”，即一支维修队每小时可以把一个公司的瘫痪程度降低1，而如果m支维修队同时为一个公司修复，每小时可以把该公司的瘫痪程度降低m。注意，在完全修复之前，每个小时的经济损失不变。<br/><br/>政府的修复计划应包含每个小时各维修队所执行的命令。这些命令包括：<br/><br/>1.&nbsp;REST<br/>该命令不进行任何操作。<br/><br/>2.&nbsp;MOVE&nbsp;&lt;seq&gt;<br/>按照seq进行移动。其中seq为一个长度不超过s(i)的非空字符串（如果不需要移动，请使用REST命令）。如果seq的长度超过s(i)，则从第s&nbsp;(i)+1个字符开始的剩余部分将被删除；如果该命令不能完全成功的执行，则从第一个非法移动开始的所有后续移动将被忽略。&nbsp;seq的取值范围为：U,D,L,R。分别表示上、下、左、右。字符区分大小写,&nbsp;其他字符视为非法。<br/><br/>3.&nbsp;REPAIR<br/>对当前公司进行维修。如果当前公司已经修复或者该维修队的当前位置不是公司，该命令将被忽略。该命令后面加的所有参数将被忽略。<br/><br/>需要特别注意的是，每个小时只能执行一条指令，例如不能在MOVE之后立刻REPAIR，必须等待下一个小时。<br/><br/>输入格式<br/>输入的第一行为三个正整数R,&nbsp;C,&nbsp;T即网格的行数、列数和自动修复系统的启用时间。以下R行每行C个字符，表示该城市的地图。点表示空地，#表示障碍物，O表示建筑物。下一行包含一个正整数k，表示公司的数目。以下k行每行四个整数r,&nbsp;c,&nbsp;B,&nbsp;P，其中(r,c)表示该公司坐标(1&lt;=r&lt;=R,&nbsp;1&lt;=c&lt;=C)，B为该公司的初始瘫痪程度，P为每小时的经济损失。(r,c)处保证为一个建筑物格。B和P均为正整数，且P不超过&nbsp;200。&nbsp;下一行包含两个正整数n,&nbsp;s，表示维修队的个数和每小时最多移动的格子数。以下n行每行包含两个整数r,&nbsp;c，表示该维修队的初始位置。维修队按照输入文件中的顺序编号为1~n。<br/><br/>输出格式<br/>输出每n行为一组，描述一个小时各维修队的发出的命令。共T组，一共n*T行。所有格式非法的指令将被忽略（等效于REST）。尽管如此，如果程序输出不足n*T行，或者命令中没有REPAIR，或者所有的REPAIR都没有成功执行，则输出将视为非法。你的程序不必输出最优解，任何一个合法解都将得到一定的分数。<br/><br/>输入样例&nbsp;例<br/>4&nbsp;7&nbsp;5<br/>…#OO#<br/>#…..#<br/>O…##O<br/>#……<br/>2<br/>1&nbsp;5&nbsp;1&nbsp;5<br/>3&nbsp;7&nbsp;4&nbsp;6<br/>3<br/>4&nbsp;7&nbsp;5<br/>1&nbsp;1&nbsp;5<br/>3&nbsp;1&nbsp;5<br/><br/>输出样例&nbsp;例<br/>MOVE&nbsp;U<br/>MOVE&nbsp;RRRD<br/>MOVE&nbsp;RDRURD<br/>REPAIR<br/>MOVE&nbsp;DRRU<br/>MOVE&nbsp;DRRRU<br/>REPAIR<br/>REPAIR<br/>REPAIR<br/>REPAIR<br/>MOVE&nbsp;DRUL<br/>REPAIR<br/>SLEEP<br/>REPAIR<br/>REST<br/><br/>模拟器<br/><br/>为了更清晰的说明规则并帮助选手设计和测试程序，命题组开发了一个简单的模拟器。该模拟器根据输入数据和程序输出进行模拟，并给出详细过程和最后的结果。最终的测试将严格按照该脚本的输出进行评判。你可以用它测试样例输入和输出，或者自己设计的其他数据。模拟器将会对各条非法指令给出警告信息(例如非法的移动,无法识别的指令等)。<br/>每小时的模拟过程如下：<br/>第一步：对于每个尚未修复的公司i，将P(i)累加进总损失。<br/>第二步：按照序列从小到大的顺序依次执行各维修队的指令。<br/><br/>模拟器用python编写，没有安装python的选手可以在<a href="http://www.python.org/" target="_blank">http://www.python.org/</a>下载最新版本。<br/><br/>评分规则<br/><br/>&nbsp;&nbsp;&nbsp;1.&nbsp;程序将运行在一台Linux机器上（内存使用不作严格限制），在每一测试用例上运行不能超过2秒，否则该用例不得分；<br/>&nbsp;&nbsp;&nbsp;2.&nbsp;要求程序能按照输入样例的格式读取标准输入数据，按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据，该题将不得分；<br/>&nbsp;&nbsp;&nbsp;3.&nbsp;本题包含30个测试点，每个测试点10分，共300分。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;测试点1~10满足R,&nbsp;C&lt;=10,&nbsp;n&lt;=5,&nbsp;k&lt;=10,&nbsp;B&lt;=15,&nbsp;T&lt;=30<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;测试点11~20满足R,&nbsp;C&lt;=30,&nbsp;n&lt;=10,&nbsp;k&lt;=20,&nbsp;B&lt;=50,&nbsp;T&lt;=500<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;测试点21~30满足R,&nbsp;C&lt;=100,&nbsp;n&lt;=100,&nbsp;k&lt;=500,&nbsp;B&lt;=1000,&nbsp;T&lt;=10000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每个测试点独立评分。对于每个测试点，你的得分不仅取决于你的输出，还取决于其他选手的输出。非法输出的得分为0，合法输出的得分大于0。设合法输出的程序数为M，比程序i的方案严格更优的程序数为Y(i)，则该测试点程序i的分值为10(1-Y(i)/M)。换句话说，输出该测试点最优解的程序将获得&nbsp;10分，而最差解惟一的情况，输出最差解（但合法）的选手将得到10/M分。注意：每个测试点的得分不一定为整数。<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kenwell.org/blog/default.asp?id=299" /> 
	  <id>http://www.kenwell.org/blog/default.asp?id=299</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[AStar2007百度之星程序设计大赛：复赛点评]]></title>
	  <author>
		 <name>kenwell</name>
		 <uri>http://www.kenwell.org/blog/</uri>
		 <email>kenwell.ustc@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.kenwell.org/blog/default.asp?cateID=17" label="c++学习" /> 
	  <updated>2008-05-10T22:33:28+08:00</updated>
	  <published>2008-05-10T22:33:28+08:00</published>
		  <summary type="html"><![CDATA[与初赛相比，复赛的题目更加侧重考查选手的综合素质。mithril,&nbsp;tedcn,&nbsp;zmy等8位选手前两题均获得满分，体现出了扎实的基本功；第三题的最高分为tedcn(龙凡)，得分为299.3814，第四题的最高分为acrush&nbsp;(楼天成)，得分为291.1531。四题总分第一为acrush(950.9242)，&nbsp;5位选手总分超过了800，11位选手超过700分，29位选手超过600分，60位选手超过500分，91位选手超过400分。<br/><br/>第一题<br/><br/>这是一道图论和计算几何的综合题。虽然不难，但是比赛时却让不少选手花了很多时间。虽然最后有不少选手获得满分，但是不少选手的程序十分冗长，花费了不少时间才调试通过。我们特地邀请本题获得满分的chenqifeng(陈启峰)写了一份简短的分析，希望各位选手可以从中获得启发：<br/><br/>陈启峰的分析：最优驾车路线一定由若干条直线段依次连接，而这些直线段各属于某些高速公路的一部分。设该路线为(p1,p2),(p2,p3)...(pn-1,&nbsp;pn)，则只要找出所有可能成为pi的点，并求出所有可以成为(pi,pi+1)的边，再用最短路算法即可求出答案。算法步骤如下：<br/><br/>求出所有可能成为pi的点集V。这些点可以分为以下4类：<br/><br/>一条高速公路的两个端点；<br/>两条高速公路的交点；<br/>上车点；<br/>目的地到某条高速公路的垂足（只有垂足在该高速公路上时才保留）<br/>构造边集E：对于每一条高速公路AB，求出V中位于这个高速公路上的所有点，按照离A点的距离排序为v1,v2,...,vk，然后添加(v1,v2)，(v2,v3),...,(vk-1,vk)这k-1条无向边。<br/>以上车起点为源点做一次Dijkstra算法，求出上车起点到V中每个点的最短距离。<br/>注意构造出的图不一定连通，因此只应检查V中所有可达点，选出离终点距离最近的点中驾车距离最小的。<br/><br/>chenqifeng的程序只有107行，不到2.7K，单击此处下载。<br/><br/>第二题<br/><br/>这是一道工程性比较强的题目，它的特别之处在于规范放在外部文档中，并且是英文。这份英文文档并不长（在实际的工程中算是非常短了），但是从贴吧、email和热线询问来看，不少选手仍然没有能够仔细阅读。这里举几个典型的例子：<br/><br/>关于Disallow中URL的含义，规范中写到：&nbsp;The&nbsp;value&nbsp;of&nbsp;this&nbsp;field&nbsp;specifies&nbsp;a&nbsp;partial&nbsp;URL&nbsp;that&nbsp;is&nbsp;not&nbsp;to&nbsp;be&nbsp;visited.&nbsp;This&nbsp;can&nbsp;be&nbsp;a&nbsp;full&nbsp;path,&nbsp;o&#114;&nbsp;a&nbsp;partial&nbsp;path;&nbsp;any&nbsp;URL&nbsp;that&nbsp;starts&nbsp;with&nbsp;this&nbsp;value&nbsp;will&nbsp;not&nbsp;be&nbsp;retrieved.&nbsp;后面甚至还举了例子，但是仍然有选手通过各种途径向我们询问这里是不是指的子串匹配。<br/><br/>关于注释，规范中写到：&nbsp;Lines&nbsp;containing&nbsp;only&nbsp;a&nbsp;comment&nbsp;are&nbsp;discarded&nbsp;completely,&nbsp;and&nbsp;therefore&nbsp;do&nbsp;not&nbsp;indicate&nbsp;a&nbsp;record&nbsp;boundary.&nbsp;但从测试结果看，仍有部分选手没有处理好这一点。<br/><br/>关于&nbsp;Disallow中的星号，规范中写到：&nbsp;If&nbsp;the&nbsp;value&nbsp;is&nbsp;&#39;*&#39;,&nbsp;the&nbsp;record&nbsp;describes&nbsp;the&nbsp;default&nbsp;access&nbsp;policy&nbsp;for&nbsp;any&nbsp;robot&nbsp;that&nbsp;has&nbsp;not&nbsp;matched&nbsp;any&nbsp;of&nbsp;the&nbsp;other&nbsp;records.&nbsp;也就是说，星号不是指所有user-agent，而是指所有&#34;其他&#34;user-agent.&nbsp;对这一规则的实现需要小心：如果有两个合法行的User-agent分别是*和Baiduspider，这两行的顺序应该和结果无关。<br/><br/>对于可能产生多种理解的地方，设计测试数据时均已避开。<br/><br/>第三题<br/><br/>本题是提交数量最多的一题，因此每个点分数的粒度比较小。有20位选手的得分在250分以上，57位选手的得分为200分以上，101位选手的得分在150&nbsp;分以上。本题由经典的Set&nbsp;Cover问题修改而来，是一个NP完全问题，但这并不意味着本题纯粹是碰运气或者鼓励投机取巧。&nbsp;tedcn几乎在所有数据中都得到了所有选手中的最优解，而有的纯随机化程序30个数据加起来只得了不到1分。<br/>龙凡的分析：这道题目比的是在有限的竞赛时间内设计优秀，高效，并且能够实现的近似算法的能力。最终我的代码200多行，算是随机贪心算法中非常长的了。由于时间原因，很多细节都没来得及仔细推敲。如果有足够的时间来调整参数，应该能够得到更优秀的结果。我的算法的基本框架分为三步：<br/><br/>计算每个词语的估价函数。<br/><br/>贪心得到一个词语集合，集合的元素个数在题目要求的范围内。<br/><br/>对贪心得到的解进行随机调整。我在提交的程序中调整了一万次。每次调整有两种可能，一种是增加一个词，一种是删除一个词，然后输出在整个贪心和随机的过程中出现过的最优解（我的算法的调整并不保证每次都将答案往更优的方向调整）。这里有一个细节：上限和下限相等怎么办？这时没有办法增减词了，我的方法是放宽上下限（上限加1，下限减1），最终输出答案时只考虑满足条件的。<br/><br/>估价函数：由于题目要求最小权值尽量大，估价函数要正确反映每个词语的优先度，就需要至少考虑到两个量：<br/><br/>N个人对这个词语的权值总和。显然如果所有人对这个词语的权值都很高，这个词语一定要优先。我们将这个量记为S(i)，i为词语编号。<br/><br/>N个人中对这个词语的权值最低的那个人的权值。即是不是选定这个词语会让某个人权值变得非常低。我们将这个量记为M(i)，i为词语编号。<br/><br/>在我的程序中，对于词语i的估价函数为：<br/><br/>if&nbsp;(M(i)&lt;0)<br/>return&nbsp;S(i)-M(i)*M(i);<br/>else<br/>return&nbsp;S(i);<br/><br/>换句话说，当M(i)为负时对估价函数影响很大，而为正时没有影响。需要说明的是，这个估价函数是比赛时仓促选择的，并不是非常的合理。也许M上的指数取1.5左右，并且当M&gt;0时加上M1.5而不是不考虑M可能效果会更好。<br/><br/>调整过程：我实现的贪心就是先随机决定初始集合的大小，然后取估价函数最大的若干个词语作为集合元素。调整时，删除一个元素就是计算删去每一个在集合中的元素后对答案的影响（集合大小最大为30，消耗不了多少时间），然后删去一个元素使得删去后的答案尽量优（但是不一定比删去前要优）。增加元素的时候比较复杂，因为词语总数可能达到一万，不可能所有词语都尝试一遍。我的处理方法是随机找30个元素，然后选择一个最好的增加。但是我这里的随机不是完全随机，随机选取公式是：<br/><br/>Id&nbsp;=&nbsp;(int)(r*r*T+1);<br/><br/>其中r表示0~1之间的随机数，Id表示的是选中的词语的编号。我之前已经将词语按照估价函数排序，编号越小估价函数值越大。使用这样的选取方法，可以让估价函数大的词语有更大的概率被选中。这是我实际提交的程序使用的公式，考后分析也许将r的指数改为3或更大会更好一些。<br/><br/>下面是第二名chenqifeng的分析。他得到了298.6404分，虽然比第一名略少一点，但是算法简单，容易实现。该算法在规模比较小的数据上表现优异，但规模扩大时和tedcn相比略逊一筹。他也是采用的随机调整，但和上面的分析不同，它采取的是类似于bellman-ford的更新方法，尝试了所有可能的交换方式。当某次迭代没有交换时停止（因为下次迭代也不可能交换）。详细算法如下：<br/><br/>陈启峰的分析：设目标函数Z=min{v1,v2,...,vn}，其中vi为第i个人的总分。从min到max枚举选取单词的个数Si，并执行以下操作：<br/><br/>从所有的单词向量中随机选取Si个；<br/><br/>无条件执行以下迭代：<br/><br/>for&nbsp;每一个已选的向量A&nbsp;do<br/>for&nbsp;每一个未选的向量B&nbsp;do<br/>if&nbsp;交换A、B能使得Z变大&nbsp;then<br/>交换A、B；<br/>if&nbsp;本次迭代没有进行过交换&nbsp;then<br/>break;<br/><br/>用本次迭代得到的最优值Z去更新答案。<br/><br/>只需不断地执行以上随机调整算法直到运行时间超过1.6秒即可。注意在“if交换A、B能使得Z变大”本来需要O(n)次运算和比较，但加入两个重要的剪枝优化可以大大提高实际运行速度：<br/><br/>设当前的Z=Vm，如果Bm-Am&lt;=0，则交换不能使Z变大。<br/>对于i=1,2,...,n，一旦发现Vi+Bi-Ai&lt;=Z，则交换不能使Z变大。<br/><br/>第四题<br/><br/>和第三题相比，第四的题意比较复杂，而在规定时限内算出至少有一次成功维修的可行解也要困难一些，因此仅有约150人提交。由于题目本身的复杂性，不同算法对于不同特点的数据表现有所不同。只有acrush(楼天成)取得了250以上的分数，&nbsp;10人取得200以上的分数，29人取得150以上的分数，57人取得100以上的分数，不到100人的分数超过10分。下面给出两份分析，两个算法都很典型但又很不相同，有兴趣的选手可以继续研究。<br/><br/>楼天成的分析：本题首先需要做的一件事情是求最短路径。需要注意的是这条路径不能有连续两个点都是建筑物，但并不要求中间点全都是空地。这里不需要求任两点之间的最短路径，只要求每一个Company到所有点的最短路径长度。时间复杂度是O&nbsp;(k*r*c)。接下来主要有两种不同思路：<br/><br/>全局分析——得到一个全局估价函数，然后每一步选择一个全局估价函数最优的方案进行。这样的思想对于估价函数的要求很高。<br/>局部分析——让所有Robot&#34;依次&#34;赶到各Company。<br/><br/>我使用了局部分析的方法，由于时间原因，没有尝试全局分析的思想。下面主要介绍局部分析的一些效果很好的优化：<br/><br/>不需要所有Robot都去当前&#34;选中&#34;的Company，一个Robot不参加某Company的修理的条件是：如果这个Robot赶到该Company&nbsp;时，已经不能提早该Company的REPAIR时间，这个Robot就不去相应的Company。当然此时这个Robot不是普通的IDLE，而是等待时机到达后面被&#34;选中&#34;的Company。具体实现方法就是：记录每个Robot的空闲时间，然后对于每一个新&#34;选中&#34;的Company，按照Robot&nbsp;到达Company的时间前后进行判断是否让该Robot过去。如果不需要构造方案，上述过程的时间复杂度是O(kn)的，和地图的大小无关。<br/><br/>选择合适的修理Comany的顺序，修理的顺序对结果的影响很大。由于O(kn)不是很大，我们可以通过随机调整或者模拟退火法得到比较理想的修理Company的顺序。<br/><br/>朱泽园的分析：由于花费了比较多的时间实现和比较第三题的遗传算法和随机调整，本题我采用的是从开始时刻一个一个时间单位地“模拟”算法。换句话说，每个时间单位依次处理每个修理队。如果他正在修理，并且大厦还没完全修理好，则强制他去修理；否则，让修理队在能走到的所有需要修理的大厦中，选取一个他认为最合适的。这里要有一个估价函数，大约是：<br/><br/>剩余未修理指数B越小，越值得修<br/>已经去修理的人越多，越值得去修<br/>距离除以速度（即时间）越短，越值得去修<br/>P值越大越值得去修（尽可能减小损失）<br/><br/>我在程序中将上述因子直接相乘，事实上还需要作若干修正，就是如果已经去修的人过多，就没太大必要去修了）需要注意的是两点小优化：<br/><br/>计算每个点能走道的其它点，需要一个bfs。这个bfs的hash判重函数可以重复利用，而不要每次进入bfs的时候都重新memset一次，可以大大加快程序运行速度<br/><br/>如果一个维修队已经REST了，以后只能REST，因为他永远走不到任意一个未修完的大厦，就不要再bfs了（这个优化非常重要，在维修队过多的时候可以几百倍地降低程序运行时间）<br/><br/>由于上述程序运行非常快，因此我在估价函数中加入随机因子（即每次不一定选最好的，可能是次好的……），然后运行多次，效果良好。<br/><br/>分类：&nbsp;IT]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kenwell.org/blog/default.asp?id=298" /> 
	  <id>http://www.kenwell.org/blog/default.asp?id=298</id> 
  </entry>	
		
</feed>