摘要:div1 250pt: 题意:。。。 解法:先假设空出来的位置是0,然后模拟一次看看是不是满足,如果不行的话,我们只需要关心最后栈顶的元素取值是不是受空白处的影响,于是还是模拟一下。 1 // BEGIN CUT HERE 2 3 // END CUT HERE 4 #line 5 "Suminator.cpp" 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 #include15 #include16 #include1 阅读全文
posted @ 2014-03-08 15:14 silver__bullet 阅读 (302) 评论 (0) 编辑
摘要:div1 250pt: 题意:用RGB三种颜色的球摆N层的三角形,要求相邻的不同色,给出RGB的数量,问最多能摆几个 解法:三种颜色的数量要么是全一样,要么是两个一样,另外一个比他们多一个,于是可以分类讨论:对于数量全一样的,直接算;对于另外的,我们可以先不考虑多出来的那一个,也是正常放,然后看最后剩下的位置能不能放完所有多出来的那一个,这个可以二分。 1 // BEGIN CUT HERE 2 3 // END CUT HERE 4 #line 5 "FoxPaintingBalls.cpp" 5 #include 6 #include 7 #include 8 #inc 阅读全文
posted @ 2014-03-07 08:28 silver__bullet 阅读 (1340) 评论 (0) 编辑
摘要:div1 250pt 题意:一个长度最多50的字符串,每次操作可以交换相邻的两个字符,问,经过最多MaxSwaps次交换之后,最多能让多少个相同的字符连起来 解法:对于每种字符,枚举一个“集结点”,让其他相同的字符尽可能和它连起来。 1 // BEGIN CUT HERE 2 3 // END CUT HERE 4 #line 5 "ColorfulChocolates.cpp" 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include 阅读全文
posted @ 2014-03-05 15:27 silver__bullet 阅读 (341) 评论 (0) 编辑
摘要:div1 250pt: 题意:有个机器人,从某一点出发,他只有碰到地形边缘或者碰到走过的点时才会改变运动方向,然后接着走,现在给出他的运动轨迹,判断他的运动是否合法,如果合法的话,那么整个地形的最小面积是多少。 解法:先随便设定一个起点,然后模拟机器人走的路线,先确定出来运动的大致范围,然后判断运动轨迹是否合法,也就是出了最后一步可以手动终止之外,看其他的时候,它转变方向是不是合法。。。。 1 // BEGIN CUT HERE 2 3 // END CUT HERE 4 #line 5 "RotatingBot.cpp" 5 #include 6 #include 7 # 阅读全文
posted @ 2014-03-05 15:22 silver__bullet 阅读 (142) 评论 (0) 编辑
摘要:div1 250pt: 题意:100*100的01矩阵,找出来面积最大的“类似国际象棋棋盘”的子矩阵。 解法:枚举矩阵宽(水平方向)的起点和终点,然后利用尺取法来找到每个固定宽度下的最大矩阵,不断更新答案。 1 // BEGIN CUT HERE 2 3 // END CUT HERE 4 #line 5 "TheMatrix.cpp" 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 .. 阅读全文
posted @ 2014-03-04 19:48 silver__bullet 阅读 (366) 评论 (0) 编辑
摘要:数学能力已经彻底降低到了小学水平,真是惨啊惨。。。 首先G(M)很容易确定,G(M) = 6 * M; H(N) = 6 * F(N),于是推出来H(N)就可以了,昨天请教了一下别人,直接数学公式搞定,不需要什么DP H(N) = 1/6 * (H(N-1) + 1) + 5/6 * (H(N-1) + 1 + H(N)) 解释一下,首先有1/6的概率扔出来1,于是有1/6 * (H(N-1) + 1),后边那部分这么想,先扔了1次,卧槽?居然不一样,那就重新扔,于是有了后面一部分。。。(某数学神如是说。。。) 公式推出来就可以随便算了。。。 阅读全文
posted @ 2013-11-08 12:51 silver__bullet 阅读 (200) 评论 (0) 编辑
摘要:很早就会了splay。。。但是这题一直没有AC....解法:按照顺序把节点旋到根,然后给根的左儿子打个标记,删掉根...疑问?最开始的时候直接去找根节点前趋和后继节点的标号,然后两个splay删掉根。。。一直没调出来,不知到为什么错,后来的时候通过select找rank就AC了。。。难道是树的形状和我预想的不对?不明。。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #in... 阅读全文
posted @ 2013-09-24 10:49 silver__bullet 阅读 (187) 评论 (0) 编辑
摘要:题意:不想说了。。。我们只需要关心被选择的点,先预处理出来每两点间的最短路,然后问题就变成找到一条从1出发最后回到1且经过所有被选择点的最长路径,赤裸裸的TSP问题,状态压缩可破之。最初写了个spfa,但是效率无比低,其实对于这种特殊的状态转移(只能小的向大的转移),可以直接递推。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 using namespa 阅读全文
posted @ 2013-08-28 19:44 silver__bullet 阅读 (71) 评论 (0) 编辑
摘要:题意: 先定义一个数的power value,把这个数看成一个字符串,他的最长上升子序列的长度就是他的power value,求某个区间内power value等于k的数的个数。解法: 很显然要数位DP,先考虑LIS的nlogn解法,我们用dp[len]记录LIS长度为len时的最后一个数的大小,然后不断更新这些值,让每一个值都尽可能小,比如我现在的LIS是1 2 4 6,这时候下一个数是3,那么我们就要更新成1 2 3 6,让前面的数尽可能的小,这样就是为了能让后面的数有更多的机会被加入。 同理,因为数字只有10个,我们可以状态压缩,记录每个数字是否出现在当前的LIS中,然后根据这个状... 阅读全文
posted @ 2013-08-15 11:01 silver__bullet 阅读 (1805) 评论 (0) 编辑
摘要:题意 给出n(n 2 #include 3 #include 4 #include 5 using namespace std; 6 const int N = 1010; 7 const int inf = ~0u>>2; 8 int hash[129]; 9 struct node{ 10 node *ch[4],*fail; 11 int mask; 12 void clear(){ 13 for(int i = 0;i clear(); 25 return p; 26 } 27 void ini... 阅读全文
posted @ 2013-08-12 22:20 silver__bullet 阅读 (204) 评论 (0) 编辑