2012年BNU新生程序设计大赛解题报告【非官方版】

来源:互联网 发布:淘宝无线优惠券 编辑:程序博客网 时间:2024/05/01 22:19

A.校队的聚餐

本题在校队内部讨论过程中就被定义为游离在五个难度等级(简单,中下,中,中上,难)之外“坑题”,实际上三种方案的数学期望都是一样的,详细证明见这里http://acm.bnu.edu.cn/bnuoj/contest_show.php?cid=1402#report

第一种方案的数学期望就是:编号*出现的概率的累和。概率都是相同的,和是的2n项的等差数列求和。

吐槽:校内只过了两个,看来猜测结论的勇气还有待提高啊!同时比赛过程中有人提问异或是什么,C语言课上是100%讲过的!!!

 

B. 化身

本题是一道字符串处理的简单题,可利用结构体去存每个技能所对应的武将标号,最后扫一遍所有的技能找出给定的技能所对应的武将编号即可,于是标程就写矬了= =。因为可以边读技能边比较…….

吐槽:本题除了题面比较长以外(这一点可能阻碍了大家签到的脚步),其他的没有任何trick,好好做&&编译后过样例基本就能AC了,校内此题过的人也最多^_^

C.Lisy的智商

本题的基本出发点是要对智商进行排序,同时从贪心的思想去思考:要想取得最大的智商值,肯定要先和神Lisy的当前智商值最接近的且比他大的人辩论。这样排序过后依次操作即可~~~同时在校队讨论题目过程中将此题的数据缩小,所以每次找到比当前值大的最小的智商值进行操作+2,直到没有比当前值大的为止,对剩下的进行+1操作

吐槽:这题主要在于解题的思想,不过FB奖还是很不错的!!

D. 整数边直角三角形

由于题目中已经给出结论:以任何大于2的素数为直角边的整数边直角三角形唯一存在,同时在初中时大家一定见过这样的整数边直角三角形:7,24,25  11,60,61….酱可以总结出一个结论:另两边的差为1

