Pagini recente » Cod sursa (job #1789361) | Cod sursa (job #623683) | Sandbox (cutiuţa cu năsip) | Istoria paginii runda/oji_2008_10/clasament | Cod sursa (job #481202)
Cod sursa(job #481202)
using namespace std;
#include<iostream>
#include<fstream>
ofstream fout("reguli.out");
int pi[500005],a[500005],N,ok[500005];
void solve()
{
int i,k=0,L;
pi[1]=0;
N--;
for(i=2;i<=N;i++)
{
while(k>0&&a[i]!=a[k+1]) k=pi[k];
if(a[i]==a[k+1]) k++;
pi[i]=k;
//cout<<pi[i]<<" ";
}
ok[0]=1;
for(i=1;i<=N;i++)
if(a[i]==a[N-i+1]&&ok[i-1])
ok[i]=1;
//cout<<" \n";
int r,c;
for(L=1;L<=N;L++)
{
r=N%L;c=N/L;
if( ((N-r)%((N-r)-pi[N-r])==0) && ok[r]&&pi[N-r]
&& ((N-r)/((N-r)-pi[N-r])==N/L))
{
fout<<L<<"\n";
break;
}
}
for(i=1;i<=L;i++)
fout<<a[i]<<"\n";
//cout<<"\ok";
}
void cit()
{int i,x,y;
ifstream fin("reguli.in");
fin>>N;
fin>>x;
for(i=1;i<=N-1;i++)
{
fin>>y;
a[i]=y-x;
x=y;
//cout<<a[i]<<" ";
}
fin.close();
}
int main()
{
cit();
//cout<<"\n";
solve();
fout.close();
return 0;
}