ACM题目,难住我好几天了~重金跪谢

作者&投稿:彤堵 (若有异议请与网页底部的电邮联系)
ACM要怎么搞?~

一、语言是最重要的基本功
无论侧重于什么方面,只要是通过计算机程序去最终实现的竞赛,语言都是大家要过的第一道关。亚洲赛区的比赛支持的语言包括C/C++与JAVA。笔者首先说说JAVA,众所周知,作为面向对象的王牌语言,JAVA在大型工程的组织与安全性方面有着自己独特的优势,但是对于信息学比赛的具体场合,JAVA则显得不那么合适,它对于输入输出流的操作相比于C++要繁杂很多,更为重要的是JAVA程序的运行速度要比C++慢10倍以上,而竞赛中对于JAVA程序的运行时限却往往得不到同等比例的放宽,这无疑对算法设计提出了更高的要求,是相当不利的。其实,笔者并不主张大家在这种场合过多地运用面向对象的程序设计思维,因为对于小程序来说这不旦需要花费更多的时间去编写代码,也会降低程序的执行效率。
接着说C和C++。许多现在参加讲座的同学还在上大一,C的基础知识刚刚学完,还没有接触过C++,其实在赛场上使用纯C的选手还是大有人在的,它们主要是看重了纯C在效率上的优势,所以这部分同学如果时间有限,并不需要急着去学习新的语言,只要提高了自己在算法设计上的造诣,纯C一样能发挥巨大的威力。
而C++相对于C,在输入输出流上的封装大大方便了我们的操作,同时降低了出错的可能性,并且能够很好地实现标准流与文件流的切换,方便了调试的工作。如果有些同学比较在意这点,可以尝试C和C++的混编,毕竟仅仅学习C++的流操作还是不花什么时间的。
C++的另一个支持来源于标准模版库(STL),库中提供的对于基本数据结构的统一接口操作和基本算法的实现可以缩减我们编写代码的长度,这可以节省一些时间。但是,与此相对的,使用STL要在效率上做出一些牺牲,对于输入规模很大的题目,有时候必须放弃STL,这意味着我们不能存在“有了STL就可以不去管基本算法的实现”的想法;另外,熟练和恰当地使用STL必须经过一定时间的积累,准确地了解各种操作的时间复杂度,切忌对STL中不熟悉的部分滥用,因为这其中蕴涵着许多初学者不易发现的陷阱。
通过以上的分析,我们可以看出仅就信息学竞赛而言,对语言的掌握并不要求十分全面,但是对于经常用到的部分,必须十分熟练,不允许有半点不清楚的地方,下面我举个真实的例子来说明这个道理——即使是一点很细微的语言障碍,都有可能酿成错误:
在去年清华的赛区上,有一个队在做F题的时候使用了cout和printf的混合输出,由于一个带缓冲一个不带,所以输出一长就混乱了。只是因为当时judge team中负责F题的人眼睛尖,看出答案没错只是顺序不对(答案有一页多,是所有题目中最长的一个输出),又看了看程序发现只是输出问题就给了个Presentation error(格式错)。如果审题的人不是这样而是直接给一个 Wrong Answer,相信这个队是很难查到自己错在什么地方的。
现在我们转入第二个方面的讨论,基础学科知识的积累。
二、以数学为主的基础知识十分重要
虽然被定性为程序设计竞赛,但是参赛选手所遇到的问题更多的是没有解决问题的思路,而不是有了思路却死活不能实现,这就是平时积累的基础知识不够。今年World Final的总冠军是波兰华沙大学,其成员出自于数学系而非计算机系,这就是一个鲜活的例子。竞赛中对于基础学科的涉及主要集中于数学,此外对于物理、电路等等也可能有一定应用,但是不多。因此,大一的同学也不必为自己还没学数据结构而感到不知从何入手提高,把数学捡起来吧!下面我来谈谈在竞赛中应用的数学的主要分支。
1、离散数学——作为计算机学科的基础,离散数学是竞赛中涉及最多的数学分支,其重中之重又在于图论和组合数学,尤其是图论。
图论之所以运用最多是因为它的变化最多,而且可以轻易地结合基本数据结构和许多算法的基本思想,较多用到的知识包括连通性判断、DFS和BFS,关节点和关键路径、欧拉回路、最小生成树、最短路径、二部图匹配和网络流等等。虽然这部分的比重很大,但是往往也是竞赛中的难题所在,如果有初学者对于这部分的某些具体内容暂时感到力不从心,也不必着急,可以慢慢积累。
竞赛中设计的组合计数问题大都需要用组合数学来解决,组合数学中的知识相比于图论要简单一些,很多知识对于小学上过奥校的同学来说已经十分熟悉,但是也有一些部分需要先对代数结构中的群论有初步了解才能进行学习。组合数学在竞赛中很少以难题的形式出现,但是如果积累不够,任何一道这方面的题目却都有可能成为难题。
2、数论——以素数判断和同余为模型构造出来的题目往往需要较多的数论知识来解决,这部分在竞赛中的比重并不大,但只要来上一道,也足以使知识不足的人冥思苦想上一阵时间。素数判断和同余最常见的是在以密码学为背景的题目中出现,在运用密码学常识确定大概的过程之后,核心算法往往要涉及数论的内容。
3、计算几何——计算几何相比于其它部分来说是比较独立的,就是说它和其它的知识点很少有过多的结合,较常用到的部分包括——线段相交的判断、多边形面积的计算、内点外点的判断、凸包等等。计算几何的题目难度不会很大,但也永远不会成为最弱的题。
4、线性代数——对线性代数的应用都是围绕矩阵展开的,一些表面上是模拟的题目往往可以借助于矩阵来找到更好的算法。
5、概率论——竞赛是以黑箱来判卷的,这就是说你几乎不能动使用概率算法的念头,但这也并不是说概率就没有用。关于这一点,只有通过一定的练习才能体会。
6、初等数学与解析几何——这主要就是中学的知识了,用的不多,但是至少比高等数学多,我觉得熟悉一下数学手册上的相关内容,至少要知道在哪儿能查到,还是必要的。
7、高等数学——纯粹运用高等数学来解决的题目我接触的只有一道,但是一些题目的叙述背景往往需要和这部分有一定联系,掌握得牢固一些总归没有坏处。
以上就是竞赛所涉及的数学领域,可以说范围是相当广的。我认识的许多人去搞信息学的竞赛就是为了逼着自己多学一点数学,因为数学是一切一切的基础。


