【洛谷 P8637】[蓝桥杯 2016 省 B] 交换瓶子 题解(贪心算法)

[蓝桥杯 2016 省 B] 交换瓶子

题目描述

N N N 个瓶子,编号 1 ∼ N 1 \sim N 1N,放在架子上。

比如有 5 5 5 个瓶子:

2 , 1 , 3 , 5 , 4 2,1,3,5,4 2,1,3,5,4

要求每次拿起 2 2 2 个瓶子,交换它们的位置。

经过若干次后,使得瓶子的序号为:

1 , 2 , 3 , 4 , 5 1,2,3,4,5 1,2,3,4,5

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

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

输入格式

第一行:一个正整数 N N N N < 10000 N<10000 N<10000),表示瓶子的数目。

第二行: N N N 个正整数,用空格分开,表示瓶子目前的排列情况。

输出格式

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

样例 #1

样例输入 #1

5
3 1 2 5 4

样例输出 #1

3

样例 #2

样例输入 #2

5
5 4 3 2 1

样例输出 #2

2

提示

时限 1 秒, 256M。蓝桥杯 2016 年第七届省赛

蓝桥杯 2016 年省赛 B 组 I 题。


思路

  1. 当瓶子编号等于位置索引时,位置正确。如果某个瓶子的位置不正确,此时把瓶子放到它的编号对应的位置即可。
  2. 参与交换的瓶子的位置一定是双方都是不正确的,不存在一个正确另一个不正确的情况。而位置正确的瓶子,一定不参与交换。
    如果瓶子A的位置不正确,把瓶子放到它的编号对应的位置即可,不妨假设此时与瓶子A交换的是瓶子B。而对于被交换来的瓶子A替换掉的瓶子B,既然B占据的位置是属于A的,那B的位置也是不正确的。

首先,定义一个整数 n 来存储瓶子的数量,定义一个长整型 ans 来存储交换的次数,定义两个数组 ab 来存放瓶子的编号。

接下来,从输入中读取瓶子的数量 n,并将瓶子的编号存入数组 a 中。

然后,通过两层循环来实现瓶子的交换。外层循环从 1 遍历到 n,内层循环则是在当前瓶子的编号不等于其位置时进行。在内层循环中,交换当前瓶子和编号为当前瓶子编号的瓶子的位置,并将交换次数 ans 加 1。

最后,输出交换的次数 ans


AC代码

