题目链接
题目翻译:
给你两个数组a和b,每个数组由n个整数组成,以及一个整数x。请判断是否可以通过重排b中的元素,使得ai + bi ≤ x对任何 i 都成立(1 ≤ i ≤ n)。
数组a和数组b中的元素都将以非递减的顺序读入。每个测试用例之间将以空行分隔。
解题思路:
为了让所有两个数的和尽可能小,最好的组合是 “最小值”+“最大值”
所以只需要依次判断数组a剩余的数中的最小值+b剩余的数中的最大值是否小于等于x。
代码:
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<cstdio>
#include<cmath>
#define inf 0x3f3f3f3f
using namespace std;
const int N=100;
int main(){
// freopen("1.txt","r",stdin);
int t,n,m,a[N],b[N];
cin>>t;
while(t--){
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
cin>>b[i];
}
int flag=0;
for(int i=0;i<n;i++){
if(a[i]+b[n-i-1]>m){
flag=1;
break;
}
}
if(flag==0){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
}
return 0;
}
总结:
感觉这么简单的题,我都有点讲不清了。