Pagini recente » Cod sursa (job #2107655) | Cod sursa (job #2865135) | Cod sursa (job #268819) | Cod sursa (job #825010) | Cod sursa (job #935609)
Cod sursa(job #935609)
#include <fstream>
#include <algorithm>
#define NMAX 500009
#define LL long long
#define i64 64
using namespace std;
ifstream f("reguli.in"); ofstream g("reguli.out");
LL n, X[NMAX], pi[NMAX], el, nr;
char buf[i64];
inline LL get_number() {
f.getline(buf, i64);
LL nbr = 0;
for(char *p = buf; *p; ++p)
nbr = nbr * 10 + *p - '0';
return nbr;
}
inline void prefix() {
int k = 0;
pi[1] = 0;
for(int q = 2; q < n; ++q) {
while(k > 0 && X[k + 1] != X[q])
k = pi[k];
if(X[k + 1] == X[q]) ++ k;
pi[q] = k;
if(k > 0 && !(q % (q - pi[q])) && nr < q - pi[q]) nr = q - pi[q];
}
}
int main() {
f >> n;
f.getline(buf, i64);
LL ant = get_number();
for(int i = 2; i <= n; ++i) {
el = get_number();
X[i - 1] = el - ant;
ant = el;
}
prefix();
if(!nr) nr = n - 1;
g << nr << '\n';
for(int i = 1; i <= nr; ++i) g << X[i] << '\n';
g.close();
return 0;
}