题目链接:点击查看

题目大意:给出一个数列 n ,要求通过交换使其从小到大排序的最小次数

题目分析:第一反应是求逆序对,把之前做过的题目贴过来结果只过了 10% ,静下心来又读了一下题,发现这个题目要求交换的两个数字并不要求相邻,这就变成了一个思维题了,可以从循环节的角度出发,首先达到最终目标的循环节一定有 n 个,因为每个数字都是单独的一个循环节,思考一下每次交换会发生什么结果,因为交换的话肯定会使得至少一个数到达属于自己的位置,那么这个数字就单独形成了一个循环节,换句话说,这个数字从原来的循环节中分裂出来了,再换句话说,每次操作后,一定会使循环节的个数增加一个,那么这道题目的答案就是 n - 循环节的个数 了

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<unordered_map>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e5+100;int a[N],n;bool vis[N];vector<int>disc;void discreate()//离散化
{sort(disc.begin(),disc.end());disc.erase(unique(disc.begin(),disc.end()),disc.end());for(int i=1;i<=n;i++)a[i]=lower_bound(disc.begin(),disc.end(),a[i])-disc.begin()+1;
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("input.txt","r",stdin);
//  freopen("output.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",a+i);disc.push_back(a[i]);}discreate();int ans=n;for(int i=1;i<=n;i++)if(!vis[i]){ans--;int pos=i;while(!vis[pos]){vis[pos]=true;pos=a[pos];}}printf("%d\n",ans);return 0;
}

牛客 - 交换(思维+找循环节)相关推荐

  1. 嫦娥奔月(KMP,找循环节)及其扩展KMP

    问题描述 <归妹>卦辞为:昔者恒我(姮娥)窃毋死之药于西王母,服之以(奔)月.将往,而枚占于有黄.有黄占之曰:"吉.翩翩归妹,独将西行.逢天晦芒,毋惊毋恐,后且大昌". ...

  2. 生成树(光棍 牛客, 思维)

    链接:https://ac.nowcoder.com/acm/contest/223/A 来源:牛客网 题目描述 你有一张n个点的完全图(即任意两点之间都有无向边) 现在给出这张图的两棵生成树 定义一 ...

  3. 牛客网--牛牛找工作

    题目描述 为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬.牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作.在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作, ...

  4. 牛客 - Hash(思维+进制转换)

    题目链接:点击查看 题目大意:给出一个长度为 6 的字符串 s ,再给出模数 mod,现在规定哈希值为如下运算: const int LEN = 6; int mod; int Hash(char s ...

  5. 关于python循环结构以下选项中描述错误的是 牛客_关于Python循环结构,以下选项中描述错误的是...

    [单选题]下列低压电器中可以实现过载保护的有( ) (5.0分) [判断题]交流接触器铁芯嵌有铜短路环可用于消除吸合震动和噪声. (5.0分) [简答题]电机起动时电流很大,为什么热继电器不会动作? ...

  6. 牛客 - 字典序(思维)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a ,构造 s[ i ] 是数列 a 去掉 a[ i ] 后的数列,现在需要对 s 排序,输出排序后的结果 题目分析:一提到排序,可以试着写一 ...

  7. 牛客月赛思维题使徒袭来

    使徒袭来 参考均值不等式 得到: 3×x1x2x33≤x1+x2+x33\times\sqrt[3]{x_1x_2x_3}\leq x_1+x_2+x_3 3×3x1​x2​x3​​≤x1​+x2​+ ...

  8. 牛客网循环输入输出测试——C语言scanf和printf用法

    在实际的编程中需要自己写出完整的程序,预留好输入的接口,使用while循环接收多个测试用例,C语言在输出时printf要用换行"\n". 字符串输入输出问题见博客:牛客网字符/字符 ...

  9. 2020 牛客多校第一场

    2020 牛客多校第一场 A. B-Suffix Array 后缀数组的思想:倍增+桶排序的方式找出一串连续序列后缀的大小.虽说正常使用的时候都是字典序,但是只要修改排序方式,也能够达到一个类似的&q ...

最新文章

  1. 第四章 Controller接口控制器详解(5)——跟着开涛学SpringMVC
  2. 【图论专题】无向图的双连通分量
  3. 官方解读,谷歌“T5”模型,如何突破迁移学习局限,实现多基准测试SOTA
  4. 【郭林专刊】10个步骤让你成为高效的Web开发者
  5. 基于springmvc、ajax,后台连接数据库的增删改查
  6. ARC068C - Snuke Line
  7. Ubuntu 14.04安装和卸载搜狗拼音输入法
  8. 数据协作如何解决大数据的大问题
  9. matlab的电路仿真,Matlab电路仿真
  10. Java 实现数据库导出Excle
  11. android系统测试模式,Framework基础:手机如何进入meta测试模式
  12. android最佳投屏,Android投屏神器(scrcpy使用教程)
  13. 基于支持向量机的图像分类(上篇)
  14. java类private_Java访问类中private属性和方法
  15. Hadoop2.7.2 分布式集群搭建(CentOS 7)
  16. 无线测温采集设备及无线测温监控系统的选型指导-安科瑞王婧
  17. 3年经验Java程序员面阿里P6 差距在哪里
  18. 数据结构 笔记--向量 C++ 语言版 邓俊辉老师
  19. 前端展示中实现批量标签动态生成
  20. 第一章:Vue3.0+Openlayers+Cesium创建二三维联动项目

热门文章

  1. 分库分表的类型和特点
  2. 高仿真的类-请求参数映射
  3. Spring 中常用的设计模式对比
  4. web应用的目录结构
  5. 上传文件漏洞案例分析
  6. Zuul简介及代码示例
  7. Netty--Reactor模式
  8. Maven(6)--archetype
  9. 深入理解Kafka(3)-Consumer
  10. python判断两线段是否相交_c语言 判断两直线段是否相交