似构数组
时间限制:0秒 内存限制:0M
题目描述
如果数组aa和数组bb的两者长度相同,并且经过如下操作:
在aa中选择一些元素+1+1。每个数最多选择一次。
随意打乱aa的顺序,
如果aa有可能变成bb,那么小可定义aa为bb的“似构数组”。
给定数组aa和bb,请问aa是否是bb的似构数组。
输入描述
第一行一个正整数t(1\leq t\leq 100)t(1≤t≤100),代表有tt组输入。
对于每组输入,第一行一个正整数n(1\leq n\leq 100)n(1≤n≤100),代表两个数组的长度。
第二行nn个整数a_i(-100\leq a_i\leq 100)ai(−100≤ai≤100),代表数组aa。
第三行nn个整数b_i(-100\leq b_i\leq 100)bi(−100≤bi≤100),代表数组bb。
输出描述
对于每组输入,如果aa是bb的似构数组,输出YESYES,否则输出NONO。
样例输入
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=1000;
int t,n,a[N],b[N];
int main(){
cin>>t;
for(int i=1;i<=t;i++){
cin>>n;
for(int j=1;j<=n;j++){
cin>>a[j];
}
for(int j=1;j<=n;j++){
cin>>b[j];
}
bool flag=false;
for(int j=1;j<=n;j++){
if(a[j]+1==b[j]||a[j]==b[j]){
flag=true;
}
}
if(flag==true){
cout<<"YES"<<'\n';
}
else{
cout<<"NO"<<'\n';
}
}
return 0;
}
调试后是这样:
眼看数据对了,马上提交,结果让人意想不到:
然后,改了一下代码:
#include<bits/stdc++.h>
using namespace std;
const int N=1000;
int t,n,a[N],b[N];
int main(){
cin>>t;
for(int i=1;i<=t;i++){
cin>>n;
for(int j=1;j<=n;j++){
cin>>a[j];
}
for(int j=1;j<=n;j++){
cin>>b[j];
}
bool flag=false;
sort(a+1,a+n+1);
sort(b+1,b+n+1);
for(int j=1;j<=n;j++){
if(a[j]+1==b[j]||a[j]==b[j]){
flag=true;
}
}
if(flag==true){
cout<<"YES"<<'\n';
}
else{
cout<<"NO"<<'\n';
}
}
return 0;
}
加了个sort后认为对了,结果调试正确,答案我不说你也知道
调试:
完全正确
答案,哎,还是和原来一样!!!
有会的c++者帮帮我!