```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; bool cmp(pair<int, int> a, pair<int, int> b) { if (a.second!= b.second) { return a.second > b.second; } return a.first < b.first; } int main() { int n; cin >> n; vector<int> a(n), b(n); for (int i = 0; i < n; i++) { cin >> a[i]; } for (int i = 0; i < n; i++) { cin >> b[i]; } vector<pair<int, int>> players; for (int i = 0; i < n; i++) { players.push_back({a[i], b[i]}); } while (true) { sort(players.begin(), players.end(), cmp); int minChip = players.back().first; vector<pair<int, int>> newPlayers; double sidePool = 0; for (int i = players.size() - 1; i >= 0 && players[i].first == minChip; i--) { sidePool += minChip; players[i].first -= minChip; } if (sidePool > 0) { vector<pair<int, int>> winners; for (int i = players.size() - 1; i >= 0 && players[i].first > 0; i--) { if (players[i].second == players.back().second) { winners.push_back(players[i]); } } double eachWin = sidePool / winners.size(); for (auto& winner : winners) { winner.first += eachWin; } } int countNonZero = 0; for (const auto& player : players) { if (player.first > 0) { newPlayers.push_back(player); countNonZero++; } } players = newPlayers; if (countNonZero <= 1) { break; } } for (const auto& player : players) { cout << player.first << endl; } return 0; } ``` [2025-05-25 11:21:08 | AI问答 | 537点数解答]