。。

圈圈

http://www.nowcoder.com/questionTerminal/f4729457b9a9446990efe61a62aee480

include<stdio.h>

include<bits/stdc++.h>

using namespace std;
typedef long long ll;
const ll mod=1000000007;
const ll base=313;
int n,m,k;
int s[100005];
ll jc[100005],hs[100005];
vector<int> vec[50005];
int pdhash(int x,int y,int len){
ll hx=(hs[x+len-1]-hs[x-1]jc[len]%mod+mod)%mod;
ll hy=(hs[y+len-1]-hs[y-1]
jc[len]%mod+mod)%mod;
// cout<<"hash="<<hx<<" "<<hy<<" --"<<hs[y+len-1]<<" jc:"<<jc[len]<<" len:"<<len<<endl;
if(hx==hy) return 1;
return 0;
}
int pd(int x,int y ,int k){
int l=0,r=n;
while(l<r){
int mid=(l+r+1)/2;
if(pdhash(x,y,mid)){
l=mid;
}else{
r=mid-1;
}
}
if(l==n) return 1;
x=(s[x+l]+k)%m;
y=(s[y+l]+k)%m;
//cout<<x<<" -- "<<y<<" len="<<l<<endl;
return y<x;
}
int main()
{
jc[0]=1;
for(int i=1;i<=500002;i++) jc[i]=jc[i-1]base%mod;
//cout<<jc[1]<<endl;
cin>>n>>m>>k;
for(int i=1;i<=n;i++){
cin>>s[i];
s[i+n]=s[i];
vec[s[i]%m].push_back(i);
}
for(int i=1;i<=n2;i++) hs[i]=(hs[i-1]base+s[i])%mod;
int dex=1;
for(int i=2;i<=n;i++){
if(pd(dex,i,0))dex=i;
}
cout<<s[dex+k-1]<<endl;
for(int i=m-1;i>=1;i--){
if(vec[i].size()){
int d=vec[i][0];
for(int j=1;j<vec[i].size();j++){
int v=vec[i][j];
if(pd(d,v,m-i))d=v;
}
dex=d;
}
//cout<<(s[dex+k-1]+m-i)<<"--"<<m-i<<endl;</int>

    cout<<(s[dex+k-1]+m-i)%m<<endl;
}

return 0;

}

全部评论

相关推荐

点赞 评论 收藏
分享
努力的小明a:项目看着很眼熟,施磊老师吧,我也学的这个😋我当时是把rpc框架做成了一个分布式网盘,这是一个项目,然后muduo库做成集群即时通讯,又用QT做了个交互的客户端,这样又一个项目,然后一个轻量redis,一个CAD,总共四个项目,投了三个月就今天2月份一个小厂Qt offer,然后后面想开了,Qt啥的都能干,这个月get了个北京大厂的offer,做java后端,人生就是这么魔幻,现在就在去北京入职的路上
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务