Cod sursa(job #1518740)

Utilizator hrazvanHarsan Razvan hrazvan Data 6 noiembrie 2015 11:47:28
Problema Curcubeu Scor 50
Compilator c Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
#define MAXN 1000000
int st[MAXN], dr[MAXN], col[MAXN], last[MAXN];
int lcol[MAXN];

int stata(int x, int n){
  if(x >= n || (x < n && lcol[x] == 0)){
    return x;
  }
  else{
    int rez = stata(last[x], n);
    last[x] = rez;
    return rez;
  }
}

int main(){
  FILE *in = fopen("curcubeu.in", "r");
  int i, ca, cb, cc, aux, n;
  fscanf(in, "%d%d%d%d", &n, &ca, &cb, &cc);
  fclose(in);
  for(i = 0; i < n - 1; i++){
    st[i] = ca - 1;  dr[i] = cb - 1;  col[i] = cc;
    if(st[i] > dr[i]){
      aux = st[i];  st[i] = dr[i];  dr[i] = aux;
    }
    ca = 1LL * ca * (i + 2) % n;
    cb = 1LL * cb * (i + 2) % n;
    cc = 1LL * cc * (i + 2) % n;
    last[i] = i + 1;
  }
  int poz;
  for(i = n - 2; i >= 0; i--){
    poz = stata(st[i], n - 1);
    while(poz <= dr[i]){
      lcol[poz] = col[i];
      poz = stata(poz, n - 1);
    }
  }
  FILE *out = fopen("curcubeu.out", "w");
  for(i = 0; i < n - 1; i++)
    fprintf(out, "%d\n", lcol[i]);
  fclose(out);
  return 0;
}