已解决
蓝桥杯每日一题2023.11.20
来自网友在路上 183883提问 提问时间:2023-11-21 10:35:03阅读次数: 83
最佳答案 问答题库838位专家为你答疑解惑
题目描述
“蓝桥杯”练习系统 (lanqiao.cn)
题目分析
方法一:暴力枚举,如果说数字不在正确的位置上也就意味着这个数必须要改变,进行改变记录即可
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n, a[N], ans;
int main()
{cin >> n;for(int i = 1; i <= n; i ++)cin >> a[i];for(int i = 1; i <= n; i ++){if(a[i] != i){for(int j = i + 1; j <= n; j ++){if(a[j] == i){swap(a[i], a[j]);ans ++;}}}}cout << ans;return 0;
}
方法二:置换群算法,每个数字和对应位置相连可以组成一个环,如果说每个数字可以形成自环也就说明每一个数字都在自己正确的位置上,我们可以找出有几个环,n - 环的个数则为需要交换的个数。
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int a[N], n, cnt;
bool st[N];
int main()
{cin >> n;for(int i = 1; i <= n; i ++)cin >> a[i];for(int i = 1; i <= n; i ++){if(!st[i]){cnt ++;for(int j = i; !st[j]; j = a[j]){st[j] = true;}}}cout << n - cnt;return 0;
}
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"蓝桥杯每日一题2023.11.20":http://eshow365.cn/6-41148-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 什么是调试和性能分析工具?
- 下一篇: C++:利用哈希表对unordered系列容器模拟实现