2011年10月5日
摘要: 题目:I, zombie题意:植物大战僵尸的模拟题,地图只有一行,两种植物,一种会射弹,一种是炸弹,求僵尸胜利的最小个数。解题思路:第一感觉是没感觉,然后觉得好繁杂,各种情况。经过长久琢磨后,思路慢慢清晰,然后AC。觉得还是挺好的一道模拟题。模拟时主要有三个问题要维护,一是植物的长度,二是最右边的植物种类,三是僵尸最左的位置。如果僵尸碰到的是炸弹,那么下一回合可以认为僵尸的最左位置为炸弹的左边。如果碰到的不是炸弹,则不停向左统计植物个数,直到遇到第一个炸弹,然后二分可以吃掉这些植物的最少僵尸个数,二分时要根具条件进行模拟。View Code 1 #include <iostream> 阅读全文
posted @ 2011-10-05 22:35 Kenfly 阅读(824) 评论(0) 推荐(0) 编辑
  2011年10月4日
摘要: 题目:Clear All of Them I题意:有2n个敌人,给出你的坐标和敌人的坐标,让你射n次枪将所有敌人杀死,每一次可以且仅可以射死两个敌人。解题思路:刚开始无任何证明地用了最小生成树提交,wa,然后状态压缩DP,TLE,看了解题报告才知道自己的状态压缩DP写得有点萎,原来可以从O(2^n*(n*n))优化O(n2^n),以前从未想过。View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <string> 4 #include <cstring> 5 #include 阅读全文
posted @ 2011-10-04 20:48 Kenfly 阅读(439) 评论(0) 推荐(0) 编辑
  2011年9月27日
摘要: 题目:Panda题意:长长一篇情书纯是忽悠选手们的。给一连串由wb组成的字符中,从中找出"wbw"子串个数,有两种操作,操作0,L,R,询问L~R子串内包含"wbw"的个数。操作1,k,ch,将第k个字符更换为ch。解题思路:带着绵绵情意看完了整个题目后就崩出树状数组了,很明显啊,动态更改值,动态个数。sum(i)表示1-i字符串内包含"wbw"子串个数,则对第一个询问操作,直接可输出sum(R)-sum(L+1)即可,想想为什么要L+1呢? 对第二个操作,判断下更改前和更改后的情况,适当更新树状数组即可。详情代码。View Code 阅读全文
posted @ 2011-09-27 02:22 Kenfly 阅读(356) 评论(0) 推荐(0) 编辑
摘要: 题目:Unlock the Cell Phone题意:玩过Android吧,有个叫图案屏锁的。这题求连接所有的点能产生的图案锁的个数。输入n,m表示图案为n*m的规模(n,m<=5),然后输入一个n*m的矩阵g,g[i][j]表示该点的类型,为0时表示普通的点能触点能滑动,但不能跨,为1时这个点不能被点击和滑过,为2时表示这点能跨过但不能触点。求连接所有的普通点能构成多少个图。 p=""> 解题思路:网络赛时没看过这题,如果看了相信会花一个下午的时间钻在这题上,状态压缩DP是我最想征服的类型。这跟哈密顿图的解法差不多,其实就是求哈密顿通路个数吧。DP[i][s] 阅读全文
posted @ 2011-09-27 01:08 Kenfly 阅读(678) 评论(0) 推荐(0) 编辑
  2011年9月26日
