[CF1426E] Rock, Paper, Scissors
Description
Alice和Bob进行剪刀石头布的游戏,总共进行(n)局。
Alice出石头(a_1)次,出剪刀(a_2)次,出布(a_3)次。
Bob出石头(b_1)次,出剪刀(b_2)次,出布(b_3)次。
问Alice最少赢多少次,最多赢多少次。
Solution
A 最多赢多少次?
A 出石头 (A_1) 对应 B 出剪刀 (B_2) 才能赢,最多 (min(a_1,b_2))
这时候三者是相互独立的,于是最多赢得次数为 (sum min (a_i,b_{i+1}))
A 最少赢多少次?
A 出石头 (A_1) 对应 B 不出剪刀 (B_2) 才能不赢,最多 (min(a_1,n-b_2))
这时三者不是相互独立的
引理:不会出现 (A_1) 也赢,(A_2) 也赢的情况,否则一定可以通过交换来减小胜利场数
(a_1-b_1-b_3 >0, a_1+a_2-b_1-b_3-b_2>0),与题意矛盾
那么 (a_i-b_i-b_{i-1}) 中的最大值就是答案
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, a[3], b[3];
signed main()
{
ios::sync_with_stdio(false);
cin >> n;
for (int i = 0; i < 3; i++)
cin >> a[i];
for (int i = 0; i < 3; i++)
cin >> b[i];
cout << max(max(0ll, a[0] - b[0] - b[2]), max(a[1] - b[1] - b[0], a[2] - b[2] - b[1])) << " " << min(a[0], b[1]) + min(a[1], b[2]) + min(a[2], b[0]) << endl;
}