剑问苍生-流浪驿站
日历
网志分类
· 所有网志 (31)
· ACM (17)
· 未分类 (14)
站内搜索
友情链接
· 我的歪酷
· 紫微星
· 剑问苍生

订阅 RSS

0012439

歪酷博客

剑问苍生的算法博客
« 上一篇: ZOJ Monthly, May 2009 解题报告(GH还米AC) 下一篇: 校赛,各种纠结 »
剑问苍生 @ 2009-05-09 22:45

本次比赛主要以编程题为主。。。

测试题

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

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];



总结:火车要提速,偶也要提速。写的好累啊~~~有米有人顶一下啊,多多讨论才能有更多发现,更多创新。




最新评论

2009-05-09 23:42

1003木材加工  :给你N个长为L[I]的材料,切成K份相同的长度,求能切出的最大值。二分法思想:先求和SUM,除以K得初值M,先看M能否切出,切不出则算M/2的情况,如果此时还切不出,在看M/4的情况(此时上界为M/2),否则,M/2能切出则观察3M/4的情况(此时下界为M/2 上界是M)..以此类推。
当时比赛没想那么多,看数据小就暴力过了。很多题目还是要多想,AC了其实还有更好的方法。



dj4156003

2009-05-10 00:42 匿名 61.132.*.*

好吧..我来给你评论个..
1002有更简单的方法..贪心都不需要用..



dj4156003

2009-05-10 00:54 匿名 61.132.*.*

假设N = 4,
x[1] = a,x[2] = b, x[3] =c, x[4] =d
        0 a12 a13 a14
设A = a21 0 a23 a24
        a31 a32 0 a34
        a41 a42 a43 0
那么有a12 = a21, a13 = a31, a14 = a41, a23 = a32, a24 = a42, a34 = a43,
所以
a12 + a13 + a14 = a,
a23 + a24 + a34 = (b+c+d-a)/2
那么构造这个矩阵就很轻松了
a12, a13, a14中任取a个1即可,
a23, a24, a34中任取 (b+c+d-a)/2个为1即可..
即得到一组特解...很简单吧..
对于任意的N也是如此..



tanwan

2009-05-10 14:17 匿名 211.140.*.*

我木材加工,是先将全部进行求和在平均需要达到的N段,在进行累加不行就--一般我是-到平均后/2为止还是举个例子好了
8 70 39 分成5段
8+70+39=117
117/5=23
然后23开始
39-23..一直减到无法减,减一次count++表示取到一段
所以当23的时候得到1+3!=5所以--变22一直到19就出现结果
70可以切出3段19,在39可以切出2段19则得到5段,这样余8+13+1=22(应该算最好了吧),大家帮俺分析下我这样的缺点或者怎么怎么的指教一下,谢谢哈


2009-05-10 15:32

LS的方法是模拟,也就是每次能砍就一个个砍,比如8,70,39.你测试23时候 8/23+70/23+39/23=4不就可以了这样在大数据上可以提高效率



xclee

2009-05-12 16:02 匿名 222.160.*.*

赞一个。。


评论 / 个人网页 / 扔小纸条
*昵称

已经注册过? 请登录

Email
网址
*评论