Cod sursa(job #1788173)

Utilizator tudorcomanTudor Coman tudorcoman Data 25 octombrie 2016 19:18:52
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb

#include <cstdio>
#include <algorithm>
using namespace std;

const int maxN = 1000005;
int A[maxN + 5], B[maxN + 5], C[maxN + 5];
int ans[maxN + 5], v[maxN + 5];

int main() {
  freopen("curcubeu.in", "r", stdin);
  freopen("curcubeu.out", "w", stdout);

  int N;
  scanf("%d %d %d %d", &N, &A[1], &B[1], &C[1]);

  if(A[1] > B[1])
    swap(A[1], B[1]);

  for(int i = 2; i < N; ++ i) {
    A[i] = (1LL * A[i - 1] * i) % N;
    B[i] = (1LL * B[i - 1] * i) % N;
    C[i] = (1LL * C[i - 1] * i) % N;

    if(A[i] > B[i])
      swap(A[i], B[i]);
  }

  for(int i = N - 1; i >= 1; -- i) {
    for(int j = A[i]; j <= B[i]; ) {
      if(!ans[j]) {
        ans[j] = C[i];
        v[j] = B[i] + 1;
        ++ j;
      } else
        j = v[j];
    }
  }

  for(int i = 1; i < N; ++ i)
    printf("%d\n", ans[i]);
  return 0;
}