[BZOJ4779] [Usaco2017 Open]Bovine Genomics(hash + 二分)
网上的题解:
枚举左端点,二分右端点位置,最后所有左端点的答案取最小值
我的题解。。。
二分答案,枚举左端点,看看是否有解。。
好像和上面是反的,但是思路没问题
过程用hash判重
#include <cstdio> #include <cstring> #define N 1001 #define p 100007 #define ULL unsigned long long int n, m, cnt, ans; char s ; ULL sum , bit , to[p]; int head[p], next[p]; inline void insert(ULL v) { int i, u = v % p; for(i = head[u]; ~i; i = next[i]) if(to[i] == v) return; to[cnt] = v; next[cnt] = head[u]; head[u] = cnt++; } inline bool find(ULL v) { int i, u = v % p; for(i = head[u]; ~i; i = next[i]) if(to[i] == v) return 1; return 0; } inline bool check(int x) { int i, j, f; for(j = x; j <= m; j++) { f = 0; cnt = 0; memset(head, -1, sizeof(head)); for(i = 1; i <= n * 2; i++) if(i <= n) insert(sum[i][j] - sum[i][j - x] * bit[x]); else if(find(sum[i][j] - sum[i][j - x] * bit[x])) { f = 1; break; } if(!f) return 1; } return 0; } int main() { int i, j, x, y, mid; scanf("%d %d", &n, &m); bit[0] = 1; for(i = 1; i <= m; i++) bit[i] = bit[i - 1] * 107; for(i = 1; i <= n * 2; i++) { scanf("%s", s + 1); for(j = 1; j <= m; j++) sum[i][j] = sum[i][j - 1] * 107 + s[j]; } x = 1; y = m; while(x <= y) { mid = (x + y) >> 1; if(check(mid)) ans = mid, y = mid - 1; else x = mid + 1; } printf("%d\n", ans); return 0; }
- [bzoj1717][Usaco2006 Dec]Milk Patterns 产奶的模式 (hash构造后缀数组,二分答案)
- BZOJ 4778 Usaco2017 Open COWBASIC 矩阵乘法
- BZOJ 4781: [Usaco2017 Open]Paired Up 贪心
- 【bzoj4780】[Usaco2017 Open]Modern Art 2
- [BZOJ]1014: [JSOI2008]火星人prefix splay+hash+二分
- bzoj1728[Usaco2006 Open]Two-Headed Cows 双头牛 二分+染色
- bzoj 4777: [Usaco2017 Open]Switch Grass 线段树+最小生成树+set
- bzoj 4780: [Usaco2017 Open]Modern Art 2
- 【BZOJ1014】【JSOI2008】火星人prefix Splay处理区间,hash+dichotomy(二分)check出解
- BZOJ 4777: [Usaco2017 Open]Switch Grass
- bzoj4892 [Tjoi2017]dna(SAM/SA/二分答案+Hash)
- 【BZOJ4101】[Usaco2015 Open]Trapped in the Haybales Silver 二分
- bzoj 1567: [JSOI2008]Blue Mary的战役地图【二分+hash】
- BZOJ 1014 JSOI 2008 火星人prefix Splay维护字符串Hash + 二分
- [bzoj2084][POI2010]ANT-Antisymmetry(二分+hash)
- bzoj 4776: [Usaco2017 Open]Modern Art 二维差分
- [BZOJ]1567: [JSOI2008]Blue Mary的战役地图 二分+hash
- BZOJ 1014 [JSOI2008]火星人prefix (Splay + Hash + 二分)
- [BZOJ4582][Usaco2016 Open]Diamond Collector(二分+st表)
- 【二分答案+智障的字符串hash】BZOJ2946-[Poi2000]公共串(Ranklist倒一达成!!!!!)【含hash知识点】