Pagini recente » Karate Kids Coding Camp | Cod sursa (job #904521) | Cod sursa (job #2388903) | Borderou de evaluare (job #176906) | Cod sursa (job #2923687)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("reguli.in");
ofstream fout("reguli.out");
const int N = 5e5;
int v[N + 1], kmp[N + 1], f[N + 1];
void Kmp(int n){
for(int i = 2; i <= n; i++){
int l = kmp[i - 1];
while(l >= 1 && v[l + 1] != v[i])
l = kmp[l];
if(v[l + 1] == v[i])
kmp[i] = l + 1;
}
}
int main(){
int n, x0;
fin >> n >> x0, n--;
int sub = 0;
for(int i = 1; i <= n; i++){
fin >> v[i], v[i] -= x0;
v[i] -= sub, sub += v[i];
}
Kmp(n);
int cycSize = n - 1 - kmp[n - 1];
fout << cycSize << '\n';
for(int i = 1; i <= cycSize; i++)
fout << v[i] << '\n';
return 0;
}