B. Derangement
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

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.

Input

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.

Output

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.

Examples
input
6 6 2 4 3 5 1

output
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 交换数字 思维死角相关推荐

  1. 【软件创新实验室2021年暑假集训】Java技术培训——Java前置知识学习

    [软件创新实验室2021年暑假集训]Java技术培训--Java前置知识学习 文章目录 [软件创新实验室2021年暑假集训]Java技术培训--Java前置知识学习 前言 一.了解计算机 1.计算机的 ...

  2. 暑假集训考试反思+其它乱写

    7.20 Sat 下午返校 回来改题 sdfz的巨佬觉得线上虐人不够爽,所以他们过来了 改T2的时候发现一个问题 如果要用$i$和$i\ xor\ 1$表示相邻的两条边,链式前向星tot初值必须设为1 ...

  3. ACM暑假集训总结(2014年夏)

    ACM暑假集训总结 这篇总结本来是打算暑假集训结束后, UVa上刷够300题, 给这一路留个纪念, 可最后竟然给了自己个大耳光--298. Hehe. 既然打算写了,那该干的就得干. 一个耳光没打够, ...

  4. 2015暑假集训总结

    这个暑假,我很明显的感觉,我的许多方面都发现了缺陷或得到了提升. 首先是做比赛.做题策略方面的,我还有很多要改进的地方.比赛时,我总是想到一些有些神奇的想法,有时会接近正解或者就是,有时会相差甚远,打 ...

  5. 2014暑假集训总结

    为期五个星期的暑假集训就这么结束了,如果说寒假的集训是为我们挖了一个个大坑,那么暑假的集训就只能说是宇宙大爆炸了.到了现在才发现,寒假我们学习的东西仅仅只是皮毛而已,这次学习的高级数据结构,真的是把我 ...

  6. 2019暑假集训感触与收获

    记得我们的集训开始时间是8.19,然后我提前了两天过来了学校,想着为充实的集训先做点准备...没想到的是在饥饿中度过了漫长的48小时(旁边的食堂木有开门,懒得走辣么远还是自己太懒了),还好两天也挺快, ...

  7. 2017暑假集训总结

    这个暑假,和上个寒假一样,还是留在学校进行了集训,进行ACM的训练.相比上个寒假,我的状态算是有了比较大的改变. 总的来说,是我的想法决定了我的行为和学习状态.上个学期只是把ACM当作一个业余爱好来学 ...

  8. 2021暑假集训总结

    ACM暑期集训就要结束了,有许多感想许多收获,一个多快两个月的训练学到了很多.总体来说,这个暑假对我是一个很有收获的暑假,也是第一次在校集训,效率比在家高很多,也写了自己的板子.不仅仅是算法的学习,在 ...

  9. 暑假集训后的一些感想

    在开学一个星期后我终于还是写下了这篇有关暑假集训博客,暑假集训的开始时间是七月十八号,是放暑假后的第三个星期.也就是说刚放假时我们还都回家了两个星期,快乐的玩耍了一阵子.随着时间的推移,时间来到七月十 ...

最新文章

  1. Gartner:人工智能将改变个人设备领域的游戏规则
  2. 中点坐标公式 矩形_二次函数中矩形的存在性问题
  3. NS安装问题收集(3)
  4. IOS中四种json解析效率比较
  5. setjmp与logjmp用法总结
  6. Linux内核中的常用宏container_of其实很简单【转】
  7. ES6 class 技术点拾遗
  8. 手机web禁止微信调整字体
  9. 数据可视化大屏有哪些优势
  10. iOS开发字符串倒序,倒序单词字母,不倒序单词位置
  11. 《深入浅出WPF》——模板学习
  12. 注册ActiveX控件 未在此计算机上注册ActiveX控件!!!
  13. 软件安全测试方案设计模板-homin
  14. matlab自定义排序
  15. 触摸屏与usb鼠标同时支持
  16. 涨知识:面试字节跳动Java研发岗,经验分享
  17. php 英文替换中文,php如何中英文符号替换?
  18. Surface电池阈值
  19. 古有陈天华万字血书抗沙俄,今有本剧蒻万字背包虐dp(01,完全,多重,分组,混合等各种背包详解 + 板子题+ 奇奇怪怪滴变式题)
  20. Java【汉诺塔问题】详细图文解析, 包教包会

热门文章

  1. python语言中print函数的作用_python中print()方法有什么
  2. anaconda 更改路径_一文教你如何运用Anaconda帮助Python编程
  3. C++的STL标准库学习(vector)
  4. 吴恩达神经网络和深度学习-学习笔记-23-快速搭建你的第一个系统原型,然后迭代
  5. VMware关闭自启动
  6. PYUIC和PYRRC作为外部工具的配置
  7. android xml 加密,AndroidManifest.xml和MAIN.xml文件都是加密的,请问怎么解决
  8. PHP对内存的运行,在PHP中运行密集的批处理过程,并避免内存耗尽
  9. java构建学生对象布尔类型,Java如何将原始布尔类型转换为布尔对象?
  10. 洛谷 P3958 奶酪