codeforces1426E. Rock, Paper, Scissors

题意:a b两人石头剪刀布共出n次,分别给出每个人的三种可能次数,求a赢的最小次数和最大次数

最大次数即取a三种状态和b对应状态的最小值相加

最小次数,对于a的每种状态a_i,使这种状态平局和失败的次数最大,即抵消a_i, bi + b_{(i-1)}中的最小值, 此时a b两人可能都剩一种状态或全0; 对于每种状态,a_i, bi + b_{(i-1)}最大值若等于a_i,此时其他两种状态一种为平局一种为失败,剩余a_i - b_i - b_{i-1}即为最小答案.

#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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值