ACM Life
合肥之行
by Charlie on Nov.20, 2008, under ACM Life
一句话,乘兴而来,败兴而归!
ACM暂时告一段落,但这个成绩却很让人不满意。大三最后一次比赛就这么浪费了。。。
北京地区赛B题
by Charlie on Nov.01, 2008, under ACM Life
一个博弈题。
题目描述如下:有一堆N个石子,两个玩家轮流从这堆石子中取石子。第一个玩家第一次只能取最多N-1个石子。以后,每个玩家取的石子数最多为对方上一次取得K倍,最少取一个。最后一次取得玩家为胜。问,第一个玩家第一次最少取几个石子,可以保证取胜。
看到题的第一感觉,就是博弈题。但是,以前基本没有接触过博弈题,无从下手。于是从网上现找了本博弈论的电子书,英文版的,现学。研究半天fabonacci nim游戏后,没看出名堂来。于是自己模拟着画出了前几个状态,便有了些启示。
我们可以求出一些必败点。可以有这么一个特性,假如一个点到其前面的第一个必败点,它们之间的差距与k的乘积会小于必败点的数值的话,这个点为非必败点。如果乘积大于等于必败点的值,则判断,若它们的差值不是一个必败点的话,也就是说可以从这个点走奇数步到必败点,这时候这个点无疑也是非必败点。
现在的结论也就这些,至于具体的步数,还有待研究。。。
xnaja 0.0.0.5
by Charlie on Oct.26, 2008, under ACM Life
忙活了几天,xnaja 0.0.0.5 终于要面世了。。。这是一款提供校内相册,yupoo相册,百度图片搜索结果,flickr标签,相册下载的工具。其他的主流网站也还在添加之中。期待着他傍晚的正式发布,也希望,原先的100+个用户能对这个新的版本满意~~
test
by Charlie on Oct.20, 2008, under ACM Life
first time using ScibeFire,just want a try
POJ3020【最大匹配】
by Charlie on Sep.27, 2008, under ACM Life
题目大意:
给出一张图,图中元素为’*'或者’o'。其中,相连的两个’*’可以划入一个圈中。问至少需要几个圈将所有的’*'画起来。
FZU OJ1401,终于搞定了
by Charlie on Aug.13, 2008, under ACM Life
耗时n小时,终于拿下了1401这个”死亡迷宫“。
令人欣慰的是,完成效率还不错,我耗时0.02s,呆哥耗时0.00s。
写了个解题报告,有兴趣可以看看。。。
FZU OJ1401
by Charlie on Aug.11, 2008, under ACM Life
原题
给定一张图,图上有墙,有野怪,有血瓶等等,让你找到一条从起点东终点的路(100步以内),使得所剩能量与所走步数的比最大。
看了这题,第一感觉就是搜索。但是20*20的图,搜索起来,难免有些吃力。于是,考虑了一下动态规划,但是,似乎没有最优子结构,思考许久,还是回到了搜索。
搜索的话,因为有100步的限制,所以能截掉不少;另外,对每个点做些标记,应该截肢效果也不错。但是,毕竟4^100的数量级,还是很难应付。。。。
对于这题,暂时的做法还是如此,没有太好的想法。
TOJ3006
by Charlie on Aug.08, 2008, under ACM Life
昨天偶然看见TOJ上挂有一个比赛,也就跟着做了会儿。
前面两题挺简单,一刷就过了,没太多说的价值。但是到了第三题,也就是3006(见原题)时,我就犯难了。
3006说的是给你一个字符串,让你根据他的要求来编码。具体要求是:每个字符编码为一个5为长的二进制数,’ ‘ = 0,’A’ = 1 … ‘Z’ = 26。按螺旋形状分别将这些字符的编码给这个M * N的数组赋值。例如ACM:
最后依次将这个M * N的数组输出。
这题其实并不难,只要给二维数组的第一、第二维分别一个增量,再分别判断便能让x、y轴走出螺旋形来。但不知为何,我的代码一直WA,头痛呀。。。
厦大OJ 1051
by Charlie on Aug.05, 2008, under ACM Life
原文见
原题http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1051
题目大意:输入一个数N,求出N的组合,用它的公因数的次方表示出来。例如输入为5,起组合为5*4*3*2*1,输出应为2^3*3*5。这题主要难点在于N的取值最大可为1000000。而时间只有1s。
对于这题,我的想法是对于每一个数都分解成它的因数的乘积形式,并将每个因数的个数记录起来。由上可知,N的取值能到1000000,而对于每个数的因数的求解也将耗费大量时间,明显,1s必然不够我们花销。
于是,我便做了些优化。如对a运算时,假如a%2==0,则,我们便将a / 2标记,这样就可以不用处理a / 2。分析可知,它的截掉一半的枝,效果相当可观了。
另外还有些优化,在对每个数的因数求解方面,都是些常用的优化,不多作解释。
现在的问题是超时,测过,跑完1000000需要3.43s。暂时未有更好优化,希望大家能说说大家的想法。。。
POJ2051【最小优先级队列】【堆实现】
by Charlie on Jul.19, 2008, under ACM Life
题目大意:
给出任务的id(各个任务唯一)和执行间隔(各个任务不唯一);要求按照执行的时间顺序来输出要求的钱几个任务id号;当两个任务在同一个时间执行时,先输出id小的;