Cod sursa(job #2006597)

Utilizator infomaxInfomax infomax Data 30 iulie 2017 21:39:25
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

FILE *F=fopen("curcubeu.in", "r"), *G=fopen("curcubeu.out", "w");

int n, a1, a[1000005], b1, b[1000005], c1, c[1000005], v[1000005], nxt[1000005], tx, A, B, C;

int fnd(int x)
{
    while(x != nxt[x])
        x = nxt[x];

    return x;
}

int main()
{
    fscanf(F, "%d %d %d %d ", &n, &a[1], &b[1], &c[1]);
    for(int i = 1; i <= n; ++ i) nxt[i] = i;
    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;
    }
    for(int i = n-1; i > 0; -- i)
    {
        if(a[i] > b[i]) swap(a[i], b[i]);
        A = a[i]; B = b[i]; C=c[i];
        while(A <= B)
        {
            A = fnd(A);
            if(A <= B)
            {
                v[A] = C;
                nxt[A] = B+1;
                A++;
            }
        }
    }
    for(int i = 1; i < n; ++ i)
        fprintf(G, "%d\n", v[i]);
    return 0;
}