楼天成
- 格式:docx
- 大小:116.37 KB
- 文档页数:43
清华姚班:世界最强专业作者:来源:《意林·作文素材》2019年第10期作文君2018年10月,《2019 U.S.News世界大学排名》——俗称最不待见中国大学的世界排名出炉。
让人惊奇的是清华的工科和计算机科学专业,居然排到了全球第一!就连威名远播的麻省理工也未出其右。
此名次一出,引来一片质疑:清华有这么好吗?一部分中国人也抱有同样疑问。
其实早在2017年,清华大学计算机专业就被排到了第一。
不管是否有人质疑,这个排名至少证明清华这些年一直在进步。
而且进步速度要快于美国一些大学。
而这一切,得益于清华大学交叉信息研究院院长姚期智,得益于他创立的清华大学计算机科学实验班,也就是江湖中传说的大名鼎鼎的“清华姚班”!姚班,到底是一个怎样传奇的存在?我们谈论姚班的时候又该谈论些什么呢?一起来看!冷知识?U.S.News世界大学排名U.S.News世界大学排名是世界最具影响力的全球性大学排名之一,它与世界大学学术排名(ARWU)、泰晤士高等教育世界大学排名(Times Higher)以及QS世界大学排名并称为四大世界大学排名。
这个排名也是业界最具权威的榜单,每年准留学生们申请学校时都会参考它的最新排名,除了对每个大学的本科及研究生教育水平进行整合,它对学校的学术研究和业界声誉也做了准确、综合的评价。
精英领地中国最好的一批本科生在人工智能的人才大潮中,姚班被寄予厚望。
某种程度上,姚班学生都是优中选优,每届只招收三十余人,其中不乏各省高考理科状元和各门学科奥赛金牌得主。
这些学生非常聪明,敢于挑战权威,随时随地都能冒出创造性的想法。
“他们是真的很聪明,是最好的一批本科生。
不光在中国,在全世界都可以这么说。
”清华大学交叉信息院的助理教授、博士生导师吴辰晔这样评价他们。
一、鬲融:17科满分传奇,32岁斩获斯隆奖鬲融生于河北唐山,很小就展现出天赋。
因为家庭文化气息浓厚,所以从小就酷爱读书。
不仅如此,鬲融的父母还很懂得如何从兴趣引导孩子成长,不仅经常带孩子去北京天文馆、自然博物馆、科技馆等地方,而且往往是一次没看够就再去第二次。
清华大学“姚班”创办者姚期智是谁资料简介,姚班到底有多厉害都是学神的人物清华大学“姚班”姚期智是图灵奖唯一的华人获奖者,也是世界现代密码学、理论计算机科学、量子计算等领域的奠基人,现任清华大学交叉信息研究院院长。
他于2004 年辞去普林斯顿大学的终身教职,回国担任清华大学高等研究中心教授,并开设了国内首门计算机理论课程,从根本上夯实了国内计算机本科课程的理论基础。
隔年又创办了如今大名鼎鼎的「姚班」,培养出了一大批中国计算机科学的顶尖人才,其门生早已遍布国内外AI 产业和计算机科学研究的各个关键领域:中国计算机编程第一人楼天城,还有旷视科技的三位创始人印奇、杨沐、唐文斌都是姚班走出来的学生。
今年二月,他与杨振宁一起放弃外国国籍成为中国公民,正式转为中国科学院院士。
国际评价姚班:姚班有最优秀的本科生和最优秀的本科教育。
姚班到底是什么?“清华学堂计算机科学实验班”(姚班)由世界著名计算机科学家姚期智院士于2005年创办,致力于培养与美国麻省理工学院、普林斯顿大学等世界一流高校本科生具有同等、甚至更高竞争力的领跑国际拔尖创新计算机科学人才。
为了更为突出其培养目标,在2009年4月姚班由刚创立时的“软件科学实验班”更名为“计算机科学实验班”,并且在2009年9月,姚班被率先纳入清华大学“清华学堂拔尖创新人才培养计划”。
姚期智院士为“清华学堂计算机科学实验班”首席教授。
姚班到底有多厉害都是学神的人物一堂计算机科学的课程正在进行中。
唐平中把一个证明方法写在黑板上。
这个方法万无一失,他用了四年。
突然,一个学生站了起来。
“老师,你的证明太长了。
”就像美剧中天才出场的桥段,那个学生走上前台,整个证明从三页简化到了一页。
这样的事情时常发生。
唐平中留作业时,会把前人未解决的难题放在后面,作为附加题。
他想看看这群学生的反应。
“学生们并不知道,以为就是作业,”他说。
这是清华大学的计算机科学实验班。
他教课的第五年,由于它的创办者姚期智而被称为“姚班”。
|FEATURES清华姚班VS浙大竺院谁是中国最牛AI创业班?育和孵化下,其人才隐藏着惊人的造富实力。
而这背后除了聪明人的聚群效应,了中国已经进入技术造富时代。
程华秋子/文特写|FEATURES机器视觉、AI芯片、机器人、生命科技……越来越多科幻的名词,出现在我们的生活中。
与之相随的,是一系列科技独角兽的崛起。
中国的创业与创富,由此转向完全不同的硬核轨迹。
专业知识,成为创富的撒手锏和护城河。
名校理工科精英,是当仁不让的先行者。
中国名校理工科教育领域,清华姚班、浙大竺院在生源上堪称“制霸”全国。
如今这一波科技创富潮中,两个中国最牛学院是否也是一骑绝尘?二者之中,谁最能打?清华姚班:一群天才聚集在一起创业是怎样的?清华大学流传一句话,“半国英才聚清华,清华一半英才在姚班”。
人们俗称的姚班,正式名称是清华学堂计算机科学实验班,隶属清华大学交叉信息研究院,由唯一一位华人图灵奖得主、中国科学院院士姚期智教授于2005年创办。
姚班的学生大牛如云,基本上都是数学、物理及信息学奥赛的金牌选手,各省高考前三甲,其生源主要来自保送、自主招生。
以2018级50位姚班学霸为例,保送和自招占44人,高考裸考6人。
其中,数学奥赛选手13人(3人国家队),信息奥赛选手26人(3人国家队、2人省理科状元)。
2019年姚班录取的55人中,有3省理科状元,以及24名奥赛金牌得主,他们大多年少成名;其中被录取的唯一一位理科女状元,高考裸分达到711。
成立以来,姚班已培养出375名本科生,平均每届30人左右。
近年姚班的生源有扩张趋势,其录取人数2012年为34人,2018、2019年分别达到了50和55人。
2019年,全国高考人数达到1031万人,清华大学的录取人数为3400余人,其中理工科考生占77.3%,文史类考生占8.9%。
按当年姚班录取55人计算,其在全国的录取比例达到0.05,也就是百万分之五,说他们是国内金字塔尖的人才一点也不为过。
目前人工智能在教育领域都有哪些实际应用?人工智能相关培训班开的风生水起。
这个是目前人工智能教育培训领域最多的。
人工智能相关推广硬件软件服务推广,也是人工智能教育领域最广的应用。
人工智能高价卖平板是个很好的领域。
教育中需要的人工智能到底是什么,目前没有什么实际有价值的应用。
比如,人工智能识别上课是不是认真听讲,这个是把学生当犯人了吧;人工智能根据喜好推荐课程,这个又是什么鬼,推荐的更是什么鬼,经过人工智能分析,发现推荐下载抖音app是最佳学习路径;人工智能,弄个小的机器人模型的电脑,放在教室里面就是人工智能了,这简直就是人工弱智。
人工智能,打着人工智能的牌子进教室,干着的都是人工弱智的买卖。
不仅是AI时代,就是现今时代我们已经看到教育模式已经跟不上市场的步伐,只是教育改革还需要一段时间,相信AI的到来一定会促进教育改革!学习方法远比学什么内容更重要。
尤其是在人机相互协作、各自发挥特长的时代里,填鸭式、机械式的学习只能把人教成机器,让孩子丧失人类独有的价值。
下面举例。
2013年,包括哈佛大学前校长在内的一群美国著名教育家联合创办了一所神秘的四年制本科大学——密涅瓦大学(Minerva Schools at KGI)。
第一年招生时,这家大学的录取率低于3%,远低于哈佛大学的8%~9%,是全美录取最严格的本科院校。
被密涅瓦大学录取的第一批学生,收到的录取“通知书”是一个精致的小木盒,木盒盒盖上用英文写着“好奇心”的字样,木盒内是一台定制的iPad电脑。
只要打开电脑,密涅瓦大学的创始人本·尼尔森(Ben Nelson)就会收到通知,并与学生进行一次视频通话,安排学生在旧金山开始四年的学业。
这么神秘的学校,这么低的录取率,这么有趣的新生报到流程,那么,密涅瓦大学到底有什么过人之处?密涅瓦大学的创始人相信,传统的四年制大学已经无法适应未来的需要,大学教育过程本身需要被改革甚至被颠覆,在线课程、讨论小组、实习实践、自我探索和自我完善将成为今后教育的主流模式。
鬲融:走在人工智能全球最前沿作者:来源:《北广人物》2019年第13期他自小聪颖,18岁保送清华计算机系,其后恰逢“姚班”创办,受教于图灵奖唯一华人得主姚期智教授,再后来求学于普林斯顿大学,2015年起成为杜克大学80后助理教授。
但就在最近,他有了更新更重要的荣誉:斯隆奖得主。
年仅32岁。
他就是鬲(ge)融,一个出自清华计算机系、代表姚班实力的传说。
新晋斯隆奖得主斯隆奖,1955年设立,由美国艾尔弗·斯隆基金会每年颁发一次,旨在向物理学、化学和数学领域的“早期職业科学家和学者提供支持和认可”。
后来陆续增加了神经科学、经济学、计算机科学以及计算和进化分子生物学。
但斯隆奖之所以全球瞩目,还因为历来有“诺奖风向标”的美誉。
比如“纳什均衡”的提出者约翰·纳什、知名物理学家理查德·费曼,都曾先有斯隆奖殊荣,后来加冕诺贝尔。
迄今为止,共计有47位该奖项获奖人获得了“诺贝尔奖”。
另有17位获奖人获得了“数学菲尔兹奖”,69位获奖人获得“美国国家科学奖章”,18位获得“约翰·贝茨·克拉克奖”。
而现在,生于中国河北唐山的年轻计算机科学家鬲融,跻身新晋斯隆奖得主。
由于他基于对深度学习中非凸优化的研究,鬲融获此殊荣。
这项研究实际也与当前人工智能领域最受关注的问题息息相关。
在采访中,鬲融介绍说:“现在机器学习大多使用深度学习算法,这些算法需要通过解决一些非凸优化问题来找到最优的神经网络参数。
理论上非凸优化在最坏情况下是非常困难的,但是实际上即使是非常简单的算法都表现很好。
我最近的工作对于一些简单的非凸优化问题给出了一些分析,可以证明所有的局部最优解都是全局最优解。
”更通俗来讲,鬲融的研究,也是揭秘神经网络的一部分,在“大力出奇迹”的神经网络带动AI狂飙突进后,业界都在尝试能打造更精准的神经网络。
鬲融的研究,走在人工智能全球Top竞技最前沿,并且已经受到权威奖项认可,未来绝对可期。
全球60家无人驾驶核心公司竞争力排行和解读(图表)来源:建约车评在人工智能技术的加持下,无人驾驶高速发展,正在改变人类的出行方式,进而会大规模改变相关行业格局。
基于这样的认识,产业大鳄、科技巨头和初创企业将无人驾驶技术视为变革的钥匙,聚集庞大的资金和聪明的人才,试图突破技术障碍,占据行业制高点。
在多年以前,也许谷歌一家公司即可代表整个无人驾驶行业,还有就是一些Level不高且工业化应用不广的ADAS技术。
时间进入2017年后,整个行业格局已发生巨变。
这种变化在拉斯维加斯的2017年的CES上一览无余。
这个全球最知名的消费电子展挤进去了将近500家与汽车相关的公司。
他们从全球各地聚集于此,试图告诉世人自己对无人驾驶的理解。
在过去的几个月,无人驾驶行业发生了很多疯狂的事情。
比如福特,付出了10亿美金购买一家什么都没有的无人驾驶初创公司——Argo.ai。
Uber在此之前给他做出了榜样,2016年它以6.8亿美金收购了前谷歌无人驾驶创始员工安东尼·莱万多斯基创立仅3个月的公司OTTO。
现在Uber陷入了一场与谷歌母公司alphabet的诉讼,后者正在起诉他和莱万多斯基剽窃了谷歌无人驾驶的知识产权。
无人驾驶工程师的工资也高的吓人。
据谷歌在诉讼中公布的资料显示,在过去的若干年时间内,他们一共支付了莱万多斯基1.2亿美金的薪水。
谷歌无人车创始人建立的培训公司优达学城发了大财,最终他们也按捺不住分拆出去了一家初创公司。
另外一个发生在中国的相同版本的故事是,百度无人驾驶部门的两位技术骨干:首席架构师彭军和T10工程师楼天城离职创立了一家叫作pony.ai的无人驾驶创业公司,ppt阶段的估值超过1亿美元。
中国最大的独角兽公司滴滴打车,在加州设立了一个AI办公室,然而他的窘境是挖不到好的无人驾驶工程师。
行业充满了泡沫和浮躁。
在如此的喧嚣中,车评君对产业进行梳理,找出有价值和有竞争力的企业,为从业者及相关人士提供参考。
如何管理好车队和司机广州南沙自贸区和海珠区生物岛、深圳南山区西丽,每天有约60辆的无人车在这三地奔跑着,它们头顶上顶着一个大大的车顶盒,形成了一道奇景。
白天黑夜,风雨无阻,无时无刻不在吸收着周围的一切信息。
这60辆车来自三家自动驾驶头部初创公司,Pony.ai(小马智行)、Roadtar.ai(星行)、JingChi.ai(景驰科技),它们拼凑出了中国第一代无人车队的雏形,正试图改变中国人未来的出行方式,以及背后的万亿市场。
上述三家公司对于未来的模式已经达成了共识,其创始人或高管在接受《21CBR》专访时均表示,未来最主要的商业模式是无人车队的运营就是无人驾驶版的滴滴。
届时,你可以用一个打车软件,叫到一辆没有司机的无人车来接你,送你去任何地方,同时车费可能比现在便宜一半。
如果你是女性乘客,更不用担心司机会给你带来危险。
有点科幻,有点遥远?不,这一切很大概率会在2022年发生。
无人车出行已经近在咫尺。
L4时代根据美国机动工程师协会(SAE)的定义,从司机完全掌控驾驶到完全自动驾驶,无人驾驶程度分为5个级别。
L4、L5级别的汽车可以实现自动驾驶,区别为L4需要在某种环境和条件下自动驾驶,而L5可以适应所有环境。
较为大众熟知的特斯拉的自动驾驶,属于L2-L3的级别。
Pony.ai、Roadtar.ai、JingChi.ai均为直接切入L4的全栈解决方案公司,即提供除了车本身之外的软件和硬件系统,应用场景为人们的日常城市交通出行。
目前,还有一类L4级别的初创公司为解决特定场景下的应用,如园区物流、社区通勤等等。
目前自动驾驶领域至少有3种不同的解决方案:一是以谷歌为代表的激光雷达为主的解决方案,二是以和Cruie为代表的多传感器融合的解决方案,三是以视觉(摄像头)为主的解决方案。
上述三家初创公司中,Roadtar.ai是对外界披露技术最多的公司,它成立于2022年5月,公司三位联合创始人佟显乔(CEO)、衡量(CTO)、周光(首席机器人专家)曾供职于谷歌、苹果、特斯拉、英伟达、百度等公司,拥有丰富的自动驾驶经验。
奔涌吧,后浪!作者:郭天琦郭慧杰来源:《作文成功之路·高考冲刺》2020年第07期后浪那些口口声声“一代不如一代”的人应该看看你们就像我一样我看着你们满怀羡慕人类积攒了几千年的财富所有的知识、见识、智慧和艺术像是专门为你们准备的礼物科技繁荣文化繁茂城市繁华现代文明的成果被层层打开可以尽情享用自由学习一门语言一门手艺欣赏一部电影去遥远的地方旅行从小你们就在自由探索自己的兴趣很多人在童年就进入了不惑之年不惑于自己喜欢什么不喜欢什么人与人之间的壁垒被打破你们只凭相同的爱好就能结交千万个值得干杯的朋友你们拥有了我们曾经梦寐以求的权利选择的权利你所热爱的就是你的生活你们有幸遇见这样的时代但时代更有幸遇见这样的你们我看着你们满怀敬意向你们的专业态度致敬你们正在把传统的变成现代的把经典的变成流行的把学术的变成大众的把民族的变成世界的你们把自己的热爱变成了一个和成千上万的人分享快乐的事业向你们的自信致敬弱小的人才习惯嘲讽和否定而内心强大的人从不吝啬赞美和鼓励向你们的大气致敬小人同而不和君子美美与共和而不同年轻的身体容得下更多元的文化审美和价值观有一天我终于发现不只是我们在教你们如何生活你们也在启发我们怎样去更好地生活那些抱怨“一代不如一代的人”应该看看你们就像我一样我看着你们满怀感激因为你们这个世界会更喜欢中国因为一个国家最好看的风景就是这个国家的年轻人因为你们这世上的小说电影音乐中表现的青春不再是忧伤迷茫而是善良勇敢无私无所畏惧是心里有火眼里有光五四青年节之际,Bilibili发布了一个“献给新一代的演讲”——《后浪》,犹如给青年们的一封信,激荡起青春之声。
“所有的知识、见识、智慧和艺术,像是专门为你们准备的礼物”“从小你们就在自由探索自己的兴趣”“年轻的身体,容得下更多元的文化、审美和价值观”……这是最好的时代,这也是最好的青春。
时代的馈赠、个人的探索,汇聚成青春的蓬勃、生命的丰盛。
一次与青年的对话,让人沉思青春的价值、成长的意义。
ACRUSH-楼天成百度之星答题源码初赛一#include <stdio.h>#include <stdlib.h>#include <string.h>#define _MAXL 2000000void GetN(char *s,long long &N){N=0;for (int i=0;s[i];i++)N=N*10+(s[i]-48);}void print_bigint(long long n){if (n>=10)print_bigint(n/10);printf("%d",int(n%10));}void Solve(long long N){bool find_answer=false;long long L,T,A1,k;for (L=2;L<=_MAXL && L*(L-1)/2<N;L++);for (L--;L>=2;L--){T=L*(L-1)/2;if (N>T && (N-T)%L==0){find_answer=true;A1=(N-T)/L;for (k=0;k<L;k++){if (k>0)printf(" ");print_bigint(A1+k); }printf("\n");}}if (!find_answer)printf("NONE\n");}int main(int argc,char *arg[]) {long long N;GetN(arg[1],N);Solve(N);return 0;}初赛二#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>//bufconst int bufsize=128*1024;int bufL,bufP;char buf[bufsize];//segmentsconst int maxn=1000005;int n;unsigned int A[maxn],B[maxn];//sortconst int countsize=65536;int arcA[maxn],arcB[maxn],turnB[maxn]; int count[countsize],tmp[maxn];//solveunsigned int maxB[maxn],maxL[maxn];void swap(unsigned int &a,unsigned int &b) {unsigned int t=a;a=b;b=t;}char readchar(){if (bufL==bufP){bufL=read(0,buf,bufsize);if (bufL==0)return 0;bufP=0;}return buf[bufP++];}bool readnumber(unsigned int &v){char c;do{c=readchar();if (c==0)return false;}while (c<'0' || c>'9');for (v=0;c>='0' && c<='9';c=readchar())v=v*10+(c-48);return true;}void init(){bufL=bufP=0;for (n=0;readnumber(A[n+1]) && readnumber(B[n+1]);) {n++;if (A[n]>B[n])}}void count_sort(unsigned int A[],int arc[]) {int i;//lower bitmemset(count,0,sizeof(count));for (i=1;i<=n;i++)count[A[i]&65535]++;for (i=1;i<countsize;i++)count[i]+=count[i-1];for (i=n;i>=1;i--)tmp[count[A[i]&65535]--]=i;//higher bitmemset(count,0,sizeof(count));for (i=1;i<=n;i++)count[A[i]>>16]++;for (i=1;i<countsize;i++)count[i]+=count[i-1];for (i=n;i>=1;i--)arc[tmp[i]]=(count[A[tmp[i]]>>16]--); }void preprocess(){count_sort(A,arcA);count_sort(B,arcB);for (int i=1;i<=n;i++)}void checkmax(double &answer,unsigned int S,unsigned int T) {if (S>T)return;double t=double(T)-double(S)+1;if (t>answer)answer=t;}#define lowbit(n) (((n)^((n)-1))&(n))void add_maxB(int i,unsigned int v){for (;i<=n;i+=lowbit(i))if (v>maxB[i])maxB[i]=v;}void add_maxL(int i,unsigned int v){i=n+1-i;for (;i<=n;i+=lowbit(i))if (v>maxL[i])maxL[i]=v;}unsigned int get_maxB(int i){unsigned int t=0;for (;i>0;i-=lowbit(i))if (maxB[i]>t)t=maxB[i];return t;}unsigned int get_maxL(int i){i=n+1-i;unsigned int t=0;for (;i>0;i-=lowbit(i))if (maxL[i]>t)t=maxL[i];return t;}void solve(){double answer=0;memset(maxB,0,sizeof(maxB));memset(maxL,0,sizeof(maxL));for (int T=1;T<=n;T++){int i=turnB[T],LA=arcA[i];checkmax(answer,A[i],get_maxB(LA)); checkmax(answer,1 ,get_maxL(LA)); add_maxB(LA,B[i]);add_maxL(LA,B[i]-A[i]+1);}printf("%0.0lf\n",answer);}{freopen("input.txt","r",stdin); init();preprocess();solve();return 0;}初赛三:#include <stdio.h>#include <string.h>#include <unistd.h>//bufconst int bufsize=128*1024;int bufL,bufP;char buf[bufsize];char readchar(){if (bufL==bufP){bufL=read(0,buf,bufsize);if (bufL==0)return 0;}return buf[bufP++];}//dataconst int max_strlen=512*1024;const int hashsize=30011;struct THashPoint{char *s1,*s2;THashPoint *next;};char lines[max_strlen],*s1,*s2;FILE *f;THashPoint *Hash[hashsize];bool read_str(){lines[0]=0;fgets(lines,max_strlen,f);if (strlen(lines)>0 && lines[strlen(lines)-1]=='\n') lines[strlen(lines)-1]=0;if (strlen(lines)<3)return false;for (int i=0;lines[i];i++)if (lines[i]==' ' || lines[i]=='\t'){s1=lines;s2=lines+i+1;lines[i]=0;return true;}return false;}int HashTable_function(char *s){int address=strlen(s)%hashsize;for (int i=0;s[i];i++)address=(address*107+s[i]+128)%hashsize; return address;}void HashTable_Insert(){int address=HashTable_function(s1);THashPoint *p;for (p=Hash[address];p!=NULL;p=p->next)if (strcmp(p->s1,s1)==0){p->s2=new char[strlen(s2)+1];strcpy(p->s2,s2);return;}p=new THashPoint;p->s1=new char[strlen(s1)+1];p->s2=new char[strlen(s2)+1];strcpy(p->s1,s1);strcpy(p->s2,s2);p->next=Hash[address];Hash[address]=p;}void Print(char *s){int address=HashTable_function(s);THashPoint *p;for (p=Hash[address];p!=NULL;p=p->next) if (strcmp(p->s1,s1)==0){printf("%s",p->s2);return;}printf("%s",s);}void Init_HashTable(){f=fopen("dict.txt","r");while (read_str())HashTable_Insert();fclose(f);}int main(){Init_HashTable();//Mainfreopen("text.txt","r",stdin); bufL=bufP=0;int L=0;for (char c;(c=readchar())!=0;)if (c==' ' || c=='\t' || c=='\n'){lines[L]=0;Print(lines);printf("%c",c);L=0;}elselines[L++]=c;lines[L]=0;Print(lines);return 0;}初赛四:#include <stdio.h>#include <string.h>#include <unistd.h>const int bufsize=128*1024;int bufL;char buf[bufsize];struct THashPoint{char *s;int c;THashPoint *next;};int MemoryID=0; THashPoint **Hash,*Memory;char *text;int L,HashSize,minC;void ReadFile(){text=new char[bufsize+5]; L=0;int textL=bufsize+5;while (1){bufL=read(0,buf,bufsize);if (bufL==0)break;while (L+bufL>=textL){char *t_text=text;textL*=2;text=new char[textL];memcpy(text,t_text,L);}memcpy(text+L,buf,bufL);L+=bufL;}text[L]=0;}bool Prime(int n){for (int i=2;i*i<=n;i++)if (n%i==0)return false;return true;}void Prepare(){int N=0,i;for (i=0;i<L;i++)if (text[i]==' ' || text[i]=='\t' || text[i]=='\n')text[i]=0;for (i=0;i<L;i++)if ((i==0 || text[i-1]==0) && text[i]!=0)N++;for (HashSize=N*2+10;!Prime(HashSize);HashSize++); Hash=new THashPoint* [HashSize];for (i=0;i<HashSize;i++)Hash[i]=NULL;MemoryID=0;Memory=new THashPoint[N+10];}int HashTable_function(char *s){int address=strlen(s)%HashSize;for (int i=0;s[i];i++)address=(address*137+s[i]+128)%HashSize; return address;}void HashTable_Insert(char *s){int address=HashTable_function(s);THashPoint *p;for (p=Hash[address];p!=NULL;p=p->next)if (strcmp(p->s,s)==0){p->c++;return;}p=&Memory[MemoryID++];p->s=s;p->c=1;p->next=Hash[address];Hash[address]=p;}bool Print(char *s){int address=HashTable_function(s);THashPoint *p;for (p=Hash[address];p!=NULL;p=p->next)if (strcmp(p->s,s)==0 && p->c==minC)return false;return true;}void Solve(){int i;for (i=0;i<L;i++)if ((i==0 || text[i-1]==0) && text[i]!=0)HashTable_Insert(text+i);minC=2000000000;for (i=0;i<MemoryID;i++)if (Memory[i].c<minC)minC=Memory[i].c;bool first=true;for (i=0;i<L;i++)if ((i==0 || text[i-1]==0) && text[i]!=0 && Print(text+i)) {if (!first)printf(" ");first=false;printf("%s",text+i);}}int main(){freopen("corpus.txt","r",stdin);ReadFile();Prepare();Solve();return 0;}网上决赛一:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>const int maxn2=100000+5;const int maxn=5000+5;const int max_outputL=10000000; const int oo=1000000000;//bufconst int bufsize=256*1024;int bufL,bufP;char buf[bufsize];char *bufp;//输入图int n2,indexID[maxn2],indexP[maxn2];int deg2[maxn2],*G2[maxn2],*W2[maxn2];//并查集int father[maxn2],sortlist[maxn2];//新建图int n,listM[maxn],G[maxn][maxn],tG[maxn][maxn]; //输出int outputL=0;char outputs[max_outputL];//最小树形图int prev[maxn],tmpG[maxn];bool saved[maxn],incycle[maxn];//深度优先搜索int DFS_count;bool DFS_vis[maxn];//输入数据函数char readchar(){if (bufL==bufP){bufL=read(0,buf,bufsize);if (bufL==0)return 0;bufP=0;}return buf[bufP++];}bool Valid(char c){return (c!=' ') && (c!='\t') && (c!='\n') && (c!=0); }bool ReadString(char *s){while (1){if (*bufp==0)return false;if (Valid(*bufp))break;bufp++;}int L=0;for (;Valid(*bufp);bufp++)s[L++]=*bufp;s[L]=0;return true;}void ReadLine(){char c;while (1){int L=0;while (1){c=readchar();if (c=='\n' || c==0)break;outputs[L++]=c;}outputs[L]=0;if (L>=2)break;}}//输出数据函数void push_char(char c){outputs[outputL++]=c;}void write(int v){if (v>=10)write(v/10);push_char('0'+v%10);}//并查集函数int getfather(int v){return (father[v]==0)?v:(father[v]=getfather(father[v])); }void merge(int i,int j){i=getfather(i);j=getfather(j);if (i<j)father[j]=i;if (j<i)father[i]=j;}void ReadData(){int i,j,v,k;char s[100];ReadLine();bufp=outputs;ReadString(s);for (n2=0;ReadString(s);){sscanf(s,"%d",&v);indexID[++n2]=v;}int maxd=0;for (i=1;i<=n2;i++){ReadLine();bufp=outputs;ReadString(s);sscanf(s,"%d",&v);for (k=1;indexID[k]!=v;k++);//calc deg[k]deg2[k]=0;for (;ReadString(s);){if (s[0]=='/')continue;sscanf(s,"%d",&v);if (v>0)deg2[k]++;}if (deg2[k]>maxd)maxd=deg2[k];G2[k]=new int[deg2[k]+5]; W2[k]=new int[deg2[k]+5];//read againbufp=outputs;ReadString(s);deg2[k]=0;for (j=1;j<=n2;j++){ReadString(s);if (s[0]=='/')continue;sscanf(s,"%d",&v);if (v>0){G2[k][++deg2[k]]=j; W2[k][deg2[k]]=v;}}}}void DFS(int v){if (DFS_vis[v])return;DFS_vis[v]=true;DFS_count++;for (int i=1;i<=n;i++)if (G[v][i]<oo)DFS(i);}bool process(){if (n==1){write(listM[1]);push_char(' ');write(0);push_char('\n');return true;}int i,j,u,v;int answer=oo,total;for (int srcp=1;srcp<=n;srcp++) {for (u=1;u<=n;u++)for (v=1;v<=n;v++)G[u][v]=tG[u][v];DFS_count=0;for (i=1;i<=n;i++)DFS_vis[i]=false;DFS(srcp);if (DFS_count<n)continue;total=oo;for (i=1;i<=n;i++)if (G[i][srcp]<total)total=G[i][srcp];if (total==oo)continue;for (i=1;i<=n;i++){prev[i]=0;saved[i]=true;}while (1){int minCost=oo;for (i=1;i<=n;i++) if(i!=srcp && prev[i]==0 && saved[i])for (j=1;j<=n;j++) if (saved[j])if (G[j][i]<minCost){minCost=G[j][i];u=j;}if (minCost==oo)break;total+=minCost;//insert edge (u,v)prev[v]=u;for (i=u;prev[i]!=0 && i!=v;i=prev[i]);if (prev[i]==0)continue;//cyclefor (i=1;i<=n;i++)incycle[i]=false;incycle[v]=true;for (i=u;i!=v;i=prev[i])incycle[i]=true;for (i=1;i<=n;i++)tmpG[i]=oo;for (i=1;i<=n;i++) if (saved[i] && !incycle[i])for (j=1;j<=n;j++) if (saved[j] && incycle[j]) {if (G[j][i]<G[v][i])G[v][i]=G[j][i];if (G[i][j]<oo){int t=G[i][j]-G[prev[j]][j];if (t<tmpG[i])tmpG[i]=t;}for (i=1;i<=n;i++) if (saved[i] && !incycle[i])if (prev[i]>0 && incycle[prev[i]])prev[i]=v;prev[v]=0;for (i=u;i!=v;i=prev[i])saved[i]=false;for (i=1;i<=n;i++)G[i][v]=tmpG[i];}if (total<answer)answer=total;}if (answer==oo)return false;for (i=1;i<=n;i++){write(listM[i]);push_char(' ');}write(answer);push_char('\n');return true;}int qsort_comp(const void *p1,const void *p2) {int t1=*(int *)p1,t2=*(int *)p2;if (getfather(t1)!=getfather(t2))return getfather(t1)-getfather(t2);return t1-t2;}void solve(){int i,j,u,v;memset(father,0,sizeof(father));for (i=1;i<=n2;i++)for (j=1;j<=deg2[i];j++)merge(i,G2[i][j]);for (i=1;i<=n2;i++)sortlist[i]=i;qsort(sortlist+1,n2,sizeof(int),qsort_comp);for (i=1;i<=n2;i=j)if (father[sortlist[i]]==0){for (j=i;j<=n2 && getfather(sortlist[i])==getfather(sortlist[j]);j++); n=j-i;if (n>maxn-5){printf("NONE\n");return;}for (v=i;v<j;v++){listM[v-i+1]=indexID[sortlist[v]];indexP[sortlist[v]]=v-i+1;}for (u=1;u<=n;u++)for (v=1;v<=n;v++)tG[u][v]=oo;for (u=i;u<j;u++)for (v=1;v<=deg2[sortlist[u]];v++)tG[indexP[sortlist[u]]][indexP[G2[sortlist[u]][v]]]=W2[sortlist[u]][v];if (!process()){printf("NONE\n");return;}}outputs[outputL]=0;printf("%s",outputs);}int main(){freopen("sites.txt","r",stdin);bufP=bufL=0;ReadData();solve();return 0;}网上决赛二:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>const char *rules_filename="rules.txt"; const char *facts_filename="facts.txt"; const int hashsize=1000007;const int maxm=100000+5;const int maxn=1000000+5;const int bufsize=256*1024;//读入int bufL,bufP;char buf[bufsize];char str[1000000];//读入函数char readchar(){if (bufL==bufP){bufL=read(0,buf,bufsize);bufP=0;if (bufL==0)return 0;}return buf[bufP++];}bool valid(char c){return (c!=0 && c!='\t' && c!='\n' && c!=' ' && c!='&' && c!='-' && c!='>'); }bool readstring(char *s){int L=0;char c;do{c=readchar();if (c==0)return false;if (L==0 && c=='>')s[L++]=c;}while (!valid©);for (;valid©;c=readchar())s[L++]=c;s[L]=0;return true;}//目标变量int goal;//规则集合struct TRule{char *rule_name;int n,*C,A;};int m;TRule Rules[maxm];int _n,_C[1000000];int left[maxm],nlist,list[maxm];//命题集合struct Tpoint{int v;Tpoint *next;};int n;bool fact[maxn],need_prove[maxn],org_fact[maxn]; Tpoint *Appear[maxn];//HashTable,用于保存(命题名)->(int)的映射struct THashTable{char *var;int id;THashTable *next;};THashTable *Hash[hashsize];int find(char *s){int L=strlen(s);int address=L;for (int i=0;s[i];i++)address=(address*101+s[i])%hashsize;THashTable *p;for (p=Hash[address];p!=NULL;p=p->next) if (strcmp(p->var,s)==0)return p->id;p=new THashTable;p->next=Hash[address];Hash[address]=p;p->var=new char[L+2];strcpy(p->var,s);p->id=(++n);return n;}void insert_Point(int v,int pp){Tpoint *p=new Tpoint;p->v=pp;p->next=Appear[v];Appear[v]=p;}void read_rules(){m=0;while (1){if (!readstring(str))return;m++;Rules[m].rule_name=new char[strlen(str)+2]; strcpy(Rules[m].rule_name,str);_n=0;while (1){readstring(str);if (str[0]=='>'){Rules[m].A=find(str+1);break;}else_C[++_n]=find(str);}Rules[m].C=new int[_n+2];Rules[m].n=_n;for (int k=1;k<=_n;k++){Rules[m].C[k]=_C[k];insert_Point(_C[k],m);}}}void read_facts(){memset(fact,false,sizeof(fact));FILE *f=fopen(facts_filename,"r");while (fscanf(f,"%s",&str)!=-1)fact[find(str)]=true;fclose(f);}void TPsort(){int i,j,k;Tpoint *p;nlist=0;for (i=1;i<=m;i++){left[i]=0;for (j=1;j<=Rules[i].n;j++)if (!fact[Rules[i].C[j]])left[i]++;if (left[i]==0)list[++nlist]=i;}for (i=1;i<=nlist;i++){k=Rules[list[i]].A;if (fact[k])continue;fact[k]=true;for (p=Appear[k];p!=NULL;p=p->next) {left[p->v]--;if (left[p->v]==0)list[++nlist]=p->v;}}}void solve_data(){for (int i=1;i<=nlist;i++){printf(" %s",Rules[list[i]].rule_name);if (Rules[list[i]].A==goal)break;}printf("\n");}void solve_goal(){int i,k;memset(need_prove,false,sizeof(need_prove));need_prove[goal]=true;for (i=1;i<=nlist;i++)if (Rules[list[i]].A==goal)break;for (;i>0;i--)if (need_prove[Rules[list[i]].A] && !org_fact[Rules[list[i]].A]) {printf(" %s",Rules[list[i]].rule_name);for (k=1;k<=Rules[list[i]].n;k++)need_prove[Rules[list[i]].C[k]]=true; }printf("\n");}int main(int argc,char *arg[]){if (argc!=3){printf("Argument Error!\n");return 0;}freopen(rules_filename,"r",stdin);bufP=bufL=n=0;memset(Hash,0,sizeof(Hash));memset(Appear,0,sizeof(Appear));goal=find(arg[2]);read_rules();read_facts();memcpy(org_fact,fact,sizeof(fact));if (fact[goal]){printf("TRUE %s\n",arg[1]);return 0;}TPsort();if (!fact[goal])printf("UNCERTAIN\n");else{printf("TRUE %s",arg[1]);if (strcmp(arg[1],"data")==0)solve_data();elsesolve_goal();}return 0;}总决赛:#include <stdio.h>#include <stdlib.h>#include <string.h>const int hashsize=70001;const int maxnode=50000;const int maxp=40;const int ten[]={1,10,100,1000,10000,100000,1000000,10000000,100000000};const int C[]={2,3,2,3,4,3,2,3,2};const int EP[][4]={{1,3,0,0},{0,2,4,0},{1,5,0,0},{0,4,6,0},{1,3,5,7},{2,4,8,0},{3,7,0,0},{4, 6,8,0},{5,7,0,0}};struct Tlist{int data,d;Tlist *next;};struct Thashpoint{int data;Thashpoint *next;};//Memoryint ID;Tlist listM[maxnode],*q;Thashpoint hashM[maxnode],*p;//dataint src,dest;//heapTlist *head[maxp],*expand[maxp],*lp1,*lp2;//HashThashpoint *hash[hashsize];//expandint nowp,A[9],arcT[9],dist[9][9],b,depth,swap[9][9]; int data,G,newdata,newG;bool find_answer;void readdata(const char *filename,int &data) {int i,v;FILE *f=fopen(filename,"r");data=0;for (i=0;i<9;i++){fscanf(f,"%d",&v);data=data+v*ten[i];}fclose(f);}bool check_noanswer(){int p[9],i,b1,b2;bool vis[9];for (i=0;i<9;i++)p[i]=arcT[src/ten[i]%10];for (b1=0; src/ten[b1]%10!=0;b1++); for (b2=0;dest/ten[b2]%10!=0;b2++); int countP=0;memset(vis,false,sizeof(vis));for (i=0;i<9;i++)if (!vis[i]){countP++;for (int k=i;!vis[k];k=p[k])vis[k]=true;}return (countP-dist[b1][b2])%2==0; }void preprocess(){ID=0;find_answer=false;memset(hash,0,sizeof(hash));memset(head,0,sizeof(head));memset(expand,0,sizeof(expand));for (int k=0;k<9;k++)arcT[dest/ten[k]%10]=k;for (int u=0;u<9;u++)for (int v=0;v<9;v++){dist[u][v]=abs(u/3-v/3)+abs(u%3-v%3); swap[u][v]=ten[u]-ten[v];}}void addnode(){if (newdata==dest){printf("%d\n",depth);find_answer=true;return;}int address=newdata%hashsize;for (p=hash[address];p!=NULL;p=p->next)if (p->data==newdata)return;if (I D==maxnode)return;p=&hashM[ID];p->data=newdata;p->next=hash[address];hash[address]=p;q=&listM[ID];ID++;q->data=newdata;q->d=depth;if (newG>=maxp)return;if (newG==nowp){q->next=expand[depth]; expand[depth]=q;}else{q->next=head[newG]; head[newG]=q;}}void solve(){nowp=-1;newdata=src;newG=0;for (int k=0;k<9;k++)if (src/ten[k]%10!=0)newG+=dist[arcT[src/ten[k]%10]][k];depth=0;addnode();if (find_answer)return;for (int p=0;p<maxp;p++) if (head[p]!=NULL) {nowp=p;for (lp1=head[p];lp1!=NULL;lp1=lp2){lp2=lp1->next;lp1->next=expand[lp1->d];expand[lp1->d]=lp1;}for (int d=0;d<=p;d++)for (;expand[d]!=NULL;){data=expand[d]->data;G=p-expand[d]->d;depth=expand[d]->d+1;expand[d]->d=-2;expand[d]=expand[d]->next;for (b=0;data/ten[b]%10!=0;b++);for (int v=0;v<C[b];v++){int u=EP[b][v];int c=data/ten[u]%10;newdata=data+swap[b][u]*c;c=arcT[c];newG=depth+G-dist[c][u]+dist[c][b]; addnode();if (find_answer)return;}}}printf("-1\n");}int main(){readdata("start.txt",src);readdata("goal.txt",dest);preprocess();if (check_noanswer())printf("-1\n");elsesolve();return 0;}。