jlh的童年1
在驯龙高手中有一群被驱逐出博克岛的人被称为流放者,他们也学会了驯龙并驯服了死亡私语。在驯龙高手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;
}
}