Cod sursa(job #2061170)

Utilizator cipri321Marin Ciprian cipri321 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;
}