POJ 2185 KMP中next数组的应用
2012-10-12 21:59
405 查看
这道题一开始没明白意思,后来一查,是说给定一个字符矩阵,然后把能够构成这个字符矩阵的最小字符矩阵的字符个数给求出来。
解法是KMP中next数组的应用,先对每一行进行get_next,求出他们的最小公倍数;再对每一列进行get_next,求出最小公倍数。这两步都很好想,然后r * c即可。
坑爹的是,我wa了5、6次都是wa在get_next(char s*)这个函数上。教训就是,以后涉及字符串处理的函数,必须避开使用指针或字符串做函数参数,否则会wa出翔的……
Code:
解法是KMP中next数组的应用,先对每一行进行get_next,求出他们的最小公倍数;再对每一列进行get_next,求出最小公倍数。这两步都很好想,然后r * c即可。
坑爹的是,我wa了5、6次都是wa在get_next(char s*)这个函数上。教训就是,以后涉及字符串处理的函数,必须避开使用指针或字符串做函数参数,否则会wa出翔的……
Code:
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxr = 11111; const int maxc = 100; int r, c; char a[maxr][maxc], buf[maxr]; int next[maxr]; int get_next(int len) { next[0] = -1; int i = 0, j = -1; while(i < len) { if(j == -1 || buf[i] == buf[j]) { i ++, j ++; next[i] = j; } else j = next[j]; } return len - next[len]; } int gcd(int a, int b) { return b ? gcd(b, a % b) : a; } int lcm(int a, int b) { return a / gcd(a, b) * b; } int main() { while(~scanf("%d%d", &r, &c)) { int i, j; for(i = 0; i < r; i ++) scanf("%s", a[i]); int rr = 1; for(i = 0; i < r; i ++) { for(j = 0; j < c; j ++) buf[j] = a[i][j]; rr = lcm(rr, get_next(c)); if(rr > c) { rr = c; break; } } int cc = 1; for(i = 0; i < c; i ++) { for(j = 0; j < r; j ++) buf[j] = a[j][i]; cc = lcm(cc, get_next(r)); if(cc > r) { cc = r; break; } } printf("%d\n", cc * rr); } }
相关文章推荐
- POJ-2752-Seek the Name, Seek the Fame(KMPnext数组应用)
- POJ_2752_KMP-next数组的应用
- poj 2185 next数组应用(用最小矩形铺砖)
- poj 2185 Milking Grid(KMPnext数组的性质+lcm)
- POJ2752 KMP中next数组的应用
- poj-2406 kmp中的next数组应用
- POJ 2406 Power Strings 1961的简化版,kmp的next数组的应用
- poj 2752 KMP的next数组应用(prefix-suffix string)
- poj 2752 kmp(next数组的应用)
- POJ 2752: S 4000 eek the Name, Seek the Fame(简单KMP-NEXT数组的应用)
- poj 2406 Power Strings (kmp 中 next 数组的应用||后缀数组)
- poj 1961 Period (kmp next 数组的应用)
- POJ 1961 Period KMP(next数组应用)
- POJ 2752 KMP中next数组的应用
- POJ 2046 Power Strings KMP(next数组应用)
- poj 2406 Power Strings(kmp next数组的应用)
- POJ 2185 Milking Grid [二维KMP next数组]
- POJ 2752 KMP中next数组的应用
- POJ 2406 Power Strings (KMP next数组应用)
- POJ - 2752 Seek the Name, Seek the Fame(KMP中对next数组的前缀后缀匹配应用)