三、数据结构与算法是真正的核心
虽然数学十分十分重要,但是如果让三个只会数学的人参加比赛,我相信多数情况下会比三个只会数据结构与算法的人得到更为悲惨的结局。
先说说数据结构。掌握队列、堆栈和图的基本表达与操作是必需的,至于树,我个人觉得需要建树的问题有但是并不多。(但是树往往是很重要的分析工具)除此之外,排序和查找并不需要对所有方式都能很熟练的掌握,但你必须保证自己对于各种情况都有一个在时间复杂度上满足最低要求的解决方案。说到时间复杂度,就又该说说哈希表了,竞赛时对时间的限制远远多于对空间的限制,这要求大家尽快掌握“以空间换时间”的原则策略,能用哈希表来存储的数据一定不要到时候再去查找,如果实在不能建哈希表,再看看能否建二叉查找树等等——这都是争取时间的策略,掌握这些技巧需要大家对数据结构尤其是算法复杂度有比较全面的理性和感性认识。
接着说说算法。算法中最基本和常用的是搜索,主要是回溯和分支限界法的使用。这里要说的是,有些初学者在学习这些搜索基本算法是不太注意剪枝,这是十分不可取的,因为所有搜索的题目给你的测试用例都不会有很大的规模,你往往察觉不出程序运行的时间问题,但是真正的测试数据一定能过滤出那些没有剪枝的算法。实际上参赛选手基本上都会使用常用的搜索算法,题目的区分度往往就是建立在诸如剪枝之类的优化上了。
常用算法中的另一类是以“相似或相同子问题”为核心的,包括递推、递归、贪心法和动态规划。这其中比较难于掌握的就是动态规划,如何抽象出重复的子问题是很多题目的难点所在,笔者建议初学者仔细理解图论中一些以动态规划为基本思想所建立起来的基本算法(比如Floyd-Warshall算法),并且多阅读一些定理的证明,这虽然不能有什么直接的帮助,但是长期坚持就会对思维很有帮助。

