原题:
![](https://i-blog.csdnimg.cn/blog_migrate/ce980a6882848b34015088abb76586a4.png)
题意:
给定一个数n,输入两个长度为n的数组a[]和b[](b[]为0或1);
当b[i]不等于b[j]时;可以交换a[i]与a[j],和a[i],a[j]对应的标记b[i],b[j],要一同交换;
最后判断数组a能否按非递减排序;
题解:
由题意可知,如果同时标记b存在0和1,则一定可以成功排序;
如果标记b只存在0或1,并且数组a初始没有排序,则不能排序;
代码:
#include<iostream>
using namespace std;
int arr[1000];
int b[1000];
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
int f = 0;
for (int i = 0; i < n; i++)
{
cin >> arr[i];
if (i > 0)
{
if (arr[i] < arr[i - 1]) //判断是否有序
f = 1;
}
}
int x = 0, y = 0;
for (int i = 0; i < n; i++)
{
cin >> b[i];
if (b[i] == 0) //统计0或1出现的次数
x++;
else
y++;
}
if (f == 1 && (x == n || y == n))
cout << "NO" << endl;
else
cout << "YES" << endl;
}
return 0;
}
总结:
一个简单的思维题,代码方面没有难度;