代码拉取完成,页面将自动刷新
同步操作将从 charlieshu/Algorithms 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include <iostream>
#include <string.h>
#include <map>
#define B 1000000
//#define P 20000000
using namespace std;
unsigned long long cac(int l,int r,unsigned long long h[],unsigned long long powb[]){
if(l == 0)
return h[r];
return h[r]-h[l-1]*powb[r-l+1];
}
bool check(int len,int n,int k,unsigned long long h[],unsigned long long powb[]){
map<unsigned long long,int> sum;
for(int i=0;i+len-1<n;i++){
unsigned long long l=cac(i,i+len-1,h,powb);
sum[l]++;
if(sum[l] >= k)
return true;
}
return false;
}
int main(){
int ans=0;
int n,k;
cin>>n>>k;
unsigned long long h[n],powb[n+1];
powb[0] = 1;
powb[1] = B;
cin>>h[0];
for(int i=1;i<n;i++){
powb[i+1] = powb[i]*B;
int l;
cin>>l;
h[i] = h[i-1]*B+l;
// h[i] %= P;
}
// cout<<"test"<<h[n-1]+1<<endl;
// map<unsigned long long,int> sum;
// memset(sum,0,sizeof(sum));
//Ƕ
// for(int i=0;i<n;i++){
// for(int j=i+k-1;j<n;j++){
// unsigned long long l,ll;
// ll = l = cac(i,j,h,powb)%P;
//// cout<<" "<<l<<endl;
// if(sum[l] == -1)
// continue;
// sum[l]++;
// if(sum[l] >= k){
// int len=0;
// while(l){
// l /= 10;
// len++;
//// cout<<l<<endl;
// }
// if(ans < len)
// ans = len;
// else{
// sum[ll] = -1;
// }
// }
// }
// }
//
int l=0,r=n;
while(r-l > 1){
int mid=(l+r)/2;
if(check(mid,n,k,h,powb)) l=mid;
else r=mid;
}
if(check(r,n,k,h,powb))
cout<<r;
else
cout<<l;
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。