四、团队配合
通过以上的介绍大家也可以看出,信息学竞赛对于知识面覆盖的非常广,想凭一己之力全部消化这些东西实在是相当困难的,这就要求我们尽可能地发挥团队协作的精神。同组成员之间的熟练配合和默契的形成需要时间,具体的情况因成员的组成不同而不同,这里我就不再多说了。
五、练习、练习、再练习
知识的积累固然重要,但是信息学终究不是看出来的,而是练出来的,这是多少前人最深的一点体会,只有通过具体题目的分析和实践,才能真正掌握数学的使用和算法的应用,并在不断的练习中增加编程经验和技巧,提高对时间复杂度的感性认识,优化时间的分配,加强团队的配合。总之,在这里光有纸上谈兵是绝对不行的,必须要通过实战来锻炼自己。
大家一定要问,我们去哪里找题做,又如何检验程序是否正确呢?这大可不必担心,现在已经有了很多网上做题的站点,这些站点提供了大量的题库并支持在线判卷,你只需要把程序源码提交上去,马上就可以知道自己的程序是否正确,运行所使用的时间以及消耗的内存等等状况。下面我给大家推荐几个站点,笔者不建议大家在所有这些站点上做题,选择一个就可以了,因为每个站点的题都有一定的难易比例,系统地做一套题库可以使你对各种难度、各种类型的题都有所认识。

转一篇文章吧:
LHH的acm奋斗史,至强的精神(转载)

题解:还记得2年前的一个晚上,我和一个女孩一起写完了这篇文章。写完后,她哭了,我笑了。然后,她走了,我哭了。2年后,我又找到她,这次,我没有让她走掉,她成了我的新娘。

不知道什么时候,开始知道ACM;也不知道什么时候,开始喜欢上ACM。但是,我知道,我喜欢上了,而且不会后悔。我是大一的时候进的学校ACM队,那个时候,一切都是冰冷的,华东理工大学,在别人的眼里,只是每次给别人垫底的学校,次次如此。
但是,我们不甘心,我们从不甘心,当我们主力队员中的一个,一个月拼命集训,瘦了很多的时候,突然,我有一种哭的冲动。我问他,为什么?他告诉我:我喜欢ACM。也许是个傻傻的理由,但是就是这句话让我一直留在了这里,并且为了这个梦奋斗着。
也许是天资的原因,第一次,我们失败了,彻底的失败了,在上海输的好惨,也使得我们第二年的经费雪上加霜。曾经的梦想,曾经的努力,似乎在一刹那间被否定了。也就在那个时候,有人说了一句:我们只有大一,我们的路还长,于是,我就坚持了下来。
现在看看大一时候的我们,真的是什么都不会的一些人。
到了大二,我们更加努力的集训,在北京之前,我们第一次尝试了全天集训的滋味。30天90袋跑面20袋咸菜,每天4个小时的睡眠。当时我觉得我们一定会崩溃的,当我每次快要崩溃的时候,总会记起当时我们的话:“我们才大一,我们喜欢ACM,我们还有的拼,我们能拼。”于是,就奇迹一样的继续做题。
现在想起来,那真的是个奇迹,LIANG HH居然可以一个月只在床上躺了6个晚上,平均每天睡2个小时。
就这样,我们在北京的时候,绝对意外的拿了第5名的成绩,当时的感觉绝对不是语言可以形容的,当时只是在想:我们终于证明自己了。
但是,这也是要代价的,LIANGHH回来就垮了,其他的人也不是很好受。但是,队长还是决定了去印度拼一下。决定的结果是:继续集训。那些日子我不愿意再回忆,也不愿意再来一次,但是,如果我必须要再来一次的话,我相信,我不会犹豫,因为:我喜欢ACM。
在印度的出现绝对不是一个奇迹,也不是运气,里面包含了苦涩,无奈,还有很多很多,当然最多的还是欣喜。
至于总决赛么,呵呵,就是去玩玩,也没有别的意思了。
我真的希望
大家加油!!!

不是因为别的原因,因为我们都曾经迷惑,无助,我们没有别人那么强的教练,没有别人那么好的基础,但是,我们都绝对不能放弃。绝对不能,因为,当我们坐在赛场上的时候,不管你是不是愿意,在你上空飘动的始终是你的校旗,别误会,我不是说什么要“为了学校争光”,那种话是用来哄小孩子的。我只想问大家,如果是你,坐在电脑前~~,你的背后有多少人在看着你?你的身上寄托的是什么?
是希望,是所有喜欢ACM的同学对你的希望,希望有这么一天,ACM也可以象其他的东西一样被其他的人所肯定,而不是什么需要被人怜悯的东西!!!!!!!!!
是信任,是所有曾经帮助过你和被你帮助过你的人对你的信任,想想为了经费而受尽了苦的人们,想想其他曾经一起集训的队员们的信任。他们信任你,你们会是最好的。只要你们尽力了,你们就是英雄。不过,没有人同情失败的英雄吧。所以,我们必须成功。
还有,是耻辱,是一种被轻视和忽视的耻辱,不知道你们有没有这样的经历,当初我们想找一个比我们水平高的学校共同学习一下,谁知道竟然换来的是一句:“就你们?”也许你们没有遇到过想我们一样尴尬的场面,不过,我相信,这种感觉在你们心里也很深刻吧。从很多地方都能体会到。

