Task: | Kortit II |
Sender: | anotn |
Submission time: | 2024-10-31 10:35:59 +0200 |
Language: | C++ (C++17) |
Status: | READY |
Result: | 8 |
group | verdict | score |
---|---|---|
#1 | ACCEPTED | 3 |
#2 | ACCEPTED | 5 |
#3 | TIME LIMIT EXCEEDED | 0 |
#4 | TIME LIMIT EXCEEDED | 0 |
#5 | TIME LIMIT EXCEEDED | 0 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.00 s | 1, 2, 3, 4, 5 | details |
#2 | ACCEPTED | 0.06 s | 2, 3, 4, 5 | details |
#3 | TIME LIMIT EXCEEDED | -- | 3, 4, 5 | details |
#4 | TIME LIMIT EXCEEDED | -- | 4, 5 | details |
#5 | TIME LIMIT EXCEEDED | -- | 5 | details |
#6 | TIME LIMIT EXCEEDED | -- | 5 | details |
Code
#include <iostream> #include <vector> using namespace std; /* Nykynen suunnitelma: 1. Peli voi kulkea n! eri tavalla, sillä samat kortit pelattuna pareittain eri järjestyksessä johtaa samaan tulokseen 2. Tämän jälkeen katsotaan jokaiselle numerolle, mikä on pienin ja suurin luku millä sen voi korvata 3. Toistetaan askel 2 memoisaatiolla, kunnes ollaan valmiita */ int n; int mod = 1e9+7; struct cell { int first; int second; }; int dfs ( vector<int>& used, cell score, const cell& target, int index ) { if ( index == n) { if ( score.first == target.first && score.second == target.second ) return 1; else return 0; } int counter = 0; for ( int i = 1; i <= n; i++ ) { if ( used[i] == 2 ) continue; used[i]++; cell next_score = score; next_score.first += (index+1) > i; next_score.second += (index+1) < i; counter += dfs(used, next_score, target, index+1); counter %= mod; used[i]--; } return counter; } int main () { int t; cin >> t; int ans[t]; for ( int i = 0; i < t; i++ ) { int a, b; cin >> n >> a >> b; if ( (a+b) > n || (a == 0 && b != 0) || (a != 0 && b == 0)) { ans[i] = 0; continue; } cell score = {0, 0}; cell target = {a, b}; vector<int> used(n+1, 1); ans[i] = dfs(used, score, target, 0); for (int j = 2; j <= n; j++) { ans[i] *= j; ans[i] %= mod; } } for (auto n : ans) cout << n << "\n"; }
Test details
Test 1
Group: 1, 2, 3, 4, 5
Verdict: ACCEPTED
input |
---|
54 4 4 0 3 1 3 3 2 2 4 0 4 ... |
correct output |
---|
0 0 0 0 0 ... |
user output |
---|
0 0 0 0 0 ... |
Test 2
Group: 2, 3, 4, 5
Verdict: ACCEPTED
input |
---|
284 6 1 0 5 0 2 7 1 5 7 7 5 ... |
correct output |
---|
0 0 35280 0 36720 ... |
user output |
---|
0 0 35280 0 36720 ... |
Test 3
Group: 3, 4, 5
Verdict: TIME LIMIT EXCEEDED
input |
---|
841 19 3 12 19 19 13 19 7 13 20 11 15 ... |
correct output |
---|
40291066 0 0 0 0 ... |
user output |
---|
(empty) |
Test 4
Group: 4, 5
Verdict: TIME LIMIT EXCEEDED
input |
---|
1000 15 12 6 7 1 6 44 4 26 6 6 5 ... |
correct output |
---|
0 5040 494558320 0 340694548 ... |
user output |
---|
(empty) |
Test 5
Group: 5
Verdict: TIME LIMIT EXCEEDED
input |
---|
1000 892 638 599 966 429 655 1353 576 1140 1403 381 910 ... |
correct output |
---|
0 0 0 249098285 0 ... |
user output |
---|
(empty) |
Test 6
Group: 5
Verdict: TIME LIMIT EXCEEDED
input |
---|
1000 2000 1107 508 2000 1372 249 2000 588 65 2000 1739 78 ... |
correct output |
---|
750840601 678722180 744501884 159164549 868115056 ... |
user output |
---|
(empty) |