社区讨论

75pts求调

P14361[CSP-S 2025] 社团招新参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhj8ww6w
此快照首次捕获于
2025/11/03 22:38
4 个月前
此快照最后确认于
2025/11/08 07:49
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int t, n, a[N][5], b[5], used[N];
long long ans = 0;
int main() {
    // freopen("club.in", "r", stdin);
    // freopen("club.out", "w", stdout);
    cin.tie(0)->sync_with_stdio(0);
    for (cin >> t; t--;) {
        cin >> n;
        ans = 0;
        memset(b, 0, sizeof(b));
        memset(used, 0, sizeof(used));
        for (int i = 1; i <= n; i++) cin >> a[i][1] >> a[i][2] >> a[i][3];
        vector<array<int, 3>> data;
        int pos = 1;
        for (int i = 1; i <= n; i++) {
            int mx = 0, col = 1;
            for (int j = 1; j <= 3; j++) {
                if (a[i][j] > mx) {
                    mx = a[i][j], col = j;
                }
            }
            ans += mx;
            b[col]++;
        }
        for (int i = 1; i <= 3; i++) {
            if (b[i] > n / 2) pos = i;
        }
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= 3; j++) {
                if (j == pos) continue;
                if (a[i][j] > a[i][pos]) break;
                int d = a[i][j] - a[i][pos];
                if (d < 0) data.push_back({d, j, i});
            }
        }
        sort(data.begin(), data.end(), greater<array<int, 3>>());
        for (int T = 0; T < data.size(); T++) {
            auto p = data[T];
            int d = p[0], j = p[1], i = p[2];
            if (b[pos] > n / 2) {
                if (b[j] < n / 2 && !used[i]) {
                    used[i] = 1;
                    b[j]++;
                    b[pos]--;
                    ans += d;
                }
            }
        }
        cout << ans << '\n';
    }
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...