3 条题解
-
2
我不满意!
看完别人O(n)的写法,
我感觉还是太吃操作了因此我决定再发一次O(1)的O(n)还是太逊了1.题意分析
你每次可以将两个互质的排列中的数字交换
根据小学的数学知识啊,我们可以知道一个长度为 n 的排列指的是一个 1∼n 各出现一次的序列,按理来说接下来我应该分析一下最大公因数,排序或者贪心对吧
NO!
完全不需要,我们可以注意到,某一个排列中必定会有1,而1是什么?1和所有数都互质! 因此,我们可以将排列中两个位置不正确的数和1交换两次位置来变相的交换两个数!比如:
1 6 3 4 5 2
这里的2,6并不互质 难道无法交换吗? NO!
- 6 1 3 4 5 2先交换1,6
- 6 2 3 4 5 1再交换2,1
- 1 2 3 4 5 6最后交换1,6(等价于直接交换了2,6)
2.AC代码
所以所有排列都可以变得有序 则:
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ int x; cin>>x; } cout<<"Yes"; return 0; }如果我们在人群里相逢,请你送我一束花,我想要成为一名艺术家谢谢
信息
- ID
- 55
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 21
- 已通过
- 11
- 上传者