1 Star 0 Fork 1

saigon/Algorithms

forked from charlieshu/Algorithms 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
P2852 [USACO06DEC] Milk Patterns G.cpp 1.52 KB
一键复制 编辑 原始数据 按行查看 历史
charlie 提交于 2024-01-09 00:01 . move from github to gitee
#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;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/saigonshu/algorithm.git
git@gitee.com:saigonshu/algorithm.git
saigonshu
algorithm
Algorithms
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385