Cod sursa(job #2006596)

Utilizator infomaxInfomax infomax Data 30 iulie 2017 21:38:27
Problema Curcubeu Scor 0
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, b1, c1, v[1000005], nxt[1000005], tx;
long long 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, &a1, &b1, &c1);
    for(int i = 1; i <= n; ++ i) nxt[i] = i;
    if(a1 > b1) swap(a1, b1);
    for(int i = a1; i <= b1; ++ i)
        v[i] = c1, nxt[i] = b1+1;
    for(int i = 2; i < n; ++ i)
    {
        a = (1LL*a1 *i)%n;
        b = (1LL*b1 * i)%n;
        c = (1LL*c1 * i)%n;
        a1 = a, b1 = b, c1 = c;
        if(a > b) swap(a, b), swap(a1, b1);
        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;
}