浙江工商大学OJ第6题

jlh的童年1

Problem — 20 (zjgsu.edu.cn)

在驯龙高手中有一群被驱逐出博克岛的人被称为流放者,他们也学会了驯龙并驯服了死亡私语。在驯龙高手2中,德雷格依靠早年打仗捡到的龙王幼龙,并把它训练成了战争机器,德雷格带着他的龙王重返博克岛并想占据博克岛。

身为年轻英勇的维京勇士小嗝嗝的你,为了改变为了改变德雷格屠龙的观念,你选择了独自一人前往挑战德雷格。

于是德雷格邀请玩这个游戏,如果你赢了,他保证从此不屠龙,如果你输了,那么你的性命就难保了~

游戏规则如下,你和德雷格轮流取石子,每次取的数量只能是2的自然数幂次,比如(12,4,8,16...),谁取完石子谁就获胜。假设每次都是你先去,并且你和德雷格都足够聪明。

#include <bits/stdc++.h>
using namespace std;

int main() 
{
    int t;
    cin >>t ;
    int x[100]={0};
    for (int i = 0; i < t; i++)
    {
        int n;
        int a, b, c, d;
        int max, min;
        int judge = 0;
        cin >> n;
        for (int j = 0; j < n; j++)
        {
            if (j ==0)
            {
                cin >> c;
                cin >> d;
            }
            else if (j == 1)
            {
                b = d;
                a = c;
                cin >> c;
                cin >> d;
                //跳跃的距离会在b-a和c-a之间
                min = b - a;
                
                max = c - a;
                //并且应该会更新,min不会变小,如果变小了,此前的跳不过去了
                //max不会变大
                //min什么时候变大呢,min是能跳过去的最短距离,所以当b-a或者d-c>min,min会变大
                //而max是c-a<max,此时会变小
                (b - a) > min ? min = (b - a) : min = min;
                (d - c) > min ? min = (d - c) : min = min;
                (c - a) < max ? max = (c - a) : max = max;
                //到这里更新完了,该判断条件了,应该是判断
                if (min <= max && b <= c&&min>=b-a&&min>=d-c)
                {
                    
                }
                else
                {
                    judge = 1;
                    break;
                }
            }
            else
            {
                b = d;
                a = c;
                cin >> c;
                cin >> d;
                (b - a) > min ? min = (b - a) : min = min;
                (d - c) > min ? min = (d - c) : min = min;
                (c - a )< max ? max = (c - a) : max = max;
                if (min <= max && b <= c && min >= b - a && min >= d - c)
                {
                }
                else
                {
                    judge = 1;
                    break;
                }
            }

        }
        if (judge == 0)
        {
            x[i] = 1;
        }
    }
    for (int i = 0;i < t; i++)
    {
        if (x[i] == 0)
        {
            cout << "NO" << endl;
        }
        else
            cout << "YES" << endl;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值