QOJ.ac
QOJ
ID | Submission ID | Problem | Hacker | Owner | Result | Submit time | Judge time |
---|---|---|---|---|---|---|---|
#1230 | #752736 | #9549. The Magician | Imakf | ucup-team5697 | Success! | 2024-11-21 22:03:08 | 2024-11-21 22:03:09 |
Details
Extra Test:
Wrong Answer
time: 1ms
memory: 3752kb
input:
4 30 3C 2C AC 3H 2H AH QD JD TD 9D 8D 7D 6D 5D 4D 3D 2D AD QS JS TS 9S 8S 7S 6S 5S 4S 3S 2S AS 0 0 0 1 1 0 18 4H 3H 2H AH 7D 6D 5D 4D 3D 2D AD 7S 6S 5S 4S 3S 2S AS 0 1 1 1 1 1 26 3C 2C AC 6H 5H 4H 3H 2H AH 7D 6D 5D 4D 3D 2D AD TS 9S 8S 7S 6S 5S 4S 3S 2S AS 1 0 1 0 0 0 26 6H 5H 4H 3H 2H AH 7D 6D 5D 4...
output:
5 3 5 5
result:
wrong answer 4th lines differ - expected: '4', found: '5'
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#752736 | #9549. The Magician | ucup-team5697# | WA | 7ms | 3816kb | C++14 | 6.0kb | 2024-11-16 09:32:34 | 2024-11-21 22:03:24 |
answer
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define mems(x, v) memset(x, v, sizeof x)
#define mcpy(x, y) memcpy(x, y, sizeof x)
using namespace std;
typedef pair <int, int> pii;
typedef long long ll;
typedef unsigned long long ull;
typedef long double wisdom;
struct Node {int a, b, c, d, e;}; vector <Node> dp, tr; int cnt[10];
bool operator == (Node p, Node q) {return p.a == q.a && p.b == q.b && p.c == q.c && p.d == q.d;}
void sol1() {
tr.clear();
for (auto [a, b, c, d, e] : dp) for (int i : {0, 1, 2, 3}) for (int j : {0, 1, 2, 3}) for (int k : {0, 1, 2, 3}) {
i == 0 ? (a--) : i == 1 ? (b--) : i == 2 ? (c--) : (d--); a++;
j == 0 ? (a--) : j == 1 ? (b--) : j == 2 ? (c--) : (d--); a++;
k == 0 ? (a--) : k == 1 ? (b--) : k == 2 ? (c--) : (d--); a++;
if (a >= 0 && b >= 0 && c >= 0 && d >= 0) tr.push_back({a, b, c, d, e});
i == 0 ? (a++) : i == 1 ? (b++) : i == 2 ? (c++) : (d++); a--;
j == 0 ? (a++) : j == 1 ? (b++) : j == 2 ? (c++) : (d++); a--;
k == 0 ? (a++) : k == 1 ? (b++) : k == 2 ? (c++) : (d++); a--;
}
sort(tr.begin(), tr.end(), [](Node p, Node q) {return p.a != q.a ? p.a < q.a : p.b != q.b ? p.b < q.b : p.c != q.c ? p.c < q.c : p.d != q.d ? p.d < q.d : p.e < q.e;});
tr.erase(unique(tr.begin(), tr.end()), tr.end()), swap(dp, tr);
}
void sol2() {
tr.clear();
for (auto [a, b, c, d, e] : dp) for (int i : {0, 1, 2, 3}) for (int j : {0, 1, 2, 3}) for (int k : {0, 1, 2, 3}) {
i == 0 ? (a--) : i == 1 ? (b--) : i == 2 ? (c--) : (d--); b++;
j == 0 ? (a--) : j == 1 ? (b--) : j == 2 ? (c--) : (d--); b++;
k == 0 ? (a--) : k == 1 ? (b--) : k == 2 ? (c--) : (d--); b++;
if (a >= 0 && b >= 0 && c >= 0 && d >= 0) tr.push_back({a, b, c, d, e});
i == 0 ? (a++) : i == 1 ? (b++) : i == 2 ? (c++) : (d++); b--;
j == 0 ? (a++) : j == 1 ? (b++) : j == 2 ? (c++) : (d++); b--;
k == 0 ? (a++) : k == 1 ? (b++) : k == 2 ? (c++) : (d++); b--;
}
sort(tr.begin(), tr.end(), [](Node p, Node q) {return p.a != q.a ? p.a < q.a : p.b != q.b ? p.b < q.b : p.c != q.c ? p.c < q.c : p.d != q.d ? p.d < q.d : p.e < q.e;});
tr.erase(unique(tr.begin(), tr.end()), tr.end()), swap(dp, tr);
}
void sol3() {
tr.clear();
for (auto [a, b, c, d, e] : dp) for (int i : {0, 1, 2, 3}) for (int j : {0, 1, 2, 3}) for (int k : {0, 1, 2, 3}) {
i == 0 ? (a--) : i == 1 ? (b--) : i == 2 ? (c--) : (d--); c++;
j == 0 ? (a--) : j == 1 ? (b--) : j == 2 ? (c--) : (d--); c++;
k == 0 ? (a--) : k == 1 ? (b--) : k == 2 ? (c--) : (d--); c++;
if (a >= 0 && b >= 0 && c >= 0 && d >= 0) tr.push_back({a, b, c, d, e});
i == 0 ? (a++) : i == 1 ? (b++) : i == 2 ? (c++) : (d++); c--;
j == 0 ? (a++) : j == 1 ? (b++) : j == 2 ? (c++) : (d++); c--;
k == 0 ? (a++) : k == 1 ? (b++) : k == 2 ? (c++) : (d++); c--;
}
sort(tr.begin(), tr.end(), [](Node p, Node q) {return p.a != q.a ? p.a < q.a : p.b != q.b ? p.b < q.b : p.c != q.c ? p.c < q.c : p.d != q.d ? p.d < q.d : p.e < q.e;});
tr.erase(unique(tr.begin(), tr.end()), tr.end()), swap(dp, tr);
}
void sol4() {
tr.clear();
for (auto [a, b, c, d, e] : dp) for (int i : {0, 1, 2, 3}) for (int j : {0, 1, 2, 3}) for (int k : {0, 1, 2, 3}) {
i == 0 ? (a--) : i == 1 ? (b--) : i == 2 ? (c--) : (d--); d++;
j == 0 ? (a--) : j == 1 ? (b--) : j == 2 ? (c--) : (d--); d++;
k == 0 ? (a--) : k == 1 ? (b--) : k == 2 ? (c--) : (d--); d++;
if (a >= 0 && b >= 0 && c >= 0 && d >= 0) tr.push_back({a, b, c, d, e});
i == 0 ? (a++) : i == 1 ? (b++) : i == 2 ? (c++) : (d++); d--;
j == 0 ? (a++) : j == 1 ? (b++) : j == 2 ? (c++) : (d++); d--;
k == 0 ? (a++) : k == 1 ? (b++) : k == 2 ? (c++) : (d++); d--;
}
sort(tr.begin(), tr.end(), [](Node p, Node q) {return p.a != q.a ? p.a < q.a : p.b != q.b ? p.b < q.b : p.c != q.c ? p.c < q.c : p.d != q.d ? p.d < q.d : p.e < q.e;});
tr.erase(unique(tr.begin(), tr.end()), tr.end()), swap(dp, tr);
}
void sol5() {
tr.clear();
for (auto [a, b, c, d, e]: dp) for (int i : {0, 1, 2, 3}) {
i == 0 ? (a--) : i == 1 ? (b--) : i == 2 ? (c--) : (d--); e++;
if (a >= 0 && b >= 0 && c >= 0 && d >= 0) tr.push_back({a, b, c, d, e});
i == 0 ? (a++) : i == 1 ? (b++) : i == 2 ? (c++) : (d++); e--;
}
sort(tr.begin(), tr.end(), [](Node p, Node q) {return p.a != q.a ? p.a < q.a : p.b != q.b ? p.b < q.b : p.c != q.c ? p.c < q.c : p.d != q.d ? p.d < q.d : p.e < q.e;});
tr.erase(unique(tr.begin(), tr.end()), tr.end()), swap(dp, tr);
}
void sol6() {
for (auto [a, b, c, d, e]: dp) for (int i : {0, 1, 2, 3}) for (int j : {0, 1, 2, 3, 4}) if (i != j) {
i == 0 ? (a--) : i == 1 ? (b--) : i == 2 ? (c--) : (d--);
j == 0 ? (a++) : j == 1 ? (b++) : j == 2 ? (c++) : j == 3 ? (d++) : (e++);
if (a >= 0 && b >= 0 && c >= 0 && d >= 0) tr.push_back({a, b, c, d, e});
i == 0 ? (a++) : i == 1 ? (b++) : i == 2 ? (c++) : (d++);
j == 0 ? (a--) : j == 1 ? (b--) : j == 2 ? (c--) : j == 3 ? (d--) : (e--);
}
sort(tr.begin(), tr.end(), [](Node p, Node q) {return p.a != q.a ? p.a < q.a : p.b != q.b ? p.b < q.b : p.c != q.c ? p.c < q.c : p.d != q.d ? p.d < q.d : p.e < q.e;});
tr.erase(unique(tr.begin(), tr.end()), tr.end()), swap(dp, tr);
}
void solve() {
int n, t; cin >> n, cnt[0] = cnt[1] = cnt[2] = cnt[3] = 0;
for (int i = 1; i <= n; i++) {char x, y; cin >> x >> y; cnt[y == 'D' ? 0 : y == 'C' ? 1 : y == 'H' ? 2 : 3]++;}
dp.clear(), dp.push_back({cnt[0], cnt[1], cnt[2], cnt[3], 0});
cin >> t; if (t) sol1();
cin >> t; if (t) sol2();
cin >> t; if (t) sol3();
cin >> t; if (t) sol4();
cin >> t; if (t) sol5();
cin >> t; if (t) sol6();
int ans = 0;
for (auto [a, b, c, d, e] : dp) {
int s = a / 5 + b / 5 + c / 5 + d / 5;
if (e && a % 5 == 4) a++, e--, s++;
if (e && b % 5 == 4) b++, e--, s++;
if (e && c % 5 == 4) c++, e--, s++;
if (e && d % 5 == 4) d++, e--, s++;
if (e == 2 && a % 5 == 3) a += 2, e -= 2, s++;
if (e == 2 && b % 5 == 3) b += 2, e -= 2, s++;
if (e == 2 && c % 5 == 3) c += 2, e -= 2, s++;
if (e == 2 && d % 5 == 3) d += 2, e -= 2, s++;
ans = max(ans, s);
}
cout << ans << '\n';
}
int main() {
int T; cin >> T; while (T--) solve();
return 0;
}