谁有NOTP2007信息学奥赛复赛普及组pascal的答案

来源:百度知道 编辑:UC知道 时间:2024/05/21 10:06:11
如能附上全国或南宁成绩排名,会有超高分赠送。

第一题:奖学金
这题很简单,模拟就行了,不过可以优化一下:
1、数组只用开300*3的就行了,只用保存学号,语文成绩和总分,因为数学和英语成绩只在算总分时有用,算完就可以扔了。
2、排序部分用冒泡就可以了,因为N最大只有300,用快排就是杀鸡用牛刀,排序也只用排一次,按总分排,如果总分相同就看语文成绩,如果语文成绩都相同就看学号,这样就行了。

第二题:纪念品分组
这题就先从小到大快排一次(从大到小也可以),然后找第一个a[1],也就是最小的那个,和找最后那个a[n],也就是最大的那个,然后:
1、如果a[i]+a[n]<=w,就分组数s+1,删去a[i]和a[n],找a[i+1]和a[n-1],重复这个步骤;
2、如果a[i]+a[n]>w,分组数s+1,删去a[n],找a[n-1],用a[i]和a[n-1]重复这个步骤;
注意:必须用快排,如果用冒泡或选择,时间复杂度是O(N^2),N最大是30000,所以绝对会超时,而用快排,时间复杂度是O(N*logN),可以全过。

第三题:守望者的逃离
本人认为这题最难,所以我没做出这题
网上有人说这题是贪心+DP,不过我不知道它是怎么DP的才不会超时,下面说说我做这题的想法:
1、刚看到这题我就知道它是DP,并且马上想到用时间来分状态,也就是每秒一个状态,不过我马上否定了这种想法,因为时间最大是300000!!!!!!!绝对会爆空间。
2、还想到了一种方法就是用每秒可以做的3种事来分状态(3种事指:跑步、闪烁、休息),设r为跑步的次数(也就是跑了几秒),b为闪烁的次数,e为休息的次数(也就是休息了几秒),这样可以列出状态转移方程: f(r,b,e):=.....................(具体是什么我不记得了),但是这种方法也不能全过,因为路程S最大是10^8,所以r最大可到(10^8)/17,肯定爆。
3、还有DFS,BFS等水方法,应该都可以过30%的数据。

第四题:Hanoi双塔问题
这题绝对经典,递推关系式是:f(n):=2*f(n-1)+2 f(0):=0
不过这道题N最大是200,所