Pagini recente » Cod sursa (job #1032583) | Cod sursa (job #2967805) | Cod sursa (job #2065553) | Cod sursa (job #1729635) | Cod sursa (job #2716562)
#include <fstream>
#include <iostream>
using namespace std;
const int N = 5e5;
long long sp[N + 1];
int pi[N + 1];
int main() {
ifstream in("reguli.in");
ofstream out("reguli.out");
int n, x0, lung, p;
in >> n >> sp[0];
--n;
for (int i = 1; i <= n; ++i)
in >> sp[i];
pi[1] = lung = 0;
for (int i = 2; i <= n; ++i) {
while (lung > 0 && sp[i] - sp[i - 1] != sp[lung + 1] - sp[lung])
lung = pi[lung];
if (sp[i] - sp[i - 1] == sp[lung + 1] - sp[lung])
++lung;
pi[i] = lung;
cout << sp[i] - sp[i - 1] << ' ';
}
p = n - pi[n];
out << p << '\n';
for (int i = 1; i <= p; ++i)
out << sp[i] - sp[i - 1] << '\n';
in.close();
out.close();
return 0;
}