题意:a b两人石头剪刀布共出n次,分别给出每个人的三种可能次数,求a赢的最小次数和最大次数
最大次数即取a三种状态和b对应状态的最小值相加
最小次数,对于a的每种状态,使这种状态平局和失败的次数最大,即抵消中的最小值, 此时a b两人可能都剩一种状态或全0; 对于每种状态,最大值若等于,此时其他两种状态一种为平局一种为失败,剩余即为最小答案.
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false), cin.tie(nullptr);
int N;
cin >> N;
std::array<int, 3> A;
cin >> A[0] >> A[1] >> A[2];
std::array<int, 3> B;
cin >> B[0] >> B[1] >> B[2];
// R S P, so 0 beats 1 beats 2 beats 0
// A wins as many as few as possible
// N - max flow along non-winning edges
cout << max({ 0, A[0] + B[1] - N, A[1] + B[2] - N, A[2] + B[0] - N }) << ' ';
// max-flow along winning edges
cout << min(A[0], B[1]) + min(A[1], B[2]) + min(A[2], B[0]) << '\n';
return 0;
}