链接:CF
把 1 1 1 ~ k k k 分为 4 4 4 类:两个里面都有的(1)、只在a里面的(2)、只在b里面的(3)、a和b里都没有的(4)
如果有(4),就肯定不行
如果(3)或者(2)中某一个的数量超过 k k k 的一半,也不行
否则就行
代码:
#include<bits/stdc++.h>
#define K 440000
#define M 220000
#define N 220000
#define int long long
using namespace std;
int a[N]={},b[M]={},k=0,m=0,n=0,t=0;
int hs[K]={},wh[K]={};
signed main(){scanf("%lld",&t);while(t--){scanf("%lld%lld%lld",&n,&m,&k);for(int i=1;i<=n;i++){scanf("%lld",&a[i]);}for(int i=1;i<=m;i++){scanf("%lld",&b[i]);}for(int i=1;i<=k;i++){hs[i]=0;wh[i]=-1;}for(int i=1;i<=n;i++){if(a[i]<=k&&wh[a[i]]!=1){hs[a[i]]++;wh[a[i]]=1;}}for(int i=1;i<=m;i++){if(b[i]<=k&&wh[b[i]]!=2){hs[b[i]]++;wh[b[i]]=2;}}int s1=0,s2=0;bool flag=false;for(int i=1;i<=k;i++){if(hs[i]==0){flag=true;break;}if(hs[i]==1){if(wh[i]==1){s1++;}else{s2++;}}}if(s1>k/2||s2>k/2){flag=true;}if(flag==true){printf("NO\n");}else{printf("YES\n");}}return 0;
}