Submission details
Task:Aristocracy
Sender:Cystem Administrators
Submission time:2025-11-08 12:46:10 +0200
Language:C++ (C++17)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.00 sdetails
#3ACCEPTED0.00 sdetails
#4ACCEPTED0.00 sdetails
#5ACCEPTED0.00 sdetails
#6ACCEPTED0.11 sdetails
#7ACCEPTED0.10 sdetails
#8ACCEPTED0.12 sdetails
#9ACCEPTED0.12 sdetails
#10ACCEPTED0.15 sdetails
#11ACCEPTED0.12 sdetails
#12ACCEPTED0.12 sdetails
#13ACCEPTED0.14 sdetails
#14ACCEPTED0.13 sdetails
#15ACCEPTED0.16 sdetails
#16ACCEPTED0.17 sdetails
#17ACCEPTED0.03 sdetails

Code

#include <bits/stdc++.h>

using namespace std;

typedef uint64_t ll;

int kertoma(ll n, unordered_map<ll, ll> mon) {
    ll mod = 1000000007;

    if (mon.count(n)>0) {
        return mon.at(n);
    } else {
        ll x = (kertoma(n-1, mon)*n)%mod;
        mon.insert({n, x});
        return x;
    }

}
template<class T>
T power(T base, T exp, T mod) {
    T ans = 1;
    base %= mod;

    while(exp > 0) {
        if (exp&1) ans = (ans * base) % mod;
        exp >>= 1;
        base = (base*base)%mod;
    }
    return ans;
}
template<class T>
T modInverse(T a, T m) {
    return power(a, m-2, m);
}

int main() {
    ll mod = 1000000007;
    ll n;
    cin >> n;
    unordered_map<ll, ll> kertomat = {{1, 1}};
    unordered_map<string, ll> monarchs = {};

    for (ll i = 0; i < n; i++) {
        string monarch;
        ll num;

        cin >> monarch >> num;

        if (monarchs.count(monarch)>0) {
            monarchs.at(monarch) += 1;
        } else {
            monarchs.insert({monarch, 1});
        }
    }

    ll tulo = 1;

    for ( auto it = monarchs.begin(); it != monarchs.end(); ++it ) {
        ll x = it->second;
        ll kert = kertoma(x, kertomat);
        tulo = (kert*tulo)%mod;
    }

    ll kert = kertoma(n, kertomat);

    ll modinv = modInverse(tulo, mod);



    cout << (kert*modinv)%mod << endl;

}

Test details

Test 1

Verdict: ACCEPTED

input
4
Uolevi 1
Maija 3
Uolevi 2
Maija 2

correct output
6

user output
6

Test 2

Verdict: ACCEPTED

input
31
Eric 9
Charles 7
Sverker 2
Eric 10
...

correct output
541197645

user output
541197645

Test 3

Verdict: ACCEPTED

input
19
Ivan 4
Feodor 1
Feodor 2
Dmitry 1
...

correct output
939302456

user output
939302456

Test 4

Verdict: ACCEPTED

input
41
William 1
William 2
Henry 1
Stephen 1
...

correct output
520019025

user output
520019025

Test 5

Verdict: ACCEPTED

input
216
Peter 1
Linus 1
Cletus 1
Clement 1
...

correct output
200519221

user output
200519221

Test 6

Verdict: ACCEPTED

input
100000
A 1
A 2
A 3
A 4
...

correct output
1

user output
1

Test 7

Verdict: ACCEPTED

input
100000
E 1
Y 1
Y 2
M 1
...

correct output
504127783

user output
504127783

Test 8

Verdict: ACCEPTED

input
100000
Maija 1
Uolevi 1
Maija 2
Maija 3
...

correct output
328286172

user output
328286172

Test 9

Verdict: ACCEPTED

input
100000
Maijx 1
Maije 1
Maijw 1
Maijp 1
...

correct output
178134668

user output
178134668

Test 10

Verdict: ACCEPTED

input
100000
Bwvfj 1
Zmcpk 1
Jnmhz 1
Vcqtv 1
...

correct output
804665298

user output
804665298

Test 11

Verdict: ACCEPTED

input
100000
A 947476077
A 209406366
A 64254608
A 370109404
...

correct output
1

user output
1

Test 12

Verdict: ACCEPTED

input
100000
F 779918796
L 978222897
L 977989517
O 263870841
...

correct output
903086284

user output
903086284

Test 13

Verdict: ACCEPTED

input
100000
Maija 968540665
Uolevi 869194539
Uolevi 530855688
Maija 232728327
...

correct output
271775549

user output
271775549

Test 14

Verdict: ACCEPTED

input
100000
Uolevj 501874596
Uolevm 133829533
Uolevd 13322011
Uolevw 418508186
...

correct output
529945879

user output
529945879

Test 15

Verdict: ACCEPTED

input
100000
Hamql 748803883
Mpfaf 709208011
Gegcd 685359815
Yvain 890816531
...

correct output
166192905

user output
166192905

Test 16

Verdict: ACCEPTED

input
100000
Barmfsykcm 225712723
Xmvycwxssc 893904167
Wpetqrazdz 316367309
Eatxvkieif 111661228
...

correct output
457992974

user output
457992974

Test 17

Verdict: ACCEPTED

input
1
Ltwgcnsajxaxhacysdjhrpzymwxaen...

correct output
1

user output
1