Pagini recente » Cod sursa (job #805900) | Cod sursa (job #2676157) | Cod sursa (job #2450667) | Cod sursa (job #899211) | Cod sursa (job #2324563)
#include <iostream>
#include <fstream>
#include <vector>
#define d mm
using namespace std;
ifstream fin("cifru2.in");
ofstream fout("cifru2.out");
int nn,mm,v[200010],v2[200010],v3[100010],v4[100010],loc,q=11,f[10010];
vector<int> a;
//ArRaY sTaRtS aT 0
//pt un motiv oare si care nu mi mergea cand aveam cu 1
// pe principiul daca nu e stricat nu l atinge nu i mai fac nimica
void search(int txt[] , int pat[]){
int m=nn,n=nn*2,i,j,p=0,t=0,h=1;
for(i=0;i<m-1;i++)
h=(d*h)%q;
for(i=0;i<m;i++){
p=(d*p+pat[i])%q;
t=(d*t+txt[i])%q;
}
for(i=0;i<=n-m;i++){
if(t==p){
for(j=0;j<m;j++)
if(txt[i+j]!=pat[j])
break;
if(j==m&&loc==0)
loc=i;
break;
}
if(i<n-m){
t=(d*(t-txt[i]*h)+txt[i+m])%q;
if(t < 0)
t=(t+q);
}
}
}
int main(){
fin>>nn>>mm;
for(int i=0;i<nn;i++){
fin>>v[i];
v[i+nn]=v[i];//text necodat
}
for(int i=0;i<nn;i++){
fin>>v2[i];//text codat
v2[i+nn]=v2[i];
}
for(int i=0;i<nn;i++){
int j=i+1,cnt=1;
while(v[j]!=v[i]&&j<=nn*2){
j++;
cnt++;
}
v3[i]=cnt; // trans text necoadt
}
for(int i=0;i<nn;i++){
int j=i+1,cnt=1;
while(v2[j]!=v2[i]&&j<=nn*2){
j++;
cnt++;
}
v4[i]=cnt;
v4[nn+i]=cnt; //trans text codat
}
//pe v3 il caut in v4
search(v4,v3);
fout<<loc<<"\n";
for(int i=loc;i<=nn+loc;i++){
a.push_back(v2[i]);
// cout<<v[i<<" ";
}
for(int i=0;i<a.size();i++){
if(v[i]!=a[i])
f[v[i]]=a[i];
// cout<<a[i]<<" "<<v[i]<<endl;
}
for(int i=0;i<=mm;i++)
if(f[i]!=0)
fout<<f[i]<<" ";
return 0;
}