题意:Alice和Bob进行n轮石头剪刀布,分别出a1,b1次石头,a2,b2次剪刀,a3,b3次布,求Alice最少和最多能赢几次。
思路:当Alice出石头时,只有Bob出剪刀时,Alice能赢。所以当Alice出石头能赢的最多次数是min(a1,b2)。同理可得Alice最多能赢的次数为min(a1, b2) + min(a2, b3) + min(a3, b1)。求最小能赢次数时,先求出最多不能赢的次数,再用n减去最多不能赢的次数,就是最少能赢的次数。当Alice出石头时,Bob出石头和布Alice都不能赢,所以当Alice出石头最多不能赢的次数是min(a1,n - b2)。同理得Alice最多不能赢的次数为min(a1, n - b2) + min(a2, n - b3) + min(a3, n - b1)。
代码:
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int N = 2e5 + 10, P = 1e9 + 7, mod = 998244353;
void solve(){
int a[4], b[4];
int n;
cin >> n;
for(int i = 1; i <= 3; i++) cin >> a[i];
for(int i = 1; i <= 3; i++) cin >> b[i];
int mi = n - min(a[1], n - b[2]) - min(a[2], n - b[3]) - min(a[3], n - b[1]);
int ma = min(a[1], b[2]) + min(a[2], b[3]) + min(a[3], b[1]);
cout << mi << " " << ma << endl;
}
int main(){
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//int t;
//cin >>t;
//while(t--){
solve();
//}
return 0;
}