当前位置: 首页 > news >正文

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

题目链接

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

题目描述

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

比如有 5 5 5 个瓶子:

2,1,3,5,4

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

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

1,2,3,4,5

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

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

输入格式

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

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

输出格式

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

输入输出样例
输入
5
3 1 2 5 4
输出
3
输入
5
5 4 3 2 1
输出
2
数据范围
  • N ≤ 10000 N \leq 10000 N10000

解法:贪心

对于 a [ i ] a[i] a[i] :

  • 如果 a [ i ] a[i] a[i] 在其正确的位置上,即 a [ i ] = i a[i] = i a[i]=i,那就跳过;

  • 对于 a [ i ] a[i] a[i] 不在它正确的位置上,即 a [ i ] ≠ i a[i] \neq i a[i]=i,就要从 [ i + 1 , n ] [i + 1, n] [i+1,n] 中找到元素 i i i 的位置 j j j,即 a [ j ] = i a[j] = i a[j]=i。此时需要交换 ( a [ i ] , a [ j ] ) (a[i], a[j]) (a[i],a[j]),交换次数加一。

时间复杂度: O ( n 2 ) O(n^2) O(n2)

C++代码:

#include <iostream>
#include <cstring>
#include <vector>
#include <functional>
#include <unordered_set>
#include <set>
#include <algorithm>using namespace std;
using LL = long long;void solve(){int n;cin>>n;vector<int> a(n + 5);for(int i = 1;i <= n;i++) cin>>a[i];int ans = 0;for(int i = 1;i <= n;i++){if(a[i] != i) //不在正确的位置上,需要交换{ans++;for(int j = i + 1;j <= n;j++){if(a[j] == i){swap(a[i], a[j]);break;}}}}cout<<ans<<'\n';}int main(){int t = 1;//cin>>t;while(t--){solve();}return 0;
}

Java代码:

import java.io.*;
import java.util.*;public class Main
{static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));public static void main(String[] args) throws Exception{int n = Integer.parseInt(in.readLine().trim());String[] str = in.readLine().split(" ");int[] a = new int[n + 5];for(int i = 0;i < n;i++){a[i + 1] = Integer.parseInt(str[i]);}int ans = 0;for(int i = 1;i <= n;i++){if(a[i] != i){ans++;for(int j = i + 1;j <= n;j++){if(a[j] == i){int temp = a[i];a[i] = a[j];a[j] = temp;break;}}}}System.out.println(ans);}
}

相关文章:

  • Docker安装mysql并且设置主从
  • el-upload上传图片图片、el-load默认图片重新上传、el-upload初始化图片、el-upload编辑时回显图片
  • 迅饶科技 X2Modbus 网关 GetUser 信息泄露漏洞复现
  • Linux :进程的程序替换
  • git 标签功能操作以及回退
  • ES 7.12官网阅读-ILM(index lifecycle management)
  • 【ARM 嵌入式 C 文件操作系列 20.1 -- 从 A文件的 n 行开始 拷贝 m行到 B文件中】
  • 如何从屏幕破损的 Android 手机恢复数据?
  • 数据结构——队列(包括循环队列)——Java版
  • STM32 uC/OS-III
  • 致命?泛微服务器权限失陷【附利用脚本】
  • 【C+ +】第一个C+ + 项目的创建及namespace命名空间解释C++中的输入输出
  • 【JavaScript编程】前端实现文件下载
  • 【HTML】简单制作一个3D动画效果重叠圆环
  • 每天学习python30min(第四天)--调类与继承代码
  • ubuntu 下nginx安装 并支持https协议
  • underscore源码剖析之整体架构
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 代理模式
  • 关于Flux,Vuex,Redux的思考
  • 好的网址,关于.net 4.0 ,vs 2010
  • 基于 Babel 的 npm 包最小化设置
  • 强力优化Rancher k8s中国区的使用体验
  • 一起参Ember.js讨论、问答社区。
  • ionic异常记录
  • (145)光线追踪距离场柔和阴影
  • (4) PIVOT 和 UPIVOT 的使用
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (实战篇)如何缓存数据
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET Framework杂记
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .net下的富文本编辑器FCKeditor的配置方法
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • [2016.7 test.5] T1
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [bzoj 3124][sdoi 2013 省选] 直径
  • [CF407E]k-d-sequence
  • [CodeForces-759D]Bacterial Melee
  • [EFI]Dell Latitude-7400电脑 Hackintosh 黑苹果efi引导文件
  • [hdu4622 Reincarnation]后缀数组
  • [Hibernate] - Fetching strategies
  • [IE编程] 如何在IE8 下调试BHO控件/工具栏(调试Tab进程)
  • [JS]变量
  • [MRCTF2020]Ez_bypass1
  • [RK3568 Android11] Binder通信整体框架
  • [SQL开发笔记]UPDATE 语句:更新表中的记录
  • [svc]ftp协议数据连接的2种模式
  • [VTK]基于VTK的三维重建
  • [Windows Server 2003] IIS自带FTP安装及配置方法
  • [Windows编程] Windows 7 对多核的支持
  • [XS2123] 集成功率 MOSFET V1.0, IEEE 802.3af 兼容的 PD 和 DC/DC 控制器
  • [存档]名词解释
  • [代码]--c#实现屏幕取词源码下载