Cod sursa(job #3040447)

Utilizator AztecaVlad Tutunaru 2 Azteca Data 29 martie 2023 21:25:35
Problema Curcubeu Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <cmath>
#include <functional>
#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <set>
#include <map>
#include <list>
#include <time.h>
#include <math.h>
#include <random>
#include <deque>
#include <cassert>
#include <queue>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <bitset>
#include <sstream>
#include <chrono>
#include <cstring>
#include <numeric>

using namespace std;

typedef long long ll;
const int N = (int)1e6 + 7;
int a[N], b[N], c[N], nxt[N], sol[N];

signed main() {
#ifdef INFOARENA
        ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
        freopen("curcubeu.in", "r", stdin);
        freopen("curcubeu.out", "w", stdout);
#else
        FILE* stream;
        freopen_s(&stream, "input.txt", "r", stdin);
#endif
        int n;
        cin >> n >> a[1] >> b[1] >> c[1];
        for (int i = 2; i <= n; i++) {
                a[i] = (a[i - 1] * i) % n;
                b[i] = (b[i - 1] * i) % n;
                c[i] = (c[i - 1] * i) % n;
        }
        for (int i = n; i >= 1; i--) {
                for (int j = min(a[i], b[i]); j <= max(a[i], b[i]); j++) {
                        if (nxt[j] == 0) {
                                nxt[j] = max(a[i], b[i]);
                                sol[j] = c[i];
                        }
                        else {
                                j = nxt[j];
                        }
                }
        }
        for (int i = 1; i < n; i++) {
                cout << sol[i] << "\n";
        }
        return 0;
}