hdu 4749 Parade Show(KMP)
2014-03-16 21:29
423 查看
题目链接:hdu 4749 Parade Show
题目大意:学校要举办一场典礼,要从n个学生中选若干支队伍来,每支队伍有m个人。然后现在将学生的身高划分成k个等级,接着按照学生的顺序给出学生的身高等级,再然后,给出m个人的队伍要求的相对高度。然后要求从n个中间挑选连续的m个人,满足相对高度即可组成一支队伍。问说最多可以组成多少支队伍。
解题思路:KMP算法的变形,只不过在判断相等的时候有点难办,因为它算的是相对高度,就是同一支队伍中,对应比自己高的个数,相等的个数,比自己矮的个数都要和要求的相等,所以要开一个cx,cy数组,将KMP中判断相等写成一个函数。
题目大意:学校要举办一场典礼,要从n个学生中选若干支队伍来,每支队伍有m个人。然后现在将学生的身高划分成k个等级,接着按照学生的顺序给出学生的身高等级,再然后,给出m个人的队伍要求的相对高度。然后要求从n个中间挑选连续的m个人,满足相对高度即可组成一支队伍。问说最多可以组成多少支队伍。
解题思路:KMP算法的变形,只不过在判断相等的时候有点难办,因为它算的是相对高度,就是同一支队伍中,对应比自己高的个数,相等的个数,比自己矮的个数都要和要求的相等,所以要开一个cx,cy数组,将KMP中判断相等写成一个函数。
#include <stdio.h> #include <string.h> const int N = 1e5+5; int n, m, k, next , x , y ; int cx [30], cy [30]; void init () { int a; memset(cx[0], 0, sizeof(cx[0])); memset(cy[0], 0, sizeof(cy[0])); for (int i = 1; i <= n; i++) { memcpy(cx[i], cx[i-1], sizeof(cx[i-1])); scanf("%d", &x[i]); cx[i][x[i]]++; } for (int i = 1; i <= m; i++) { memcpy(cy[i], cy[i-1], sizeof(cy[i-1])); scanf("%d", &y[i]); cy[i][y[i]]++; } } bool judge (int p, int q, int (*a)[30], int (*b)[30], int tp, int tq) { int s = 0; for (int i = 1; i < tp; i++) s += a[p][i]; for (int i = 1; i < tq; i++) s -= (b[q][i] - b[q-p][i]); return s == 0 && a[p][tp] == (b[q][tq] - b[q-p][tq]); } void getNext () { int j = 0; for (int i = 2; i <= m; i++) { while (j > 0 && !judge (j+1, i, cy, cy, y[j+1], y[i])) j = next[j]; if (judge (j+1, i, cy, cy, y[j+1], y[i])) j++; next[i] = j; } } int KMP () { int ans = 0; getNext(); int j = 0; for (int i = 1; i <= n; i++) { while (j > 0 && !judge (j+1, i, cy, cx, y[j+1], x[i])) j = next[j]; if (judge (j+1, i, cy, cx, y[j+1], x[i])) j++; if (j == m) { ans++; j = 0; } } return ans; } int main () { while (scanf("%d%d%d", &n, &m, &k) == 3) { init (); printf("%d\n", KMP()); } return 0; }
相关文章推荐
- HDU 4749 Parade Show 数据结构KMP变形
- HDU 4749-Parade Show(KMP变形)
- hdu 4749 Parade Show ( kmp )
- Poj 3167 Cow Patterns Hdu 4749 Parade Show (KMP大小关系相同匹配+树状数组)
- HDU 4749 Parade Show(贪心+kmp)
- HDU 4749 Parade Show(KMP变形)
- HDU 4749 Parade Show 相对匹配的KMP
- HDU 4749 Parade Show(KMP)
- hdu 4749 Parade Show (暴力水 (正解应该是kmp变形))
- HDU 4749 Parade Show(暴力水果)
- HDU 4749 Parade Show(2013 ACM/ICPC Asia Regional Nanjing Online)
- Hdu-4749 Parade Show
- HDOJ 题目 4749 Parade Show(KMP)
- HDU 4749 Parade Show 2013 ACM/ICPC Asia Regional Nanjing Online
- HDU 4749 & POJ 3167 kmp变形
- HDU 4749 KMP + BIT HASH
- hdu-4749:Parade Show(kmp模板题)
- HDU 4749 Parade Show(暴力水果)
- hdu 4749 Parade Show KMP
- HDU 4749 Parade Show Kmp