Cod sursa(job #3127756)

Utilizator PVDoriginalPopescu Vladut Daniel PVDoriginal Data 7 mai 2023 19:50:51
Problema Curcubeu Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<bits/stdc++.h>
using namespace std;

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

    int main(){

        //ios_base::sync_with_stdio(false);
        //cin.tie(NULL);

        int n;

        fin >> n;
        vector<int> a(n+10), b(n+10), c(n+10);
        fin >> a[1] >> b[1] >> c[1];

        if(b[1] < a[1]) swap(a[1], b[1]);

        vector<int> right(n+10, 0);
        right[1] = 2;

        vector<int> v(n, 0);


        for(int i = 2; i <= n-1; ++i){
            a[i] = (a[i-1]*i)%n, b[i] = (b[i-1]*i)%n, c[i] = (c[i-1]*i)%n;
            if(b[i] < a[i]) swap(a[i], b[i]);
            right[i] = i+1;
        }

        int t;

        for(int i = n-1; i >= 1; --i){

            //cout << a[i] << " " << b[i] << " " << c[i] << "\n";

            int j = a[i];

            while(j <= b[i]){

                if(v[j]){j = right[j]; continue;}

                //cout << "j: " << j << "\n";

                v[j] = c[i];

                t = right[j];
                right[j] = b[i]+1;
                j = t;
            }

            //for(int i = 1; i <= n-1; ++i)
            //    cout << v[i] << " ";
            //cout << "\n";
        }

        for(int i = 1; i <= n-1; ++i)
            fout << v[i] << "\n";
    }