Codeforces Round #648 (Div. 2) 参与排名人数13231
[codeforces 1365B] Trouble Sort 只要存在b[i]!=b[j],就一定能换成最后的非递减序列
总目录详见https://blog.csdn.net/mrcrack/article/details/103564004
在线测评地址https://codeforces.com/contest/1365/problem/B
Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|
B - Trouble Sort | GNU C++17 | Accepted | 46 ms | 0 KB |
数据模拟如下
Input:
8
3
3 2 1
0 0 0
3
3 2 1
0 0 1
3
3 2 1
0 1 0
3
3 2 1
0 1 1
3
3 2 1
1 0 0
3
3 2 1
1 0 1
3
3 2 1
1 1 0
3
3 2 1
1 1 1
Output:
No
Yes
Yes
Yes
Yes
Yes
Yes
No
数据模拟如下
3
3 2 1
0 0 0
输出No
3
3 2 1
0 0 1
3和1互换
1 2 3
1 0 0
输出Yes
3
3 2 1
0 1 0
3和2互换
2 3 1
1 0 0
2和1互换
1 3 2
0 0 1
3和2互换
1 2 3
0 1 0
输出Yes
3
3 2 1
0 1 1
3和1互换
1 2 3
1 1 0
输出Yes
3
3 2 1
1 0 0
3和1互换
1 2 3
0 0 1
输出Yes
3
3 2 1
1 0 1
2和1互换
3 1 2
1 1 0
2和3互换
2 1 3
0 1 1
2和1互换
1 2 3
1 0 1
输出Yes
3
3 2 1
1 1 0
3
3和1互换
1 2 3
0 1 1
输出Yes
3 2 1
1 1 1
输出No
可以看到,只要存在b[i]!=b[j],就一定能换成最后的非递减序列。
AC代码如下
#include <stdio.h>
#define maxn 510
int a[maxn],b[maxn];
int main(){
int t,n,i,j,cnt,flag;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
for(i=1;i<=n;i++)scanf("%d",&b[i]);
cnt=0,flag=0;
for(i=1;i<=n;i++)
if(b[i])cnt++;
if(cnt==0||cnt==n){//a数值不可交换
for(i=2;i<=n;i++)
if(a[i-1]>a[i]){flag=1;break;}
}
if(!flag)printf("Yes\n");
else printf("No\n");
}
return 0;
}