摘要: 题目:http://www.acmore.net/problem.php?cid=1013&pid=5#include <iostream>#include <stdio.h>#include <string>#include <string.h>#include <algorithm>#include <math.h>#include <fstream>#include <vector>#include <map>#include <queue>#include & 阅读全文
posted @ 2013-05-06 22:04 Roly Yu 阅读(288) 评论(0) 推荐(0) 编辑
摘要: http://www.codeforces.com/problemset/problem/182/D利用到KMP的周期性。现寻找最小周期,再进行扩充。#include <iostream>#include <stdio.h>#include <string>#include <string.h>#include <algorithm>#include <math.h>#include <fstream>#include <vector>#include <map>#include < 阅读全文
posted @ 2013-05-04 13:14 Roly Yu 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 这道题拿过来感觉很蒙 , 因为以前做的都是点更新询问区间 , 或是区间更新询问点 , 这道题是在[a,b]区间内隔k个数更新一次((i - a) % k == 0即i%k==a%k),对于树状数组来说按照一维的方式定义, 后面在加上两维 c[i][k][i%k] (a<=i<=b), 相当于在一维c[i]每个节点加入了一些信息,来记录每次更新,询问时候再加上原数组即可得到结果。#include <iostream>#include <stdio.h>#include <string>#include <string.h>#includ 阅读全文
posted @ 2013-05-03 21:18 Roly Yu 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 剪枝很重要,可走的格数小于时间则减去,然后就是奇偶性剪枝可以把map看成这样: 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 从为 0 的格子走一步,必然走向为 1 的格子 从为 1 的格子走一步,必然走向为 0 的格子 即: 0 ->1或1->0 必然是奇数步 0->0 走1->1 必然是偶数步 所以当遇到从 0 走向 0 但是要求时间是奇数的,或者, 从 1 走向 0 但是要求时间是偶数的 都可以直接判断不可达!#include <iostream>#include <std 阅读全文
posted @ 2013-05-03 16:50 Roly Yu 阅读(158) 评论(0) 推荐(0) 编辑
摘要: http://www.acmore.net/problem.php?id=1467根据朴素的欧几里德原理有 gcd(a,b)=gcd(b,a mod b);则:ax1+by1=bx2+(a mod b)y2;即:ax1+by1=bx2+(a-[a/b]*b)y2=ay2+bx2-(a/b)*by2;根据恒等定理得:x1=y2; y1=x2-[a/b]*y2;本题直接利用这个结论。#include <iostream>#include <stdio.h>#include <string>#include <string.h>#include < 阅读全文
posted @ 2013-05-02 20:19 Roly Yu 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 二分+树状数组动态的寻找比a大k的数#include <stdio.h>#include <iostream>#include <string>#include <string.h>#include <algorithm>#include <stdlib.h>#include <math.h>#include <vector>#include <map>using namespace std;const int maxn = 100005;int c[maxn];int lowbit(i 阅读全文
posted @ 2013-05-02 13:20 Roly Yu 阅读(188) 评论(0) 推荐(0) 编辑
摘要: http://www.acmore.net/problem.php?id=1504利用优先队列,转化成O(m)的复杂度。#include <iostream>#include <stdio.h>#include <string>#include <string.h>#include <algorithm>#include <math.h>#include <fstream>#include <vector>#include <map>#include <queue>#incl 阅读全文
posted @ 2013-05-01 15:47 Roly Yu 阅读(257) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2185题意:给你一个字符矩阵,求出它的最小覆盖子矩阵,即使得这个子矩阵的无限复制扩张之后的矩阵,能包含原来的矩阵。即二维的最小覆盖子串。思路:KMP很好的一道题。首先易证:最小覆盖子矩阵一定靠左上角。那么,我们考虑求出每一行的最小重复串长度,所有行的最小重复串的长度的lcm就是最小重复子矩阵的宽。然后我们对列也做相同的操作。于是我们就可以求得最小重复子矩阵的大小了。(这里要注意一点:当所得的宽大于原来的宽时,就让等于原来的宽,长也如此)。算法实现:算法的核心在于高效的求出每一行和每一列的最小重复串,这个可以最原串做一次KMP中的get_ne 阅读全文
posted @ 2013-05-01 15:34 Roly Yu 阅读(193) 评论(0) 推荐(0) 编辑
摘要: /* s1[i]与s2[i]匹配,树状数组i位置更新1,否则更新0。*/#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>using namespace std;const int maxn = 1000005;int c[maxn];char s1[maxn],s2[maxn];int min(int a,int b){ return a>b?b:a;}int lowbit(int x){ return x&(-x);}void upda 阅读全文
posted @ 2013-04-29 12:31 Roly Yu 阅读(162) 评论(0) 推荐(0) 编辑
摘要: #include <iostream>#include <stdio.h>#include <string>#include <string.h>#include <algorithm>#include <stdlib.h>#include <math.h>#include <queue>using namespace std;const int maxn = 205;const int inf = 0xfffffff;struct node{ int x,y; int step; int time 阅读全文
posted @ 2013-04-24 16:41 Roly Yu 阅读(267) 评论(0) 推荐(0) 编辑