BUCTOJ邀請賽20180814-D: String
阿新 • • 發佈:2018-11-19
傳送門:http://116.196.97.99/problem.php?cid=1003&pid=3
問題 D: String
時間限制: 1 Sec 記憶體限制: 128 MB
樣例輸入
3
abababa
1
abcde
4
abababa
5
abababa
樣例輸出
2
5
1
0
思路:二分答案,用map雜湊字串來統計字串出現次數,時間複雜度是n*(logn)^2.
吐槽:一直wa在50%,getline改成cin就ac了……
#include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<string> #include<iostream> #include<map> #include<vector> #include<set> #include<queue> using namespace std; int k,len; string s; int judge(int x) { map<string,int>mp; string s1; for(int i=0;i<x;i++) { s1+=s[i]; } mp[s1]++; if(mp[s1]>=k) return 1; for(int i=x;i<len;i++) { s1.erase(s1.begin()); s1+=s[i]; mp[s1]++; if(mp[s1]>=k) return 1; } return 0; } int main() { while(cin>>k) { cin>>s; len=s.size(); int l=1,r=len/k; int ans=0; while(l<=r) { int mid=(l+r)/2; if(judge(mid)) { ans=mid; l=mid+1; } else { r=mid-1; } } cout<<ans<<endl; } }