这道题和例题8-1相当的像。

例题8-1https://blog.csdn.net/qq_34416123/article/details/80112017

一开始我还以为用归并的思想, 用交换把局部交换好, 然后再整体交换

花了一个一小时好不容易写好之后, 发现我这种解法局部有序并不能保证整体有序。

因为归并排序的局部是连续的, 是1 2 3 4 5这样的, 然后我这种方法局部排出来只能

1 3 5 6这样的, 所以最后合并不能保证整体有序……

然后提示是2n次就够了。这个提示一开始没看懂啥意思, 然后后来突然想到, 这是不是

意味着每个数字最多两次操作就可以到该排到的位置?

然后又突然想到例题8-1, 那道题目也是翻转, 只不过翻转的方式不同而已。那道题的解法

是先翻到最顶上, 然后再翻下来。

类比一下这道题目, 是不是应该先翻到准备位置, 再翻到有序的时候应该在的位置。

然后我发现, 好像就是这样的, 只不过有的时候已经在准备位置了。

所以思路就是从1开始往后, 翻到数组中第0个位置, 第1个位置……(我是从0开始)

那么问题就在于到底怎么翻。

然后我发现, 可以求出当前这个数能往前翻的最前位置, 如果最前位置到的了目标位置, 那么就直接翻。
如果到不了, 那么就先翻一次, 位置移动到尽量前面, 然后第二次就一定能翻到目标位置了。

具体看代码
#include<cstdio>
#include<vector>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std; const int MAXN = 11234;
int a[MAXN], n;
vector<pair<int, int> > ans; void Swap(int l, int r)
{
ans.push_back(make_pair(l + 1, r));
int len = (r - l) >> 1;
REP(i, l, l + len) swap(a[i], a[i+len]);
} void move(int cur)
{
int pos = 0, aim = cur - 1;
while(a[pos] != cur) pos++;
if(pos == aim) return; if(n - (n - pos) * 2 > aim)
{
if((n - aim) % 2 == 0) Swap(aim, n);
else Swap(aim + 1, n);
pos -= (n - aim) >> 1;
}
Swap(aim, aim + 2 * (pos - aim));
} int main()
{
int T;
scanf("%d", &T); while(T--)
{
scanf("%d", &n);
REP(i, 0, n) scanf("%d", &a[i]); ans.clear();
REP(i, 1, n) move(i); printf("%d\n", ans.size());
REP(i, 0, ans.size()) printf("%d %d\n", ans[i].first, ans[i].second);
} return 0;
}




紫书 习题8-6 UVa 1611 (构造法)的更多相关文章

  1. 紫书 习题8-7 UVa 11925(构造法, 不需逆向)

    这道题的意思紫书上是错误的-- 难怪一开始我非常奇怪为什么第二个样例输出的是2, 按照紫书上的意思应该是22 然后就不管了,先写, 然后就WA了. 然后看了https://blog.csdn.net/ ...

  2. 紫书 习题 8-24 UVa 10366 (构造法)

    又是一道非常复杂的构造法-- #include<cstdio> #include<algorithm> #define REP(i, a, b) for(int i = (a) ...

  3. 紫书 习题 11-8 UVa 1663 (最大流求二分图最大基数匹配)

    很奇怪, 看到网上用的都是匈牙利算法求最大基数匹配 紫书上压根没讲这个算法, 而是用最大流求的. 难道是因为第一个人用匈牙利算法然后其他所有的博客都是看这个博客的吗? 很有可能-- 回归正题. 题目中 ...

  4. 紫书 习题 11-9 UVa 12549 (二分图最小点覆盖)

    用到了二分图的一些性质, 最大匹配数=最小点覆盖 貌似在白书上有讲 还不是很懂, 自己看着别人的博客用网络流写了一遍 反正以后学白书应该会系统学二分图的,紫书上没讲深. 目前就这样吧. #includ ...

  5. 紫书 习题 8-21 UVa 1621 (问题分析方法)

    知道是构造法但是想了挺久没有什么思路. 然后去找博客竟然只有一篇!!https://blog.csdn.net/no_name233/article/details/51909300 然后博客里面又说 ...

  6. 紫书 习题8-12 UVa 1153(贪心)

    本来以为这道题是考不相交区间, 结果还专门复习了一遍前面写的, 然后发现这道题的区间是不是 固定的, 是在一个范围内"滑动的", 只要右端点不超过截止时间就ok. 然后我就先考虑有 ...

  7. 紫书 习题 11-17 UVa 1670 (图论构造)

    一开始要符合题目条件, 那么肯定没有任何一个点是孤立的, 也就是说没有点的度数是1 所以我就想让度数是1的叶子节点相互连起来.然后WA 然后看这哥们的博客 https://blog.csdn.net/ ...

  8. 紫书 习题 8-22 UVa 1622 (构造法)

    这道题的构造法真的复杂--要推一堆公式--这道题写了几天了--还是没写出来-- 一开始简单的觉得先左右来回, 然后上下来回, 然后把剩下的执行完了好了, 然后就WA. 然后换了个思路, 觉得是贪心, ...

  9. 紫书 习题 11-15 UVa 1668 (图论构造法)

    参考了http://www.bubuko.com/infodetail-1276416.html 首先是逆向思维, 向把每条边看作一条路径, 然后再去合并 然后我们讨论怎么样合并时最优的 我们讨论当前 ...

