Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- using lli = long long;
- using pii = pair<int,int>;
- const lli PB = 98765431;
- string S;
- int main(){
- int n,mx=0,cnt,m;
- scanf("%d%d",&n,&m);
- cin>>S;
- int l=0,r=n-1;
- while(l<=r){
- int mid=(l+r)/2;
- map <lli,int> cnt;
- lli hsh=0, rem=1;
- bool T=false;
- for(int i=0;i<mid;i++){
- if(i!=0) rem = rem*PB;
- hsh = hsh*PB+S[i];
- }
- for(int i=0;i<n;i++){
- if(i!=0) hsh = hsh*PB + S[i+mid-1];
- cnt[hsh]++;
- if(cnt[hsh]==m){
- T=true;
- break;
- }
- if(i+mid>=n) break;
- hsh = hsh-rem*S[i];
- }
- if(T) {
- mx=max(mx,mid);
- l = mid+1;
- }
- else {
- r = mid-1;
- }
- }
- printf("%d",mx);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement