441 字
2 分钟
2026 郑轻新生赛三带一题解
题意
给定 种类型的扑克牌数量,求最多能组合出多少个三带一(指 型)。
题解
显然答案满足单调性,考虑如何 check
记 位置 的 使用了 次,剩余了 张牌
答案为 ,一共剩余了 张
考虑配对的情况,使用 Hall 定理
对于位置 ,其 显然为
对于 多位置,其
分别可得 ,
后者取最大转化为 即
前者转化为 即
又有限制条件
综上可得
检查 范围内是否有 即可
45 collapsed lines
#include<bits/stdc++.h>using namespace std;
void solve() { int n = 13; vector<int> a(n + 1); int sum = 0; for (int i = 0; i < n; i ++ ) { cin >> a[i]; sum += a[i]; } int l = 0, r = sum / 4;
auto check = [&](int x) { int R = 0, L = 0; for (int i = 0; i < n; i ++ ) { int Y = a[i] / 3; int X = max(0, (a[i] - sum + 3 * x)); X = (X + 1) / 2; if (X > Y) return false; R += Y; L += X; } if (L <= x && x <= R) { return true; } return false; };
while (l < r) { int mid = (l + r + 1) >> 1; if (check(mid)) { l = mid; } else { r = mid - 1; } } cout << l << endl;}
int main() { int T = 1; cin >> T; while (T-- ) solve();} 2026 郑轻新生赛三带一题解
https://dk-qwq.github.io/blog/posts/zzuli-2026-triple/