Pagini recente » Cod sursa (job #958367) | Cod sursa (job #676581) | Cod sursa (job #539376) | Cod sursa (job #108058) | Cod sursa (job #2298561)
#include <bits/stdc++.h>
using namespace std;
ifstream f("reguli.in");
ofstream g("reguli.out");
int N, x;
vector<long long> a, phi;
int kmp(vector<long long> x);
int main()
{
f >> N;
for(int i = 0; i < N; i++)
f >> x, a.push_back(x);
for(int i = 0; i < N - 1; i++)
a[i] = a[i + 1] - a[i], cout << a[i] << " ";
a.pop_back();
int dr = kmp(a), st = dr;
for(st = dr; phi[st] != 1 && st >= 0; st--);
if(st < 0) st = 0;
g << dr - st + 1 << "\n";
for(int i = st; i <= dr; i++)
g << a[i] << "\n";
return 0;
}
int kmp(vector<long long> x) {
int MAX = 0;
phi.resize(x.size(), 0);
for(int i = 1; i < x.size(); i++) {
int rez = phi[i - 1];
while(rez && x[i] != x[rez])
rez = phi[rez - 1];
if(x[i] == x[rez]) rez++;
phi[i] = rez;
if(((i + 1) - phi[i]) <= (i + 1) && (i + 1) % ((i + 1) - phi[i]) == 0)
MAX = i;
}
cout << "\n";
for(auto i : phi)
cout << i;
return MAX;
}