QOJ.ac

QOJ

IDSubmission IDProblemHackerOwnerResultSubmit timeJudge time
#1230#752736#9549. The MagicianImakfucup-team5697Success!2024-11-21 22:03:082024-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'

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#752736#9549. The Magicianucup-team5697#WA 7ms3816kbC++146.0kb2024-11-16 09:32:342024-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;
}