以为是思维题,没想倒是暴力枚举。但暴力也算是一种思维,想问题不能太局限。不过这种for循环构造数组的方式还是第一次见到。
// #pragma GCC optimize (2)
// #pragma G++ optimize (2)
#include <iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#define endl '\n'
#define int long long
#define lowbit(x) x&(-x)
#define rep(i,a,n) for(int i=a;i<=n;i++)
using namespace std;
typedef long long ll;
const int N=5;
int a[N],b[N],c[N];
bool check1()
{
int i,j,win=0,lose=0;
for(i=1;i<=4;i++)
for(j=1;j<=4;j++)
if(a[i]>b[j])win++;
else if(a[i]<b[j])lose++;
if(win<=lose)return 0;
win=lose=0;
for(i=1;i<=4;i++)
for(j=1;j<=4;j++)
if(b[i]>c[j])win++;
else if(b[i]<c[j])lose++;
if(win<=lose)return 0;
win=lose=0;
for(i=1;i<=4;i++)
for(j=1;j<=4;j++)
if(c[i]>a[j])win++;
else if(c[i]<a[j])lose++;
if(win<=lose)return 0;
return 1;
}
bool check2()
{
int i,j,win=0,lose=0;
for(i=1;i<=4;i++)
for(j=1;j<=4;j++)
if(b[i]>a[j])win++;
else if(b[i]<a[j])lose++;
if(win<=lose)return 0;
win=lose=0;
for(i=1;i<=4;i++)
for(j=1;j<=4;j++)
if(c[i]>b[j])win++;
else if(c[i]<b[j])lose++;
if(win<=lose)return 0;
win=lose=0;
for(i=1;i<=4;i++)
for(j=1;j<=4;j++)
if(a[i]>c[j])win++;
else if(a[i]<c[j])lose++;
if(win<=lose)return 0;
return 1;
}
void solve()
{
for(c[1]=1;c[1]<=10;c[1]++)
for(c[2]=1;c[2]<=10;c[2]++)
for(c[3]=1;c[3]<=10;c[3]++)
for(c[4]=1;c[4]<=10;c[4]++)
if(check1()||check2())
{
cout<<"yes"<<endl;
return;
}
cout<<"no"<<endl;
return;
}
signed main()
{
int T;scanf("%lld",&T);
while(T--)
{
for(int i=1;i<=4;i++)scanf("%lld",&a[i]);
for(int i=1;i<=4;i++)scanf("%lld",&b[i]);
solve();
}
return 0;
}