Cod sursa(job #2510042)
| Utilizator | Data | 15 decembrie 2019 17:08:37 | |
|---|---|---|---|
| Problema | Reguli | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.76 kb |
#include <iostream>
#include <fstream>
#define NMAX 500001
using namespace std;
ifstream f("reguli.in");
ofstream g("reguli.out");
int main()
{
long n,v[NMAX],lps[NMAX],len=0,m=0;
f>>n;
for(int i=0;i<n;++i)
f>>v[i];
for(int i=n-1;i>0;--i)
v[i]=v[i]-v[i-1];
int i=2;
while(i<n)
{
if(v[i]==v[len+1])
{
++len;
lps[i]=len;
++i;
}
else if(len)
len=lps[len-1];
else
{
lps[i]=0;
++i;
}
if(len && (i-1)%(i-1-len)==0)
m=i-1-len;
}
if(!m)
m=n-1;
g<<m<<'\n';
for(int i=1;i<=m;++i)
g<<v[i]<<'\n';
return 0;
}
