Cod sursa(job #18342)

Utilizator alex_damianDamian Alexandru alex_damian Data 18 februarie 2007 11:40:31
Problema Reguli Scor 100
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasele 11-12 Marime 0.74 kb
#include <cstdio>

#define FIN "reguli.in"
#define FOUT "reguli.out"
#define MAXN 500001


long long s[MAXN];
long n, i, j, p, u, cnt, k[MAXN], ok, mod;



int main () {
	freopen(FIN, "r", stdin);
  freopen(FOUT, "w", stdout);
  scanf("%ld", &n);
  for (i=0; i<=n-1; i++) scanf("%lld", &s[i]);
  p = u = 1;
  cnt = 1;
  k[p] = 1;
  for (i=2; i<=n-1; i++) {
    ok = 0;
    while ((ok==0) && (p<=u)) {
      mod = i - (i / k[p]) * k[p];
      if (mod ==  0) { if (s[k[p]] - s[k[p]-1] == s[i] - s[i-1]) ok = 1; }
      else if (s[mod] - s[mod-1] == s[i] - s[i-1]) ok = 1;
      if (ok == 0) p++;
    }
    u++;
    k[u] = i;
  }
	printf("%ld\n", k[p]);
  for (i=1; i<=k[p]; i++) printf("%lld\n", (s[i] - s[i-1]));
  return 0;
}