(证明见http://acm.bnu.edu.cn/bnuoj/contest_show.php?cid=1402#report),之后就是解方程组了~~需要注意的是longlong问题,据说在新生培训中是讲过滴!!而且比赛后来已经提示要用longlong了

吐槽:非常可惜的是有位新生结论推对了,只是在输入时加了一句:printf("enter T ge sushu: \n"); 然后就华丽丽的WA了= =。

E. 我爱背单词

由于题目数据量不算太大,因此直接模拟for一遍就可以了

for(int i=1;i<=d;i++)

    for(int j=0;j<k;j++){

           word[i+r[j]-1]+=n[i];

}

和G题差不多,在M个询问前就把1到D+Rk-1天的单词数算出来,询问过程中如果Qi>D+Rk-1直接输出0,else输出word[Qi]。需要注意的是有多组数据,因此在输入每一组之前都要把word数组清零,这也是比赛中很多WA的原因之一

吐槽:本题校内无人通过,很可惜的是新生TOP1 WA了,不然他很有希望搞出5题的;

赛后出题人大玉儿向校队内部询问如果数据量很大的做法,结果竟然要用很神棍的FFT算法

 

F. SoftKitty

据出题者说本题的解题方法主要是2进制移位问题,这里说一个用数学方法推出的过程:

唱第m次这首歌时,该次需要唱6*2^(m-1)句;

唱了m次之后总共唱了S=6(2^m-1)句歌词;而对于给定的n,我们可以利用上式大致推算出m的值,m=log2(n/6+1)这就不难搞出第n句所要输出的歌词了吧,同时这个式子也在暗示我们本题确实与2进制有关~~~

 

G. 找规律问题

本题也是一道字符串处理题,属于中等难度。规律题目中已经给了,第i行的字符串是根据第i-1行的字符串得来的,看到n<=20可能会想到手动打表直接交上去,但是在比赛过程中能一次搞定还是很有难度的,况且n=20时输出的字符串长度会达到300+!!!这在编译器中一行是无法看全的,很容易CE!!比赛中也有新生尝试这种方法,不过没有AC

因此模拟一下就行了,在模拟过程中要注意:应比较当前字符与上一个字符是否相同,不同的话就生成字符串,否则频数+1。这个模拟的过程应在输入n前完成,以便节约时间,也就是“离线打表”~~当然如果n>50的话可能会RE!

吐槽:字符串模拟题在新生赛中还是比较常见的,只要多练习一些这类题还是可以过的~~

   

H.Triangle

这是一道不太常见的几何题,因为需要添加辅助线才能简化推导过程,当然用正弦定理和余弦定理来回倒角和边也是可以的(此题对精度的要求不高,而且是Special Judge),不过会很麻烦的 = =||

辅助线的构造方法如图所示,作B’D∥A’C并设BD=x,x可由△AA’O∽△ADB’以及△BB’D∽△BCA’推出,这样AD的长度也是可求的!下面第一个图中的黄色部分的面积就可利用相似比的平方求出,i.e. 对于△ADB’的面积,它的高与△ABC的高也存在相似比关系,这样就可以推导出△AA’O的面积,原图中其他两块黄色部分的面积可利用类似的方法求出,黄色面积的和即为S(黄)


对于绿色部分的面积,S’(绿)=△ABB’—(两块黄色的面积),这里△ABB’与,△ADB’等高的,只是底不同而已~~~。类似地可以求得三块绿色面积的总和

最后红色部分的面积S(红)=S(总)—S(绿)—S(黄)

总的面积用海伦公式求解  ,

I. 乘车问题

因为此题需要讨论的情况比较多,对于我这个前信科专业&&木有考过GRE的人来说已然亚历山大,因此只提供解题报告传送门:

http://acm.bnu.edu.cn/bnuoj/contest_show.php?cid=1402#report

 

 

总体来讲比赛没有校队内部预期的好,但是题目真心不难,本菜出的B题至少还是能过的,同时强烈建议使用codeblocks,DEV C++等编译器,能够有效的避免CE问题,OJ上也提供了下载http://acm.bnu.edu.cn/rj/codeblocks-10.05mingw-setup.exe

http://acm.bnu.edu.cn/rj/devcpp-4.9.9.2_setup.exe

这两种编译器比VC6/TC不知好到哪里去了!!!

 

 

后记:最后一次玩新生赛了,也是最后一次出新生赛的题了,从最开始题目都很naïve每年都要无聊地出上一个斯诺克问题,到现在题目一直认可可以上线,质量在提高,同时有必要吐槽一下今年的题目:测题时一道签到题都木有,于是就把我拿到字符串判等最为最简单了,也就导致新生有一半没有AC题目…….校赛出题时希望能把算法彻底复习一下,同时个人认为测题不是为了AC,而是去寻找题目数据的漏洞,可能的trick,甚至要从做题人的能力角度出发去测题,比如找规律那个题可以打表,当年还是有新生尝试打表的,但是和我预期的一样一次打对的木有!!!同时测题时题面出现了两个K都没发现(⊙o⊙)?

关于解题报告我还是认为应该给新生留有余地,不要什么都给他们“喂到嘴边”,似乎这是在我教育实习之后才悟到的真理吧~~~昨天校队内部举行了包饺子的活动,第一次参加感觉不错,龚犇新世纪煮饺子法值得推广啊!!!!!回来后有点儿催生了我对大学的不舍之情,还有半年西北339的六个人就要各奔东西了[叹气ing…..]想起大一时一起刷题到ranklist的第一页,下学期全员组队参加校赛,再到现在可以参与出题,时光荏苒,白驹过隙是也!

将近四年的ACM生涯看上去对化学没什么用途,其实收获还是颇丰的,而且这段经历可以作为双选会上其他人所不具备的不对称优势!唯一遗憾的是大二那年与现场赛失之交臂,大三那年却因为周六做实验阴错阳差地选择了放弃,大四又因为教育实习不能参加比赛= =。哎就这样吧,争取明年校赛出个好题弥补一下~~~目前已经想好了一个题呢~


转载此文请注明出处:http://blog.csdn.net/rabia/article/details/8393053