1 条题解
-
0
关键思路:
如果至少存在一个类型为 的元素并且至少存在一个类型为 的元素,那么我们总是可以对数组进行排序。
解法:
-
如果所有元素都属于同一类型,则无法交换任意两个元素。此时,我们只需检查给定的元素是否已经按非递减顺序排列。
-
否则,至少存在一个类型为 的元素和至少一个类型为 的元素。在这种情况下,可以交换任意两个元素!我们可以仅用一次操作交换两个不同类型的元素。假设我们想交换两个相同类型 和 的元素,可以通过 次操作完成:
- 选择一个类型与 、 不同的元素 。
- 先交换 和 ,
- 再交换 和 ,
- 最后交换 和 。
这样操作之后, 回到初始位置,而 和 被交换了。这实际上就是使用一个临时变量来交换两个整数的方法。
由于我们可以交换任意两个元素,在这种情况下,总能对数组进行排序。
时间复杂度:。
#include <bits/stdc++.h> using namespace std; #define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define endl "\n" #define int long long const int N = 1e3 + 5; int n; int a[N], b[N]; int32_t main() { IOS; int t; cin >> t; while(t--) { cin >> n; bool sorted = 1, have0 = 0, have1 = 0; for(int i = 1; i <= n; i++) { cin >> a[i]; if(i >= 2 && a[i] < a[i - 1]) sorted = 0; } for(int i = 1; i <= n; i++) { cin >> b[i]; if(!b[i]) have0 = 1; else have1 = 1; } if(have0 && have1) cout << "Yes" << endl; else if(sorted) cout << "Yes" << endl; else cout << "No" << endl; } return 0; } -
- 1
信息
- ID
- 6978
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者