Cod sursa(job #938921)

Utilizator narcis_vsGemene Narcis - Gabriel narcis_vs Data 14 aprilie 2013 14:08:45
Problema Curcubeu Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#define Nmax 1000000
#define In "curcubeu.in"
#define Out "curcubeu.out"
#define max(a,b) (((a)>=(b))?(a):(b))
#define min(a,b) (((a)<=(b))?(a):(b))
using namespace std;
int a[Nmax],b[Nmax],c[Nmax],next[Nmax],n,sol[Nmax];
inline void Citire()
{
    ifstream f(In);
    f>>n>>a[1]>>b[1]>>c[1];
    f.close();
    next[1] = 1;
    for(int i=2;i<n;i++)
    {
        next[i] = i;
        a[i] = (a[i-1]*i*1LL) % n;
        b[i] = (b[i-1]*i*1LL) % n;
        c[i] = (c[i-1]*i*1LL) % n;
    }
}
inline void Rezolvare()
{
    int start,stop,i,j;
    for(i=n-1;i;i--)
    {
        start = min(a[i],b[i]);
        stop = max(a[i],b[i]);
        for(j=start;j<=stop;)
        {
            while(next[j]!=j && j<=stop) j = next[j];//trecem peste elementele deja acoperite
            if(j>stop)
                break;
            sol[j] = c[i];
            next[j] = stop+1;
            j++;
        }
    }
}
inline void Afisare()
{
    int i;
    ofstream g(Out);
    for(i=1;i<n;i++)
        g<<sol[i]<<"\n";
    g.close();
}
int main()
{
    Citire();
    Rezolvare();
    Afisare();
    return 0;
}