[atARC110F]Esoswap
先构造使得$p_{i}$降序(即$p_{i}=n-1-i$),只需要从后往前,不断执行$i$操作直至合法即可
正确性的证明:首先保证了$[0,n-i)$这些数字都已经出现,因此操作不会破坏已确定的数字的顺序
同时,一个数字不会重复出现,因为若要与其交换后的位置再交换,仍需要其本身,显然不可能
(特别的,对于0由于已经会在$n-1$上出现,因此不需要考虑)
由于每一个位置上每一个数至多出现1次,因此至多$n^{2}$次操作即可
再考虑如何把顺序调回来,先将一个后缀排好,然后考虑插入一个数$i$(后缀必然是$[0,i)$)
考虑操作$p_{j}=1$的位置$j$,相当于将$j$向后挪1步,因此可以将1挪到末尾,又因为$i+p_{i}=n-1$,执行操作$i$将其与1交换,再将1与0交换即可
例如:540123->540213->540231(把1挪到末尾)->510234(执行操作$i$)->501234(将1与0交换)

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 105
4 vector<int>ans;
5 int n,a[N];
6 void write(int k){
7 ans.push_back(k);
8 swap(a[k],a[(k+a[k])%n]);
9 }
10 int main(){
11 scanf("%d",&n);
12 for(int i=0;i<n;i++)scanf("%d",&a[i]);
13 for(int i=n-1;i;i--)
14 while (a[i]!=n-i-1)write(i);
15 for(int i=n-2;i>=0;i--){
16 for(int j=i+1;j<n-1;j++)write(j);
17 write(i);
18 write(i);
19 }
20 for(int i=0;i<n;i++)assert(a[i]==i);
21 printf("%d\n",ans.size());
22 for(int i=0;i<ans.size();i++)printf("%d\n",ans[i]);
23 }
[atARC110F]Esoswap的更多相关文章
- Solution -「ARC 110F」Esoswap
\(\mathcal{Description}\) Link. 给定 \(0\sim n-1\) 的排列 \(p_{0..n-1}\),每次操作给出 \(i\),交换 \(p_i\) 和 \( ...
- world.construct(me);
目录 0 引言 0.1 所谓构造题 0.2 重点是动机 (motivation) 1 实践出真知 1.1 「CSP-S 2021」「洛谷 P7915」回文 1.1.1 题目大意 1.1.2 解题过程 ...
随机推荐
- 工作日常-SQL不能乱写
前言:刚接手别人的项目没多久,在昨天的一次上线中无故躺坑,且该大兄弟已经离职,不得不帮他填坑,整完后,今天想搞一个总结,结论就是:SQL不能乱写. 搜索关键词:Cause: java.sql.SQLE ...
- 题解 [CTSC2006]歌唱王国
题目传送门 Desctiption 见题面. Solution 人类智慧... 考虑这样一个赌博游戏,现在有一个猴子,它随机从 \(1\sim n\) 中选一个打出来.现在有若干个赌徒,他们一开始都有 ...
- uoj21 缩进优化(整除分块,乱搞)
题目大意: 给定一个长度为\(n\)的序列 让你找一个\(x\),使得\(ans\)尽可能小 其中$$ans=\sum_{i=1}^{n}\lfloor\frac{a_i}{x}\rfloor + \ ...
- 分析你的第一个Android程序
目录 分析你的第一个Android程序 Android模式的项目结构 切换项目结构模式 Project模式的项目结构 .gradle和idea app build(没有发现这个文件夹) gradle ...
- selenium去特征
code from selenium import webdriver chrome_options = webdriver.ChromeOptions() chrome_options.add_ex ...
- windows环境下基于pycharm安装Redis出现的两个错误解决方案
说明:下面给出的两个链接是解决安装和使用Redis的时候遇到的两个问题参考的博客网址,本文有解释不清楚的地方可以原博客查看,侵权删! Q1参考链接-https://blog.csdn.net/maqu ...
- 永久修改alias
永久修改alias home目录下ls -a显示隐藏文件 编辑./cshrc
- 【转】C语言 printf格式控制符 完全解析
printf的格式控制的完整格式:% - 0 m.n l或h 格式字符下面对组成格式说明的各项加以说明:①%:表示格式说明的起始符号,不可缺少.②-:有-表示左 ...
- 【UE4 设计模式】状态模式 State Pattern
概述 描述 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类. 其别名为状态对象(Objects for States),状态模式是一种对象行为型模式. 有限状态机(FSMs) ...
- Windows主机入侵排查
检查系统信息.用户账号信息 系统信息 ● 查看系统版本以及补丁信息 systeminfo 用户账号信息 ● 基本使用 ○ 创建普通账号并加入administrarors 组 net user test ...