交换瓶子【第七届】【省赛】【A组】

这篇具有很好参考价值的文章主要介绍了交换瓶子【第七届】【省赛】【A组】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目描述

有N个瓶子,编号 1 ~ N,放在架子上。

比如有5个瓶子:
2 1 3 5 4

要求每次拿起2个瓶子,交换它们的位置。
经过若干次后,使得瓶子的序号为:
1 2 3 4 5

对于这么简单的情况,显然,至少需要交换2次就可以复位。

如果瓶子更多呢?你可以通过编程来解决。

输入输出

输入格式为两行:
第一行: 一个正整数N(N<10000), 表示瓶子的数目
第二行:N个正整数,用空格分开,表示瓶子目前的排列情况。

输出数据为一行一个正整数,表示至少交换多少次,才能完成排序。

例如,输入:
5
3 1 2 5 4

程序应该输出:
3

再例如,输入:
5
5 4 3 2 1

程序应该输出:
2

资源约定

峰值内存消耗 < 256M
CPU消耗 < 3000ms

思路

这题思路很巧妙,我们可以将其转化为图论的问题求解。
首先建图,因为是1~N的,所以将a[i]指向a[a[i]],例如第一个样例。

5
3 1 2 5 4

转化成图就行如下所示。
交换瓶子【第七届】【省赛】【A组】,蓝桥杯真题,算法,c++,蓝桥杯
排好之后的图是这样的。
交换瓶子【第七届】【省赛】【A组】,蓝桥杯真题,算法,c++,蓝桥杯
所以我们的目的就是将上面的两个环,变成下面的五个环。每次交换两个点,其实就是改变了两条边的指向。比如交换3和2,就变成了2 1 3 5 4。新图就变成了:
交换瓶子【第七届】【省赛】【A组】,蓝桥杯真题,算法,c++,蓝桥杯
其实就是将一个环变成了两个环。每一次这样的交换都会导致上述结果。那么我们最终是要有 n n n 个环。所以我们只需要求出给出的数据有多少环,然后让 n n n 减去环的数量,就是最少的交换次数。文章来源地址https://www.toymoban.com/news/detail-836623.html

代码

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 10010;

int n;
int a[N];
bool st[N];

int main()
{
    cin >> n;
    for ( int i = 1; i <= n; i ++ ) cin >> a[i];
    
    int k = 0;
    
    for ( int i = 1; i <= n; i ++ )
        if ( !st[i] )
        {
            k ++;
            for ( int j = i; !st[j]; j = a[j] )
                st[j] = true;
        }
    cout << n - k << endl;
    
    return 0;
}

到了这里,关于交换瓶子【第七届】【省赛】【A组】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2022蓝桥杯冲刺(历年真题剖析,含省赛、国赛)

    大家好,我是莫若心,为了帮助兄弟们更好准备蓝桥杯比赛,我特意选取了蓝桥往年真题中许多能体现出蓝桥经典题型的题目,有需要的兄弟们可以收藏一下,后续我会继续更新蓝桥真题题型专栏,和大家一起冲击蓝桥杯 附上蓝桥杯官网地址:蓝桥杯官网 🚩🚩 题目如下 观

    2023年04月08日
    浏览(50)
  • 【蓝桥杯】历届真题 杨辉三角形 (省赛)Java

    【问题描述】         下面的图形是著名的杨辉三角形: 如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列:         1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,...         给定一个正整数N,请你输出数列中第一次出现Ⅳ是在第几个数? 【输入

    2024年02月02日
    浏览(39)
  • 第14届蓝桥杯C++省赛(初级)真题

    一、选择题(50分) 第 1 题 单选题(10分) C++中,bool类型的变量占用字节数为 ( )。 *选择题严禁使用程序验证,选择题不答或答错都不扣分 A.1 B.2 C.3 D.4 第 2 题 单选题(10分) 以下关于C++结构体的说法,正确的是 ( )。 *选择题严禁使用程序验证,选择题不答或答错都不扣分

    2024年02月05日
    浏览(36)
  • 【蓝桥杯嵌入式】蓝桥杯第十二届省赛程序真题,真题分析与代码讲解

    🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都在这儿哦,欢迎大家前往订阅本专题,获取更多详细信息哦🎏 🎏【蓝桥杯嵌入式】蓝桥杯第十届省赛真题 🎏【蓝桥杯嵌入式】蓝桥杯第十三届省赛程序真题 🪔本系列专栏 -  

    2023年04月15日
    浏览(92)
  • 【蓝桥杯冲刺】蓝桥杯11届省赛C++b组真题-填空题

    目录 试题A:门牌制作 解题思路: 答案: 试题B:既约分数 解题思路: 答案: 试题C:蛇形填数 解题思路: 答案: 试题D:跑步训练 解题思路: 答案: 试题E:七段码 解题思路: 答案: 写在最后: 小蓝要为一条街的住户制作门牌号。 这条街一共有 2020 位住户,门牌号从

    2023年04月19日
    浏览(68)
  • 【蓝桥杯冲刺】蓝桥杯11届省赛C++b组真题-编程题

    目录 试题F:成绩统计 解题思路: 代码: 试题G:回文日期 解题思路: 代码: 试题H:字串分值 解题思路: 代码:  试题I:平面切分 解题思路: 代码: 试题J:字串排序 解题思路: 写在最后: 【问题描述】 小蓝给学生们组织了一场考试,卷面总分为 100 分, 每个学生的

    2024年02月02日
    浏览(44)
  • 【蓝桥杯冲刺】蓝桥杯12届省赛C++b组真题-编程题

    目录 试题F:时间显示 解题思路 代码 试题G:砝码称重 解题思路 代码 试题H:杨辉三角 解题思路 代码 试题I:双向排序 解题思路 试题J:括号序列 解题思路 【问题描述】 小蓝要和朋友合作开发一个时间显示的网站。 在服务器上,朋友已经获取了当前的时间,用一个整数表

    2023年04月16日
    浏览(40)
  • 【蓝桥杯冲刺】蓝桥杯12届省赛C++b组真题-填空题

    目录 试题A:空间 解题思路 答案 试题B:卡片 解题思路 答案 试题C:直线 解题思路 答案 试题D:货物摆放 解题思路 答案 试题E:路径 解题思路 答案 ​编辑 写在最后: 小蓝准备用 256 MB 的内存空间开一个数组, 数组的每个元素都是 32 位二进制整数, 如果不考虑程序占用的

    2024年02月03日
    浏览(45)
  • 蓝桥杯嵌入式第十届省赛真题

    总的来说这题考点特别的少,逻辑也比我之前发的12届的停车计费简单得多,还是一样 代码结尾自取。完全免费 相对来说能从这题学到的。对我来说我觉得是 封装一些“状态”数组 。可以让代码的可读性和复用性高很多。 思路其实很简单,就是切换界面和获取adc的值,并和

    2023年04月22日
    浏览(68)
  • 【蓝桥杯嵌入式】蓝桥杯嵌入式第十四届省赛程序真题,真题分析与代码讲解

     🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都已更新完毕,欢迎大家前往订阅本专题🎏 🎏【蓝桥杯嵌入式】蓝桥杯第十届省赛真题 🎏【蓝桥杯嵌入式】蓝桥杯第十二届省赛程序真题 🎏【蓝桥杯嵌入式】蓝桥杯第十三届省

    2023年04月15日
    浏览(104)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包