Cod sursa(job #3164332)

Utilizator iusty64Iustin Epanu iusty64 Data 2 noiembrie 2023 19:21:18
Problema Curcubeu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <vector>
using namespace std;
const int Vmax = 1000001;

int n, colorat[Vmax], nxt[Vmax];

ifstream fin("curcubeu.in");
ofstream fout("curcubeu.out");

vector<int> A;
vector<int> B;
vector<int> C;

int recurent(int a, int i){
     if(i==1)
        return (a*i)%n;
     else
        return (recurent(a, i-1) * i)%n;
}

int find_next(int e){
    if(!colorat[nxt[e]])
        return nxt[e];
    int nxt_de_nxt = find_next(nxt[e]);
    nxt[e] = nxt_de_nxt;
    return nxt_de_nxt;
}

int main()
{
    fin>>n;
    int a, b, c;
    fin>>a>>b>>c;
    A.push_back(a);
    B.push_back(b);
    C.push_back(c);
    for(int i=1;i<n;i++)
        nxt[i] = i+1;
    for(int i=2;i<n;i++){
        int a_2, b_2, c_2;
        a=recurent(a, i); A.push_back(a);
        b=recurent(b, i); B.push_back(b);
        c=recurent(c, i); C.push_back(c);
    }
    for(int i=A.size();i>=0;i--){
        int j = A[i];
        int k = B[i];
        while(j<=k){
            if(!colorat[j])
                colorat[j] = C[i];
            j=find_next(j);
        }
    }
    for(int i=1;i<n;i++)
        fout<<colorat[i]<<'\n';
    return 0;
}