3 条题解

  • 2
    @ 2026-1-21 14:45:01

    我不满意!

    看完别人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
    上传者