摘要: 题目:Game题意:有如下图15种棋盘,给出每种棋盘的个数。Alice有无限个1*2形状的棋子,Bob有无限个2*1的棋子,棋子可以嵌进棋盘里,但棋子不能旋转和跨棋盘(T_T泪目啊,比赛时一队员跟我说可以跨棋盘,搞得把这题看成神题,最终仅仅浪费了时间在这题上),Alice和Bob轮流着放,Alice先放,谁最先不能嵌入棋子就输。解题思路:有15种,或许看起来很是繁杂。其实细心研究一下,应该能找出一些解题的策略。只有决定好选择棋盘的顺序,这题就迎刃而解了。下图是鄙人找到的顺序,首先数组的第一个元素是拿来给忽略的。A数组保存了Alice的选择顺序,B数组保存了Bob的选择顺序。按什么排序的呢?明显 阅读全文
posted @ 2011-09-26 16:41 Kenfly 阅读(518) 评论(1) 推荐(0) 编辑
摘要: 题目:The time of a day题意:给出一个数N,表示有N条指针,编号1~N,第i条指针旋转一圈所要用的时间是i,从中挑选一些指针,决定一天的长度,这个长度定义为这些指针两次重合的时间间隔。然后给出一个m,求出长度大于等于m的组合数,也就是选择指针的方法数。解题思路:很明显这个长度为挑出指针的最小公倍数。朴素的想法是用递推造出所有的最小公倍数,然后找出大于等于m的。但N最大为40,给合数也有2^N-1个,数组开不下。所幸这些最小公倍数有很多是重复的,经打表什么的发现好像只有10万个不同的最小公倍数。要造出1-i这些数组成的最小公倍数很简单,用个O(N*N)的递推算法。假设前面已造好了 阅读全文
posted @ 2011-09-26 11:33 Kenfly 阅读(642) 评论(0) 推荐(0) 编辑
  2011年9月25日
摘要: 题目:AGTC题意:如题解题思路:看代码View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <string> 4 #include <cstring> 5 #include <algorithm> 6 #include <vector> 7 #include <map> 8 9 using namespace std;10 11 const int MAX = 1000 + 10;12 char X[MAX], Y[MAX];13 int 阅读全文
posted @ 2011-09-25 19:19 Kenfly 阅读(346) 评论(0) 推荐(0) 编辑
摘要: 题目:Milking Time题意:给出一个数N,表示Bessie在0~N时间段进行挤牛奶工作。然后给出M行数值,每一行为f,t,v,分别表示在时间断f,t内Bessie能挤到的牛奶量。然后给出一个R,表示每次Bessie挤完牛奶都要休息R小时才能继续下一个工作,求Bessie最大的挤奶量。解题思路:很简单的DP,刚开始WA了两次,因为时间两边的界限没处理好。转移式:DP[i] = max{DP[D[j].to], DP[D[j].from - R] + D[j].val},要求某一区间的最大值,可以用数状数组实现。View Code 1 #include <iostream> 2 阅读全文
posted @ 2011-09-25 17:39 Kenfly 阅读(845) 评论(0) 推荐(0) 编辑
  2011年9月24日
摘要: 题目:Cube Stacking题意:有N个cube,编号1-N,有两种操作:操作1: M x y 把含有cube的堆堆放在含有y的堆的上面。操作2: C x 询问cube编号为x的下面有多少个cube。解题思路:黑书上有类似题目,属于带有查询操作的并查集。设置两个变量D, C,D[i]表示i下面有几个cube, C[i],表示以i根时儿子个数,也就是堆在它上面的cube总个数。在每个M,C操作都要对x,y结点进行更新,有两种更新,一个是更新D[i],不停向根累加,一个是路径压缩。具体参考代码。View Code 1 #include <iostream> 2 #include & 阅读全文
posted @ 2011-09-24 20:36 Kenfly 阅读(274) 评论(0) 推荐(0) 编辑
  2011年9月22日
摘要: 题目:The trouble of Xiaoqian题意:有N种coin,给出每种coin的价值Vi,和小强拥有的个数Ci,小强去购物,要付m元,求小强和店员间交换货币时的最小个数货币,即小强付出coin个数加上店员找回coin个数。解题思路:背包题,先用二进制思想把coin合并成和种不同价值的货币,再进行01背包。View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <string> 4 #include <cstring> 5 #include <algorithm 阅读全文
posted @ 2011-09-22 19:11 Kenfly 阅读(280) 评论(0) 推荐(0) 编辑