Cod sursa(job #795590)

Utilizator repp4raduRadu-Andrei Szasz repp4radu Data 8 octombrie 2012 23:48:44
Problema Curcubeu Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>

#define MAX (1 << 20)

using namespace std;

int n, a[MAX], b[MAX], c[MAX], jump[MAX], sol[MAX];

int main()
{
    ifstream in("curcubeu.in"); in>>n>>a[1]>>b[1]>>c[1]; in.close();
    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; i; i--)
    {
        for(int j = a[i]; j <= b[i];)
        {
            if(!sol[j])
            {
                sol[j] = c[i];
                jump[j] = b[i] + 1;
                j++;
            }
            else
                j = jump[j];
        }
    }
    ofstream out("curcubeu.out");
    for(int i = 1; i < n; i++) out<<sol[i]<<"\n";
    return 0;
}