如果,现在我们寄托了这些东西的话,谁还会告诉我:我们不该奋斗呢?
如果可以,我宁愿安静的呆在一个不为人知的小角落,平平淡淡的过了这大学四年的生活,至少不会这么累。
如果可以,我宁愿在开始的时候,就找一个可以依靠的地方,傻傻的什么都不想,幸福的过了这四年。
如果可以,我宁愿只做一个ACM的看客,静静的品味他们成功的喜悦,分担失败的痛苦。

如果可以,我宁愿早早的放弃着艰苦的训练,因为我实在不愿意再做这样一个噩梦。
如果、可以…………
但是,只是如果……
而且,决不可以!!
当我们弱校的人喜欢上ACM的时候,就应该有这种觉悟!
如果,要后退,那么,就你就不要参加ACM,因为,你不适合。ACM比的并不仅仅是写程序的水平,而更多是三个人的综合素质。没有胆小的人可以赢得ACM的青睐,没有退缩的人可以赢得比赛的胜利。我们这些人,水平本来就有限,也没有什么很出色专业教练。那么如果我们连一拼的勇气都没有了。我们还剩下什么?
如果可以,让我再次站在大一时候的海报前,我还是会小声的说:“去试试吧,也许很好玩呢~~”
谢谢大家看了这么多,是不是烦了?呵呵,最后,我只希望大家能+U,同时弱校的队员,

我希望我们能互相帮助。
大家~~~~~~~~加油~~~~~~~~~

推荐书籍:
算法导论,算法艺术与信息学竞赛,实用算法分析与程序设计

ascii码都可以转成整数型
首先找到规定范围的ascii码的大小范围
判断输入有没有超出范围的
建立一个二维数组,第一个维度把所有输入的不同字符由小到大排序,第二个维度代表这个字符出现次数
然后循环遍历输出这个数组,每遍历一次把字符对应的出现次数减一,直至到0


这题怎么做?五年级的题目。不能用方程解,这可把我难住了。你呢?
所以插入竖条后,此时液面的高是 600÷84=50\/7 (cm)所以水面上升 50\/7 -6=8\/7 (cm)小学应试没有强求写每步理由,但是如果你每步计算都说出这一步你在求什么,理由是什么,最后就比较明白 就譬如你自己做错的部分,4X4X12这是竖条的体积,你把他除以10X10,这是干嘛?把竖条熔了放进甲容器...

这数学两题难住我了
这个如果是小学题目的话,第二题是 60\/12=5cm 如果是初中题目的话,要考虑顶角为30°的等腰三角形,底边的长度,用三角函数来算。第三题,80个就够了,你可以用简单的边长为2每个1m种一个树来理解一下

当我遇上困难不要被别人帮助的作文
突然,有一道题目难住了我:有一个梯形,下底是上底的3倍,高是10厘米,如果上底增加6厘米,下底减去4厘米,则它变成一个长方形。求梯形的面积。我怎么想也想不出来。就在我发愁的时候,我想出了一个办法,我从书包里拿出一张草稿纸,然后按照题目的意思画了一张草图,画好后,我就一边看着这张...

...单元的一道题难住了:一个平行四边形的底边长24cm,高是底的二分之一...
面积=底边长✘高=24✘12

一道小学六年级数学题,把我难住了,谁帮我,O(∩_∩)O谢谢。
S△FDC=S正方形ABCD\/4=9(平方厘米)S1=S2=S3=S4=S△FDC\/3=3(平方厘米)S阴影=36-12=24(平方厘米)

被数学虐的搞笑句子
5、选择题靠骰子,判断题靠硬币,证明题靠画图。6、自从第一节课,花了2秒钟捡起地上的笔后,后面的再也听不懂了。7、数学不好的人都比较爱笑,因为没有数学就没有烦恼。8、有人相爱,有人夜里看海,有人数学从没过半百。9、有时候被数学题难住,我只会对着天空默默说一句,人算不如天算。10...

几道物理难题吧我给 难住了!!来个高手帮帮忙!!
你等式左边给的单位少、告诉你1微米的10的负六次方米、自己写吧、

我被一道题难住了经同学提醒才恍然大悟正如题西林壁中的诗句所言是那...
题西林壁 ——苏轼 横看成岭侧成峰,远近高低各不同。不识庐山真面目,只缘身在此山中。2.我被一道题难住了经同学提醒才恍然大悟正如题西林壁中的诗句所言是那句诗是:不识庐山真面目,只缘身在此山中。3.意思是我之所以被 题目难住,是因为我没能跳出题目,被 题目困住了。

