解析
显然只需要考虑攻击牌,由于题目询问是否至少有一种方式使 A A A 赢,那么将 A , B A,B A,B 分别按照从大到小和从小到大排序,查看是否能够分出胜负即可。
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define inf 1e18
const int mod=1e9+7;
const int N=2e5+5;
int n,x,y,a[N],b[N];
void solve(){
cin>>n>>x>>y;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
cin>>b[i];
}
sort(a+1,a+n+1);
reverse(a+1,a+n+1);
sort(b+1,b+n+1);
int t=n+1;
for(int i=1;i<=n;i++){
if(b[i]!=-1){
t=i;
break;
}
}
for(int i=1;i<=n;i++){
if(a[i]==-1) break;
if(t==n+1) break;
x-=b[t];
t++;
y-=a[i];
if(x<=0||y<=0) break;
}
if(x>0&&y<=0) cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int tt=1;
cin>>tt;
while(tt--) solve();
return 0;
}