蓝桥杯每日一题2023.11.20

题目描述

"蓝桥杯"练习系统 (lanqiao.cn)

题目分析

方法一:暴力枚举,如果说数字不在正确的位置上也就意味着这个数必须要改变,进行改变记录即可

cpp 复制代码
#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 - 环的个数则为需要交换的个数。

cpp 复制代码
#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;
}
相关推荐
嵌入式ZYXC2 小时前
第3篇:《面试题:I2C为什么要加上拉电阻?阻值怎么选?》
stm32·单片机·嵌入式硬件·面试·职场和发展
sbjdhjd2 小时前
面试(5)| 3.5 小时面试复盘第五弹:加班出差 + 客户响应 + 压力面全拆解
经验分享·程序人生·面试·职场和发展·开源·跳槽·求职招聘
小欣加油5 小时前
leetcode2161 根据给定数字划分数组
数据结构·c++·算法·leetcode·职场和发展
sbjdhjd6 小时前
面试题完结 | 投票题 + 到岗时间 + 压力缓解
经验分享·笔记·面试·职场和发展·开源·求职招聘·印象笔记
8Qi86 小时前
LeetCode 115 & 392:不同子序列 / 判断子序列
算法·leetcode·职场和发展·动态规划
我爱cope7 小时前
【Agent智能体23 | 规划-规划工作流】
人工智能·设计模式·语言模型·职场和发展
8Qi88 小时前
LeetCode 72:编辑距离(Edit Distance)—— 题解
算法·leetcode·职场和发展·动态规划
8Qi88 小时前
LeetCode 583. 两个字符串的删除操作
算法·leetcode·职场和发展·动态规划
小欣加油10 小时前
Leetcode31 下一个排列
数据结构·c++·算法·leetcode·职场和发展
_日拱一卒10 小时前
LeetCode:39组合总和
java·算法·leetcode·职场和发展