Cod sursa(job #460056)

Utilizator crawlerPuni Andrei Paul crawler Data 1 iunie 2010 02:44:31
Problema Curcubeu Scor 80
Compilator c Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>

#define Nmax 1000100

int a[Nmax], b[Nmax], c[Nmax], next[Nmax], col[Nmax], n;

int nextX(int poz) {
  if (next[poz] == poz)
    return poz;
  return next[poz] = nextX(next[poz]);
}

int main() {
  fscanf(fopen("curcubeu.in","r"), "%d%d%d%d", &n, a+1, b+1, c+1);
  
  int i, j;
  next[1] = 1;
  for (i = 2; i <= n; ++i) {
    a[i] = (long long)((long long)i*(long long)a[i-1])%(long long)n;
    b[i] = (long long)((long long)i*(long long)b[i-1])%(long long)n;
    if (a[i] > b[i]) {
      c[i] = a[i];
      a[i] = b[i];
      b[i] = c[i];
    }
    c[i] = (long long)((long long)i*(long long)c[i-1])%(long long)n;
    next[i] = i;
  }


  for ( i = n; i > 0; --i)
  for ( j = nextX(a[i]); j <= b[i]; j = nextX(j)) {
    col[j] = c[i];
    next[j] = nextX(j+1);
  }

  freopen("curcubeu.out", "w", stdout);
  for (i = 1; i < n; ++i)
    printf("%d\n", col[i]);

  return 0;
}