A. 我们只需要某行某列没有m即可 所以让n>m即可
#include <bits/stdc++.h>
using namespace std;
void solve(){
int n,m;cin>>n>>m;
for(int i=1;i<=m;i++){
int x;cin>>x>>x;
}
if(n>m)cout<<"YES\n";
else cout<<"NO\n";
}
int main(){
int t;cin>>t;
while(t--){
solve();
}
}
B.贪心去除最大的魔法即可
#include <bits/stdc++.h>
using namespace std;
void solve(){
int n;cin>>n;int a[n],b[n];long long sum=0;
for(int i=1;i<=n;i++)cin>>a[i];
for(int j=1;j<=n;j++)cin>>b[j];
sort(b+1,b+n+1);
for(int i=1;i<=n;i++){
sum+=a[i]+b[i];
}
sum-=b[n];
cout<<sum<<'\n';
}
int main(){
int t;cin>>t;
while(t--){
solve();
}
}
C.我们需要让Alice每次都拿相对大的 让bob每次都拿最小的 所以按照要求二分每个k即可
#include <bits/stdc++.h>
using namespace std;
int n;int a[110];
bool check(int k){
for(int i=1,l=0,r=n;i<=k;i++){
while(l<r&&a[r]>k-i+1)r--;
if(l>=r)return 0;
l++;r--;
}
return 1;
}
void solve(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+1+n);
for(int i=n;i>=0;i--){
if(check(i)){
cout<<i<<'\n';
break;
}
}
}
int main(){
int t;cin>>t;
while(t--){
solve();
}
}