2022“杭电杯”中国大学生算法设计超级联赛(7)D、H

D

根据题意有四种方块,左右都白、左白右黑、左黑右白和左右都黑,其中黑与黑面连在一起可以认为是合成一块,那么求最少和最多就依据贪心的思想,最少肯定是尽可能的黑与黑碰在一起,最多肯定是尽可能地让黑与黑碰不到一起

最少的情况:优先把左右都黑的放在一起,然后最左边可以放一个左白右黑,最右边可以放一个左黑右白,然后考虑左白右黑和左黑右白,两块可以合成一块,剩下的左右都白只能单独

最多的情况:优先在左右都黑的两边放上左右都白,放完后优先在最左边优先放左黑右白,在最右边优先放左白右黑,将他们和左右都黑可以搭配使用,总归是判定为一个

AC代码:

#include <bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<n;i++)
using namespace std;
using LL = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int T;
    cin >> T;
    rep (oo, 0, T) {
        int E, L, R, B;
        cin >> E >> L >> R >> B;
        int minn = 0, maxx = 0;
        int E1, L1, R1, B1;
        E1 = E, L1 = L, R1 = R, B1 = B;
        if (B > 0) {
            if (L > 0) {
                L--;
            }
            if (R > 0) {
                R--;
            }
            minn++;
        }
        minn += min({L, R});
        int x = min({L, R});
        L -= x;
        R -= x;
        minn += E + L + R;
        if (E1 >= B1) {
            maxx = E1 + B1 + R1 + L1;
        }
        else {
            if (B1 > 0) {
                maxx++;
                B1--;
            }
            B1 -= E1;
            maxx += 2 * E1;
            if (L1 + R1 >= B1) {
                maxx += B1;
                maxx += L1 + R1 - B1;
            }
            else {
                maxx += L1 + R1;
            }
        }
        cout << minn << " " << maxx << '\n';
    }

    return 0;
}

H

a,b,c三边要保证构成三角形,每次选择一条边减去一个正整数,最后不能走的人算输,这个可以想成取石头博弈,那么取石头博弈的最终是没有石头,而这个题的最终是三边都为1的时候相当于没石头了

AC代码:

#include <bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<n;i++)
using namespace std;
using LL = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int T;
    cin >> T;
    rep (oo, 0, T) {
        int a, b , c;
        cin >> a >> b >> c;
        a--, b--, c--;
        if (a ^ b ^ c) {
            cout << "Win\n";
        }
        else {
            cout << "Lose\n";
        }
    }

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值