Cod sursa(job #2061170)
| Utilizator | Data | 8 noiembrie 2017 22:48:42 | |
|---|---|---|---|
| Problema | Reguli | Scor | 80 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.66 kb |
#include <fstream>
#define DIM 500001
using namespace std;
ifstream fi("reguli.in");
ofstream fo("reguli.out");
int n;
int A[DIM],KMP[DIM];
int main()
{
fi>>n;
for(int i=1;i<=n;i++)
fi>>A[i];
for(int i=1;i<n;i++)
A[i]=A[i+1]-A[i];
n--;
KMP[0]=-1;
KMP[1]=0;
for(int i=1; i<=n; i++)
{
int k=i-1;
while(KMP[k]!=-1 && A[KMP[k]+1]!=A[i])
k=KMP[k];
if(KMP[k]==-1)
KMP[i]=0;
else
KMP[i]=KMP[k]+1;
}
fo<<n-KMP[n]<<"\n";
for(int i=1; i<=n-KMP[n]; i++)
fo<<A[i]<<"\n";
fi.close();
fo.close();
return 0;
}
