Cod sursa(job #18191)

Utilizator vlad_popaVlad Popa vlad_popa Data 18 februarie 2007 10:31:00
Problema Reguli Scor 30
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasele 11-12 Marime 0.9 kb
#include <stdio.h>

#define FIN "reguli.in"
#define FOUT "reguli.out"
#define NMAX 500001
#define INF 0x3f3f3f3f

long long x[NMAX], a[NMAX], sum;
int N;

int search (int k)
{
  sum = 0;
  for (int i = 1; i < k; ++ i)
   {
     a[i] = x[i] - x[i-1];
     sum += a[i];
   }
  a[k] = x[k] - x[k-1];
  sum += a[k];
  long long rest = 0;
  int lim = (N-1) % k;
  if (lim == 0 && k != N-1)
    lim = k;
  for (int i = 1; i <= lim; ++ i)
    rest += a[i];
  if (x[N-1] == ((N-1) / k) * sum + rest + x[0])
    return 1;
  return 0;
}

int
 main ()
{
  freopen (FIN, "rt", stdin);
  freopen (FOUT, "wt", stdout);

  scanf ("%d", &N);
  for (int i = 0; i < N; ++ i)
    scanf ("%d", &x[i]);
  for (int i = 1; i <= N; ++ i)
    if (search (i))
     {
       printf ("%d\n", i);
       for (int j = 1; j <= i; ++ j)
         printf ("%lld\n", a[j]);
       break;
     }
  return 0;
}