暑假集训 div1 B Derangement 交换数字 思维死角
2 seconds
256 megabytes
standard input
standard output
A permutation of n numbers is a sequence of integers from 1 to n where each number is occurred exactly once. If a permutation p1, p2, ..., pn has an index i such that pi = i, this index is called a fixed point.
A derangement is a permutation without any fixed points.
Let's denote the operation swap(a, b) as swapping elements on positions a and b.
For the given permutation find the minimal number of swap operations needed to turn it into derangement.
The first line contains an integer n (2 ≤ n ≤ 200000) — the number of elements in a permutation.
The second line contains the elements of the permutation — n distinct integers from 1 to n.
In the first line output a single integer k — the minimal number of swap operations needed to transform the permutation into derangement.
In each of the next k lines output two integers ai and bi (1 ≤ ai, bi ≤ n) — the arguments ofswap operations.
If there are multiple possible solutions, output any of them.
6 6 2 4 3 5 1
1 2 5题意:给你1-n数字组成的一个序列,你可以进行a,b操作把a,b位置上的数字交换位置,问最少进行多少次交换才使得整个序列中不存在第i个位置的数字为i这样情况。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <stack>
#include <set>
#include <cmath>
using namespace std;
const double eps=1e-10;int a[200006][4];
int main()
{int n;while(~scanf("%d",&n)){int cnt=0,last=0;for(int i=1;i<=n;i++){int u;scanf("%d",&u);if(u==i){cnt++;if(last!=0){a[cnt/2][0]=last;a[cnt/2][1]=u;last=0;}else last=u;}}if(cnt%2!=0) {a[cnt/2+1][0]=last;if(last!=1) a[cnt/2+1][1]=1;else a[cnt/2+1][1]=2;}printf("%d\n",cnt/2+cnt%2);for(int i=1;i<=cnt/2+cnt%2;i++)printf("%d %d\n",a[i][0],a[i][1]);}return 0;
}
分析:其实这个问题其他的都分析很好,就错了一个地方,就是当还剩余最后一个数字无法进行交换时,这时
很显然我们只需要把他与其他的数字中任意一个进行下交换,所以我想的就是与第一个数字交换,,,,,但是,没有
考虑到1,3,2这样的序列,按照我的想法输出的应该是第一个与第一个交换,,,,思维死角
转载于:https://www.cnblogs.com/smilesundream/p/5661499.html
暑假集训 div1 B Derangement 交换数字 思维死角相关推荐
- 【软件创新实验室2021年暑假集训】Java技术培训——Java前置知识学习
[软件创新实验室2021年暑假集训]Java技术培训--Java前置知识学习 文章目录 [软件创新实验室2021年暑假集训]Java技术培训--Java前置知识学习 前言 一.了解计算机 1.计算机的 ...
- 暑假集训考试反思+其它乱写
7.20 Sat 下午返校 回来改题 sdfz的巨佬觉得线上虐人不够爽,所以他们过来了 改T2的时候发现一个问题 如果要用$i$和$i\ xor\ 1$表示相邻的两条边,链式前向星tot初值必须设为1 ...
- ACM暑假集训总结(2014年夏)
ACM暑假集训总结 这篇总结本来是打算暑假集训结束后, UVa上刷够300题, 给这一路留个纪念, 可最后竟然给了自己个大耳光--298. Hehe. 既然打算写了,那该干的就得干. 一个耳光没打够, ...
- 2015暑假集训总结
这个暑假,我很明显的感觉,我的许多方面都发现了缺陷或得到了提升. 首先是做比赛.做题策略方面的,我还有很多要改进的地方.比赛时,我总是想到一些有些神奇的想法,有时会接近正解或者就是,有时会相差甚远,打 ...
- 2014暑假集训总结
为期五个星期的暑假集训就这么结束了,如果说寒假的集训是为我们挖了一个个大坑,那么暑假的集训就只能说是宇宙大爆炸了.到了现在才发现,寒假我们学习的东西仅仅只是皮毛而已,这次学习的高级数据结构,真的是把我 ...
- 2019暑假集训感触与收获
记得我们的集训开始时间是8.19,然后我提前了两天过来了学校,想着为充实的集训先做点准备...没想到的是在饥饿中度过了漫长的48小时(旁边的食堂木有开门,懒得走辣么远还是自己太懒了),还好两天也挺快, ...
- 2017暑假集训总结
这个暑假,和上个寒假一样,还是留在学校进行了集训,进行ACM的训练.相比上个寒假,我的状态算是有了比较大的改变. 总的来说,是我的想法决定了我的行为和学习状态.上个学期只是把ACM当作一个业余爱好来学 ...
- 2021暑假集训总结
ACM暑期集训就要结束了,有许多感想许多收获,一个多快两个月的训练学到了很多.总体来说,这个暑假对我是一个很有收获的暑假,也是第一次在校集训,效率比在家高很多,也写了自己的板子.不仅仅是算法的学习,在 ...
- 暑假集训后的一些感想
在开学一个星期后我终于还是写下了这篇有关暑假集训博客,暑假集训的开始时间是七月十八号,是放暑假后的第三个星期.也就是说刚放假时我们还都回家了两个星期,快乐的玩耍了一阵子.随着时间的推移,时间来到七月十 ...
最新文章
- Gartner:人工智能将改变个人设备领域的游戏规则
- 中点坐标公式 矩形_二次函数中矩形的存在性问题
- NS安装问题收集(3)
- IOS中四种json解析效率比较
- setjmp与logjmp用法总结
- Linux内核中的常用宏container_of其实很简单【转】
- ES6 class 技术点拾遗
- 手机web禁止微信调整字体
- 数据可视化大屏有哪些优势
- iOS开发字符串倒序,倒序单词字母,不倒序单词位置
- 《深入浅出WPF》——模板学习
- 注册ActiveX控件 未在此计算机上注册ActiveX控件!!!
- 软件安全测试方案设计模板-homin
- matlab自定义排序
- 触摸屏与usb鼠标同时支持
- 涨知识:面试字节跳动Java研发岗,经验分享
- php 英文替换中文,php如何中英文符号替换?
- Surface电池阈值
- 古有陈天华万字血书抗沙俄,今有本剧蒻万字背包虐dp(01,完全,多重,分组,混合等各种背包详解 + 板子题+ 奇奇怪怪滴变式题)
- Java【汉诺塔问题】详细图文解析, 包教包会
热门文章
- python语言中print函数的作用_python中print()方法有什么
- anaconda 更改路径_一文教你如何运用Anaconda帮助Python编程
- C++的STL标准库学习(vector)
- 吴恩达神经网络和深度学习-学习笔记-23-快速搭建你的第一个系统原型,然后迭代
- VMware关闭自启动
- PYUIC和PYRRC作为外部工具的配置
- android xml 加密,AndroidManifest.xml和MAIN.xml文件都是加密的,请问怎么解决
- PHP对内存的运行,在PHP中运行密集的批处理过程,并避免内存耗尽
- java构建学生对象布尔类型,Java如何将原始布尔类型转换为布尔对象?
- 洛谷 P3958 奶酪