标签:style blog http color os java io for ar
3 3 abcabcbcaabc
2
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <climits> 7 #include <vector> 8 #include <queue> 9 #include <cstdlib> 10 #include <string> 11 #include <set> 12 #include <stack> 13 #include <map> 14 #define LL long long 15 #define ULL unsigned long long 16 #define pii pair<int,int> 17 #define INF 0x3f3f3f3f 18 #define seek 131 19 using namespace std; 20 const int maxn = 100100; 21 map<ULL,int>mp; 22 char str[maxn]; 23 ULL base[maxn],hs[maxn]; 24 int main() { 25 int M,L,len,i,j,ans; 26 ULL tmp; 27 base[0] = 1; 28 for(i = 1; i < maxn; i++) base[i] = base[i-1]*seek; 29 while(~scanf("%d%d%s",&M,&L,str)){ 30 len = strlen(str); 31 ans = 0; 32 hs[len] = 0; 33 for(i = len-1; i >= 0; i--) 34 hs[i] = hs[i+1]*seek+str[i]-‘a‘; 35 for(i = 0; i < L && i + M*L <= len; i++){ 36 mp.clear(); 37 for(j = i; j < i+M*L; j += L){ 38 tmp = hs[j] - hs[j+L]*base[L]; 39 mp[tmp]++; 40 } 41 if(mp.size() == M) ans++; 42 for(j = i+M*L; j+L <= len; j += L){ 43 tmp = hs[j-M*L] - hs[j-M*L+L]*base[L]; 44 mp[tmp]--; 45 if(!mp[tmp]) mp.erase(tmp); 46 tmp = hs[j] - hs[j+L]*base[L]; 47 mp[tmp]++; 48 if(mp.size() == M) ans++; 49 } 50 } 51 printf("%d\n",ans); 52 } 53 return 0; 54 }
标签:style blog http color os java io for ar
原文地址:http://www.cnblogs.com/crackpotisback/p/3938211.html