随机推荐

  1. CentOS7上安装google谷歌浏览器

      1.首先进入根目录,然后进入etc/yum.repos.d目录下,创建google-chrome.repo文件 cd / cd etc/yum.repos.d vim google-chrome. ...

  2. [luogu2501 HAOI2006] 数字序列 (递推LIS)

    题目描述 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变的幅度太大. 输入输出格式 输入格式: 第一行包含一个数 ...

  3. WIN10 java环境变量问题之 配置的JDK1.8版本却是1.7

    问题前沿,在开发项目中,发布的项目出现了内存溢出问题,我挨个把代码看了一遍,并不能准确定位到那个地方能出现内存溢出问题,后来想到使用压力测试,较可能出现内存溢出的接口进行一番测试. 我就安装了一个ap ...

  4. debian 9 安装Virtual Box

    1.去官网下载deb包,例如包名: virtualbox-.2_5.2.18-124319_Debian_stretch_amd64.deb 2.安装 .2_5.2.18-124319_Debian_ ...

  5. TI低功耗蓝牙(BLE)介绍

    TI低功耗蓝牙(BLE)介绍 本文档翻译和修改自参考资料:CC2540Bluetooth Low Energy Software Developer’s Guide (Rev. B),部分图片直接引用 ...

  6. Virtual Box 新建一个虚拟机安装系统(补充:WIN7 64 bit 系统虚拟机无法安装 64 bit 系统问题)

    1.安装Virtual Box好后,点击新建 2.配置内存大小,这个根据自己需要配置就好 3.创建虚拟硬盘 这里选择固定分配.动态分配都可以,接下来就分配硬盘大小了 4.新建好后我们点击刚才建立的虚拟 ...

  7. what&#39;s new in vc2015

    1. 变量和函数的注解提示非常实用.象C#了. 2.CStdioFile升级了,不再须要象 vc2013中,用CStdioFileEx来修复错误了. 3. 发现再写. 

  8. 从ORA-27300,ORA-27301到ORA-00064

        近期因为session数量添加,须要调整session,也就是要调整process參数. 看是比較简单的一个问题,却遭遇了ORA-27300,ORA-27301.因为这个涉及到了有关内核參数k ...

  9. ThinkPHP5.0框架开发--第11章 TP5.0 杂项

    ThinkPHP5.0框架开发--第11章 TP5.0 杂项 第11章 TP5.0 杂项 =============================================== 今日学习 1. ...

  10. ionic2集成极光推送

    ionic2集成极光推送: ionic2api:https://ionicframework.com/docs/ 极光推送官网:https://www.jiguang.cn android-怎么注册极 ...