- P145's solution
-
题解P145
- @ 2025-12-4 18:19:26
先设每张牌的权值为 ,再按题意模拟即可。
AC code:
#include <bits/stdc++.h>
using namespace std;
unordered_map<string, int> card_value = {
{"NULL", 0},
{"3", 1},
{"4", 2},
{"5", 3},
{"6", 4},
{"7", 5},
{"8", 6},
{"9", 7},
{"10", 8},
{"J", 9},
{"Q", 10},
{"K", 11},
{"A", 12},
{"2", 13},
{"LJ", 14},
{"BJ", 15}
};
int main() {
int n;
cin >> n;
vector<vector<int> > players(n);
for (int i = 0; i < n; i++) {
vector<int> hand(13);
for (int j = 0; j < 13; j++) {
string card;
cin >> card;
hand[j] = card_value[card];
}
sort(hand.begin(), hand.end());
players[i] = hand;
}
int cur = 0;
int top = 0;
while (true) {
vector<int>& hand = players[cur];
auto it = upper_bound(hand.begin(), hand.end(), top);
if (it != hand.end()) {
top = *it;
hand.erase(it);
} else {
top = 0;
}
if (hand.empty()) {
cout << cur + 1 << endl;
return 0;
}
cur = (cur + 1) % n;
}
return 0;
}