Skip to content

1.The Trial of Order and Chaos

Problem Statement

Solution

cpp
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef __int128 int128;

int main() {
    int n, m; 
    cin >> n >> m;
    
    vector<ll> a(n);
    for (int i = 0; i < n; ++i) cin >> a[i];

    // --- Ritual 1 ---
    vector<int> pre(n), alt_pre(n);
    for (int i = 0; i < n; ++i) {
        ll curr = 0;
        if (i % 2 == 0) for (int j = 0; j <= i; j++) curr += a[j];
        else {
            int sign = 1;
            for (int j = i; j >= 0; --j) {
                curr += sign * a[j];
                sign *= -1;
            }
        }
        if (i % 2) alt_pre[i] = ((curr % m) + m) % m;
        else pre[i] = curr % m;
    }

    for (int i = 0; i < n; ++i) {
        if (i % 2) a[i] = alt_pre[i];
        else a[i] = pre[i];
        cout << a[i] << " ";
    }
    cout << "\n";

    // --- Ritual 2 ---
    vector<ll> b;
    for (int i = 0; i < n - 2; ++i) {
        for (int j = i + 1; j < n - 1; ++j) {
            for (int k = j + 1; k < n; ++k) {
                ll val = (a[i] + a[j] + a[k]) % m;
                if (val % 2 == 0) b.push_back(val);
                else {
                    int128 sq = 1LL * val * val;
                    sq %= m;
                    b.push_back((ll)sq);
                }
            }
        }
    }

    for (ll x: b) cout << x << " ";
    cout << "\n";

    // --- Ritual 3 ---
    sort(b.begin(), b.end());
    for (int i = 0; i * 3 < (int)b.size(); i++) {
        if (i % 2 == 1) reverse(b.begin() + i * 3, b.begin() + min((int)b.size(), i * 3 + 3));
    }

    for (ll x: b) cout << x << " ";
    cout << "\n";

    // --- Ritual 4 ---
    sort(b.begin(), b.end());
    b.erase(unique(b.begin(), b.end()), b.end());

    vector<ll> add;
    set<ll> B(b.begin(), b.end());
    for (int t = 0; t < m; t++) {
        if (B.count(t) == 0 && B.count(t + 1) == 1) add.push_back(t);
    }
    for (ll x: add) b.push_back(x);

    sort(b.begin(), b.end());
    b.erase(unique(b.begin(), b.end()), b.end());

    for (ll x: b) cout << x << " ";
    cout << "\n";

    // --- Ritual 5 ---
    vector<ll> c;
    for (ll x: b) {
        if (x % 3 == 0) c.push_back((x / 3) % m);
        else if (x % 3 == 1) c.push_back((x * 2 + 1) % m);
        else c.push_back(((x * x - 1) % m + m) % m);
    }

    for (ll x: c) if (x % 2 == 0) cout << x << " ";
    for (ll x: c) if (x % 2 == 1) cout << x << " ";
    cout << "\n";


    return 0;
}