数学日记
计算和审题是个难啃的骨头,为了它,老师可费尽了心思。比如做百分数题时为了让我们找好单位“1”,老师绞尽脑汁想出个好方法:先判断“1”是否已知或间接已知,如果已知则用乘法,未知则用除法或方程,并且要一字一句的审,标出易错的地方。这方法实施了没几天,则在审题方面大有改观。可是好景不长,由于这样审题太...

我最熟悉的人作文700字精选8篇
篇一:我最熟悉的人 我最熟悉的人是李淑婷。她是一个性格开朗、善解人意,而且乐意助人的女生。 有一次,我被一道题目给难住了,一个人坐在位子上发呆。她正好从教室外面走进来。她立刻悄悄地走过来,问我:“怎么啦?愁眉苦脸地坐着发呆。是不是遇到什么难题了?说出来让我听听,看我能不能帮你解决。”“好,太...

敖汉旗13590811961: ACM 算法超难题目 -
端木盾洋参: 出题人的表达能力太差,题目叙述得很糟糕,最后两个例子也错了 比较好的叙述是,输入n,输出从0到32中取6项按字典序排序下的第n个组合(从第0个组合0,1,2,3,4,5开始计) 这种谈不上什么难题,只不过是入门级的问题 在给定前k项的(记...

敖汉旗13590811961: 一道acm题,郁闷,求高人指点
端木盾洋参: 内容很费解,请发下原文,上面应该是你翻译的吧...acm一般都是英文的,看的有点明白,我解决应该是: 1.先求出平均分摊的钱ave. 2.累加所有<ave 的学生所要交易的钱. 关键是ave这个平均值的精度问题,我认为,分以后的要舍去...

敖汉旗13590811961: ACM题目,求解答 -
端木盾洋参: 他没指定case个数 .你输入n一点用也没有. 这样就可以了. 用下面的输入 while(scanf("%d%d",&a,&b)!=EOF) { printf("%d\n", a+b) ; }

敖汉旗13590811961: 求大神帮忙解决一道ACM题? 小弟感激不尽啊. 用C解决 -
端木盾洋参: #include <stdio.h>#include <math.h> int isPrime(long n) { int i; if (n < 2) return 0; if (n == 2) return 1; if (n % 2 == 0) return 0; for (i = 3; i <= sqrt(n); i += 2) if (n % i == 0) return 0; return 1; } int main() { int T; long n; scanf("%d", &T); while (T-- > 0) { ...

敖汉旗13590811961: ACM题目,求给力人士指点 -
端木盾洋参: #include #include #include #include #include #include #include...

敖汉旗13590811961: ACM题,要答案,急急急 -
端木盾洋参: #include<iostream>#include<string>#include<algorithm>#include<vector>#include<sstream>#include<cstring>#include<math.h>#include<stdio.h>#include<map>#include<set>#include<stack> using namespace std; int main() { int t,i,l,n; int pos[...

敖汉旗13590811961: 一道ACM题目,看不懂 -
端木盾洋参: 这道题目和乐理有关系. 题目大意是输入一串或多串半音符序列(每串用一行表示, 每个半音符间用空格隔开), 然后程序要判断每串音符可能采用了哪些调号, 再输出(每个调号间用空格隔开).首先理解:1) ...

敖汉旗13590811961: 对于ACM的题目,不会的提如何才能弄会呢? -
端木盾洋参: 是不是觉得简单的题不屑做,难题不想做?呵呵,我也是这样.原先一天一道题的,可是现在....我建议先休息一段时间,在做题,这样可能会有帮助.再说ACM现在尚早,现在才4月,9~12月比赛.现在拿出一个月进行调整足够了.

敖汉旗13590811961: ACM题 求教 -
端木盾洋参: #include int main() { int n,m,T; double ans; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); if(m6){ printf("0.00\n"); continue; } ans=1; for(int i=0;i ans/=6; printf("%.2lf\n",ans); } return 0; }

敖汉旗13590811961: 一道很水的ACM题,我打算用一维数组做、求教下.是北大的题如果做请告诉我.我追加积分 用纯C语言不要C++ -
端木盾洋参: 其实这道题用二维数组比一维数组要好写得多.因为要判断四邻域连通与否,就有一个跨行的问题. 那么,对于原来二维数组上的点,就得用pic[i*N+j]来取值.这样给编程速度上造成麻烦,也没有太大地改进运行效率.用简单的种子填充法去做...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网