本次比赛主要以编程题为主。。。
测试题
1001 A+B : 。。。。
1002 青蛙的邻居 :就是有N个青蛙,任何两个青蛙可以是邻居,每个青蛙有X[i]个邻居,问是否有一种解,若有则给出一组构造。
这题用贪心就可以了。把N个青蛙看成顶点,关系看成边,这样 X[i] 的和必须是偶数,否则无解(MS可以不用这步)。否则,用贪心法构造,就是X[i]跟后面的 X[j] i<j<=n 只要 X[J]>0 就与之匹配一边,如果无法匹配则无解。如果做法有错,请指正。
1003木材加工 :给你N个长为L[I]的材料,切成K份相同的长度,求能切出的最大值。暴力搜索就可以了,先求和SUM,除以K得初值M,以后每次M=M-1,每次知道M长可以切出为止。如果有人有更好的方法,欢迎指教。
比赛题
A University:求和。。。
B Doudou:企鹅的黄金剑,DP之,做过POJ的导弹拦截应该就会,要先排序。状态方程DP[K]=MAX{0或DP[J]+1,0<=J<K} 0或DP[J]+1解释下,就是打败J号企鹅无法打败K就取0 否则 DP[J]+1。
C Ball :给你两个球的坐标,和移动的速度向量,问你能否碰撞。注意,首先判断球是不是挨着的,我在这里WA了1次。然后怎么办呢。。。我一开始还画了个图。。。结果发现可以直接列出关于T的二次方程!如果是数学题的话初中生都可以解吧,怎么到大学忘了呢。。。系数可以算出来的 AT^2+BT+C=0;然后解T不就可以了?T<0或△<0都无解,还要注意的是 A=0的情况,以及A=B=0的情况。
D String :囧rz。。。这题真的有点无语。枚举每个连续的T长的子串,求重复次数最长的,O(N^2) 但N=10000,我以为过不了,妹写。后来众人纷纷过了此题,囧倒我,最后得到冰风龙的指点。。。连KMP都妹用,判断重复次数也硬搞,就过了。。。注意不要用CIN,COUT 貌似会TLE
E Papercut:剪纸问题,这个F值的求法囧了我半天。。。最后另开了个F[11][11][11][11]来求。。。。其实就是 DP[1][11][11][11][11]。。。这题其实就是《黑书》上的《棋盘分割》变形,有兴趣的同学可以去POJ AC下,状态方程黑书上都有。
核心代码:
dp[kk][x0][y0][x1][y1]=solve(kk-1,x0,y0,x1,y1);
for(i=x0;i<x1;++i)
{
for(j=1;j<kk;++j)
{
tmp=solve(kk-j,x0,y0,i,y1)+solve(j,i+1,y0,x1,y1);
if(dp[kk][x0][y0][x1][y1]>tmp) dp[kk][x0][y0][x1][y1]=tmp;
}
}
for(j=y0;j<y1;++j)
{
for(i=1;i<kk;++i)
{
tmp=solve(kk-i,x0,y0,x1,j)+solve(i,x0,j+1,x1,y1);
if(dp[kk][x0][y0][x1][y1]>tmp) dp[kk][x0][y0][x1][y1]=tmp;
}
}
return dp[kk][x0][y0][x1][y1];
总结:火车要提速,偶也要提速。写的好累啊~~~有米有人顶一下啊,多多讨论才能有更多发现,更多创新。
