Task: | Kortit II |
Sender: | anotn |
Submission time: | 2024-11-07 13:41:30 +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.09 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 |
Compiler report
input/code.cpp: In function 'int dfs(std::vector<int>&, std::set<int>&, std::pair<int, int>&)': input/code.cpp:27:23: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare] 27 | if ( (nums.size() == n) && (score == pair<int, int>(0, 0)) ) | ~~~~~~~~~~~~^~~~ input/code.cpp:42:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare] 42 | if ( i < nums.size() ) | ~~^~~~~~~~~~~~~ input/code.cpp:44:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare] 44 | else if ( i > nums.size() ) | ~~^~~~~~~~~~~~~
Code
#include <iostream> #include <vector> #include <set> #include <map> 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 mem_type { size_t length; set<int> not_used; pair<int, int> score; }; map<pair<size_t, pair<set<int>, pair<int, int>>>, int> mem; int dfs ( vector<int>& nums, set<int>& not_used, pair<int, int>& score ) { if ( (nums.size() == n) && (score == pair<int, int>(0, 0)) ) return 1; else if ( score.first < 0 || score.second < 0 ) return 0; else if ( mem.find({nums.size(), {not_used, score}}) != mem.end() ) return mem[{nums.size(), {not_used, score}}]; int ans = 0; auto new_not_used = not_used; for ( auto i : not_used) { nums.push_back(i); auto new_score = score; new_not_used.erase(i); if ( i < nums.size() ) new_score.second--; else if ( i > nums.size() ) new_score.first--; ans += dfs(nums, new_not_used, new_score); ans %= mod; nums.pop_back(); new_not_used.insert(i); } mem[{nums.size(), {not_used, score}}] = ans; return ans; } int main () { int t; cin >> t; int64_t 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; } vector<int> nums; set<int> not_used; pair<int, int> score = {a, b}; for ( int i = 1; i <= n; i++ ) not_used.insert(i); ans[i] = int64_t(dfs(nums, not_used, score)); int64_t mod_long = mod; for (int64_t j = 2; j <= n; j++) { ans[i] *= j; ans[i] %= mod_long; } } 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) |