上次的求助后(上次求助博客:思维题库似构数组(求助)_Google_Coduck_S09235的博客-优快云博客),我深思熟虑,决定深究此题。
似构数组
时间限制:0秒 内存限制:0M
题目描述
如果数组a和数组b的两者长度相同,并且经过如下操作:
在a中选择一些元素+1。每个数最多选择一次。
随意打乱a的顺序,
如果a有可能变成b,那么小可定义a为b的“似构数组”。
给定数组a和b,请问a是否是b的似构数组。
输入描述
第一行一个正整数(1≤t≤100),代表有t组输入。
对于每组输入,第一行一个正整数(1≤≤100)n(1≤n≤100),代表两个数组的长度。
第二行n个整数(−100≤ai≤100)ai(−100≤ai≤100),代表数组a。
第三行n个整数(−100≤n≤100)bi(−100≤bi≤100),代表数组b。
输出描述
对于每组输入,如果a是b的似构数组,输出YES,否则输出NO。
样例输入
3
3 -1 1 0 0 0 2 1 0 2 5 1 2 3 4 5 1 2 3 4 5
样例输出
YES
NO
YES
我研究完后,完成此题:
#include<bits/stdc++.h>
using namespace std;
const int N=1e2+10;
int t,n,a[N],b[N];
int main(){
scanf("%d",&t);
while(t--){
scanf("%d",&n);
int flag=true;
for(int i=1;i<=n;i++){
scanf("%d",a+i);
}
for(int i=1;i<=n;i++){
scanf("%d",b+i);
}
sort(a+1,a+n+1);
sort(b+1,b+n+1);
for(int i=1;i<=n;i++){
if(b[i]-a[i]!=1&&a[i]!=b[i]){
flag=false;
break;
}
}
if(flag){
printf("YES\n");
}
else{
printf("NO\n");
}
}
return 0;
}
下期再见,拜拜!