Cod sursa(job #1547730)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 9 decembrie 2015 19:51:08
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <cstdio>
using namespace std;
ifstream f("curcubeu.in");
int N;
int A[1000005],B[1000005],C[1000005];
int Next[1000005],Colour[1000005];
void precalc()
{
    f>>N>>A[1]>>B[1]>>C[1];
    Next[1]=2;
    for(int i=2;i<N;i++)
    {
        Next[i]=i+1;
        A[i]=((long long)A[i-1]*i)%N;
        B[i]=((long long)B[i-1]*i)%N;
        C[i]=((long long)C[i-1]*i)%N;
    }
}

void Solve()
{
    for(int i=N-1;i>=1;i--)
    {
        int x=min(A[i],B[i]),y=max(A[i],B[i]);
        int j=x;
        while(j<=y)
        {
            if(Colour[j]==0)
            {
                Colour[j]=C[i];
                Next[j]=y+1;
                ++j;
            }
            else
            {
                int nxt=Next[j];
                Next[j]=max(Next[j],y+1);
                j=nxt;
            }
        }
    }
    for(int i=1;i<N;i++)
        printf("%d\n",Colour[i]);
    printf("\n");
}
int main()
{
    freopen("curcubeu.out","w",stdout);
    precalc();
    Solve();
    return 0;
}