#include <algorithm>
#include <iostream>
#define mp make_pair
#define AUTHOR "HEX9CF"
using namespace std;
using ll = long long;const int N = 1e6 + 7;
const int INF = 0x3f3f3f3f;
const ll MOD = 1e9 + 7;int n;
ll ans = 0;
int a[N], b[N];int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n;for (int i = 1; i <= n; i++) {cin >> a[i];}for (int i = 1; i < n; i++) {for (int j = a[i]; a[j] != j; j = i) {// cout << i << " " << j << endl;swap(a[j], a[a[j]]);ans++;}}cout << ans;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/746464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解释器模式(Interpreter Pattern)

解释器模式 说明 解释器模式&#xff08;Interpreter Pattern&#xff09;属于行为型模式&#xff0c;是指给定一门语言&#xff0c;定义它的语法&#xff08;文法&#xff09;的一种表示&#xff0c;并定义一个解释器&#xff0c;该解释器使用该表示来解释语言中的句子。是一…

[NSSRound#18 Basic]web解析

文章目录 门酱想玩什么呢&#xff1f;Becomeroot 门酱想玩什么呢&#xff1f; 打开题目&#xff0c;加载完视频后要求我们给个游戏链接 点开评论区不难发现应该是想玩元梦之星&#xff0c;这里有个评论功能可以上传图片 我们随便输入点东西发现是插入并赋值到content元素里面 …

提示找不到MSVCP140.dll无法继续执行此代码的多种解决方法

当计算机系统在运行过程中突然提示“丢失MSVCP140.dll”这一错误信息时&#xff0c;意味着系统无法找到并加载这个至关重要的动态链接库文件。MSVCP140.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;对于许多基于Windows的应用程序来说&#xff0c;尤其…

Exam in MAC [容斥]

题意 思路 正难则反 反过来需要考虑的是&#xff1a; (1) 所有满条件一的(x,y)有多少对&#xff1a; x 0 时&#xff0c;有c1对 x 1 时&#xff0c;有c对 ...... x c 时&#xff0c;有1对 以此类推 一共有 (c2)(c1)/2 对 (2) 符合 x y ∈ S的有多少对&#xff1a…

openssl3.2 - note - Getting Started with OpenSSL

文章目录 openssl3.2 - note - Getting Started with OpenSSL概述笔记openssl 历史版本Configure 选项开关支持的OSopenssl 文档简介安装新闻每个平台的安装文档支持的命令列表配置文件格式环境变量 END openssl3.2 - note - Getting Started with OpenSSL 概述 看到官方文档…

物联网技术助力智慧城市转型升级:智能、高效、可持续

目录 一、物联网技术概述及其在智慧城市中的应用 二、物联网技术助力智慧城市转型升级的路径 1、提升城市基础设施智能化水平 2、推动公共服务智能化升级 3、促进城市治理现代化 三、物联网技术助力智慧城市转型升级的成效与展望 1、成效显著 2、展望未来 四、物联网技…

Java中文乱码问题解析与解决方案

在日常工作中&#xff0c;我们经常会遇到中文乱码的问题。乱码问题不仅影响用户体验&#xff0c;还可能导致数据丢失或解析错误。因此&#xff0c;了解和掌握中文乱码问题的原因和解决方案&#xff0c;对于Java开发者来说至关重要。本文将分析常见的Java中文乱码场景&#xff0…

Python chardet.detect 字符编码检测

chardet.detect 是 Python 的一个库&#xff0c;用于检测给定字节串的字符编码。其检测原理基于统计学方法。 具体来说&#xff0c;chardet.detect 使用了一种叫做统计字符 n-gram&#xff08;通常为 n1 或 n2&#xff09;的方法。它会统计字节串中每个字符或字符对出现的频率…

【C++初阶】C++入门(上)

C的认识 ①什么是C&#xff1f; ​ C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。 ​ 于是1982年&#xff0c;Bjarne Stroustrup&#xff08;本…

D-阿洛酮糖-DAEase酶固定化载体及混合糖液分离

#D-阿洛酮糖-DAEase酶固定化载体及混合糖液分离 ​阿洛酮糖为白色固体晶体&#xff0c;无气味&#xff0c;具有较大的溶解度&#xff0c;柔和的口感&#xff0c;其具有传统甜味剂蔗糖70%的甜度&#xff0c;却几乎不提供任何热量。其与食物中的蛋白质&#xff0c;如鸡蛋蛋白发生…

ntp 部署

文章目录 简介ntp和ntpdate区别环境准备启动 简介 ntp全名 network time protocol 。NTP服务器可以为其他主机提供时间校对服务 ntp和ntpdate区别 两个服务都是centos自带的&#xff08;centos7中不自带ntp&#xff09;。ntp的安装包名是ntp&#xff1b;ntpdate的安装包是ntp…

【leetcode+深度/广度优先搜索】841. 钥匙和房间 (DFS,BFS)

leetcode-cn&#xff1a;leetcode面试75道精华&#xff1a;https://leetcode.cn/studyplan/leetcode-75/ 841.钥匙和房间&#xff1a;https://leetcode.cn/problems/keys-and-rooms/description/ 一、题目&#xff1a;841. 钥匙和房间 有 n 个房间&#xff0c;房间按从 0 到 n…

一对多文件传输该如何优化?

在数字化转型的浪潮中&#xff0c;企业对高效、安全的一对多文件传输需求日益增长。传统的文件传输方式&#xff0c;如纸质文件、电子邮件和FTP等&#xff0c;虽然在某些场景下仍然发挥作用&#xff0c;但在处理大规模、高频率的数据传输时&#xff0c;它们的局限性逐渐显现。本…

C#学习汇总

C#学习汇总 1.C#编程基础 C#语法C#使用变量 2.控制程序流程和转换类型 C#控制台应用程序C#选择语句和迭代语句C#类型转换 3.编写函数 C#编写函数 4.使用面向对象 C#构建类库C#在字段中存储数据C#写入和调用方法C#使用属性和索引器控制访问 5.实现接口和继承类 C#接口…

详细介绍Seq2Seq、Attention、Transformer !!

文章目录 前言 1、Seq2Seq工作原理 核心思想 工作原理 Encoder&#xff08;编码器&#xff09; Dncoder&#xff08;解码器&#xff09; 2、Attention工作原理 核心逻辑&#xff1a;从关注全部到关注重点 工作原理 Encoder&#xff08;编码器&#xff09; Decoder&#xff08;解…

Pytorch:多模态大模型预训练、大模型微调:加载数据的正确姿势

对于近期兴起的多模态大模型的预训练和微调&#xff0c;常见情况是训练数据规模极大&#xff0c;通常可以达到1m-100m级别。此时&#xff0c;训练数据通常用一个上百万行的jsonl文件存储&#xff0c;每行对应一条json格式的训练数据&#xff0c;其中可能包括数据关联的其他图、…

Simple and Scalable Strategies to Continually Pre-train Large Language Models

Simple and Scalable Strategies to Continually Pre-train Large Language Models 相关链接&#xff1a;arxiv 关键字&#xff1a;Large Language Models、Pre-training、Continual Learning、Distribution Shift、Adaptation 摘要 大型语言模型(LLMs)通常会在数十亿个tokens…

vue实现微信自带浏览器分享(小卡片形式)

注意&#xff1a;只能在微信自带浏览器打开进行分享 1.图片效果 2.cdn引入weixin-js-sdk的依赖 在index.html中引入 <script src"https://res2.wx.qq.com/open/js/jweixin-1.6.0.js"></script>2.在assets/js文件夹中创建share.js文件 import axios fr…

KeyError,Python使用DDT,抛KeyError异常

目录 Python使用DDT&#xff0c;抛KeyError异常 报错&#xff1a; line 158, in testFace print("kwargs[logName]&#xff1a;",kwargs["logName"]) KeyError: logName运行demo test_Data [{"logName": "shutDownTakePictureFaceLog&q…

c 语言stdlib.h介绍

stdlib.h介绍 stdlib.h 是 C 语言的标准库头文件&#xff0c;它包含了许多与内存分配、随机数生成、字符串转换和其他常用函数相关的函数原型和宏定义。 内存管理函数 malloc()&#xff1a;用于分配指定字节数的内存空间。 void* malloc(size_t size);其中&#xff0c;size…