Submission #1345933

#TimeUsernameProblemLanguageResultExecution timeMemory
1345933kaze666Fish (IOI08_fish)C++20
0 / 100
126 ms9052 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int F, K, M;
    cin >> F >> K >> M;

    vector<pair<ll,int>> a(F);
    for (int i = 0; i < F; i++) {
        cin >> a[i].first >> a[i].second;
        a[i].second--; // 0-based
    }

    sort(a.begin(), a.end());

    vector<int> cnt(K, 0);

    ll cur = 1; // product
    ll ans = 0;

    int l = 0;

    auto modmul = [&](ll a, ll b) {
        return (a * b) % M;
    };

    auto modinv = [&](ll x) {
        ll res = 1, p = M - 2;
        while (p) {
            if (p & 1) res = res * x % M;
            x = x * x % M;
            p >>= 1;
        }
        return res;
    };

    for (int i = 0; i < F; i++) {
        while (l < i && a[l].first * 2 > a[i].first) {
            int t = a[l].second;
            cur = cur * modinv(cnt[t] + 1) % M;
            cnt[t]--;
            cur = cur * (cnt[t] + 1) % M;
            l++;
        }

        int t = a[i].second;
        cur = cur * modinv(cnt[t] + 1) % M;
        cnt[t]++;
        cur = cur * (cnt[t] + 1) % M;

        // trừ empty set
        ans = (ans + cur - 1 + M) % M;
    }

    cout << ans << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...