结论:

当 \(n\geq 6\) 时,若 \(n\) 是奇数且输入序列的逆序对数是奇数,则无解,否则有解。

当 \(n=4\) 或 \(n=5\) 时,答案个数及其有限,只有这个环是 \(1\) 到 \(n\) 的排列(顺时针或逆时针均可,如 \(2,3,4,1\)、\(2,1,4,3\))时有解,否则无解。但因为题目中 \(n\geq 8\) 所以这种情况你无需考虑。

证明:

\(n<6\) 的特殊情况暴搜即可证明,下面不妨假设 \(n\geq 6\)。

首先我们注意到,我们可以对序列 \(1,2,3,4,5,6\),不交换序列首尾交接处的元素把 \(1,2,3,4,5,6\) 变成 \(6,2,3,5,4,1\) 或 \(6,5,3,4,2,1\) 或 \(6,4,5,3,2,1\)。证明不必多说,暴搜即可。

我们可以证明,当 \(n\) 为奇数时,题中操作不会改变序列逆序对数的奇偶性。证明如下:

题目中的操作等价于只对序列进行两种操作:

  • 将前四个元素翻转;
  • 将第一个元素移到末尾。

对于第一种操作,显然前 \(4\) 个元素之一与后面的元素形成的逆序对数不变,后面元素互相形成的逆序对数也不变,只需考虑前 \(4\) 个元素互相形成的逆序对数。设原来此数为 \(x\),则顺序对数为 \(6-x\),翻转后逆序对数即为 \(6-x\),逆序对数变化量为 \(|x-(6-x)|=2|x-3|\) 为偶数,所以操作 \(1\) 不会改变序列逆序对数的奇偶性。

对于第二种操作,假设原来元素 \(1\) 和其他元素形成的逆序对数为 \(y\),则之后该元素和其他元素形成的逆序对数变为 \(n-1-y\),而 \(n\) 是奇数,所以操作 \(2\) 也不会改变序列逆序对数的奇偶性。

由此可知,若 \(n\) 是奇数且输入序列的逆序对数是奇数,则无解。

下面我们证明其他情况必有解:

我们可以先把元素 \(1\) 归位,只要元素 \(1\) 在位置 \(4\),就可以翻转过来。同理只要元素 \(1\) 出现在位置 \(1,4,3,5,2,6\dots\) 任何位置,都可以把元素 \(1\) 归位。可以同理归位元素 \(2\)。然后:

若忽略元素 \(1\)、\(2\) 后有解,则由前面的结论知不忽略是也有解,只要把翻转序列首尾交接处的操作换掉即可。

即把长度为 \(n\) 序列的问题转化为了长度为 \(n-2\) 序列的问题,又因为当 \(n\) 为奇数时操作不会改变逆序对数奇偶性,我们只要证明 \(n=6,7\) 时结论成立即可。

暴力搜索可以验证结论的确成立。综上可得本题结论。

代码:

当然可以用归并排序或树状数组求逆序对数,但本题数据规模小所以不需要。

#include <bits/stdc++.h>
using namespace std;
int main()
{
int T, n, a[500];
cin >> T;
while(T--)
{
cin >> n;
for(int i = 0; i < n; ++i)
cin >> a[i];
bool x = true; // 求逆序对数的奇偶性
if(n & 1)
for(int i = 0; i < n; ++i)
for(int j = i+1; j < n; ++j)
if(a[i] > a[j])
x = !x;
puts(x ? "possible" : "impossible");
}
return 0;
}

同步于洛谷博客

UVA1620 Lazy Susan(结论证明)的更多相关文章

  1. uva1620 Lazy Susan

    留坑(p.256) 什么找规律啊 坑爹 #include<cstdio> #include<cstring> #include<cstdlib> #include& ...

  2. 【习题 8-20 UVA-1620】Lazy Susan

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 会发现,如果把连续4个数字进行一次翻转的话. 假设这连续的4个数字的逆序数为x; 那么翻转过后,逆序数就会变成6-x; (最多6个逆 ...

  3. 紫书 习题 8-25 UVa 11175 (结论证明)(配图)

    看了这篇博客https://blog.csdn.net/u013520118/article/details/48032599 但是这篇里面没有写结论的证明, 我来证明一下. 首先结论是对于E图而言, ...

  4. [COCI2016-2017#1] Mag 结论证明

    结论:最多包含一个 \(2\),并且不在链的两端点. 证明:我们问题分成两个 \(\texttt{pass}\). \(\texttt{pass 1}\):\(\forall u,s.t.x_{u}\ ...

  5. Solution -「COCI 2016-2017」 Mag 结论证明

    结论:最多包含一个 \(2\),并且不在链的两端点. 证明:我们问题分成两个 \(\texttt{pass}\). \(\texttt{pass 1}\):\(\forall u,s.t.x_{u}\ ...

  6. UVa 1620 Lazy Susan (找规律)

    题意:给 n 个数,每次可以把4个连续的数字翻转,问你能不能形成1-n的环状排列. 析:找一下奇偶性,写几个数试试,就会找到规律. 代码如下: #include <cstdio> #inc ...

  7. UVA - 1620 Lazy Susan(逆序数)

    题目: 把1~n(n≤500)放到一个圆盘里,每个数恰好出现一次.每次可以选4个连续的数字翻转顺序.问能不能变成1.2.3....n的顺序. 思路: 这样的题的规律真的是一点都不好推,看了网上的博客知 ...

  8. 关于NIM博弈结论的证明

    关于NIM博弈结论的证明 NIM博弈:有k(k>=1)堆数量不一定的物品(石子或豆粒…)两人轮流取,每次只能从一堆中取若干数量(小于等于这堆物品的数量)的物品,判定胜负的条件就是,最后一次取得人 ...

  9. Multi-Nim游戏结论不变证明

    Nim取石子游戏结论: 若n堆石子的异或和为0,则先手必胜:否则,先手必败 加入新规则: 每次取完石子后,可以将取的那一堆的石子 分为多堆,也可以不分 结论: 同Nim取石子游戏结论 证明: 如果异或 ...

随机推荐

  1. vue(23)Vuex的5个核心概念

    Vuex的核心概念 Vuex有5个核心概念,分别是State,Getters,mutations,Actions,Modules. State   Vuex使用单一状态树,也就是说,用一个对象包含了所 ...

  2. [考试总结]noip模拟19

    连挂3场 \(\color{green}{\huge{\text{菜}}}\) 真 . 挂分王 ... 没什么好说的了,菜就是了. \(T1\) 一波手推想到了性质 \(1\),然后因为数组原因挂成比 ...

  3. 第七篇 -- photoshop cs6 激活

    下载photoshop cs6破解版 下载amtlib.dll 破解就是将amtlib.dll替换,路径:C:\Program Files\Adobe\Adobe Photoshop CS6 (64 ...

  4. HTML之单词

    段落 paragraph <a href="https://www.runoob.com">超链接 anchor (锚点,引申为连接,link已经被html占用) Hy ...

  5. synchronized 加锁 this 和 class 的区别!

    synchronized 是 Java 语言中处理并发问题的一种常用手段,它也被我们亲切的称之为"Java 内置锁",由此可见其地位之高.然而 synchronized 却有着多种 ...

  6. Gateway网关匹配规则

    Gateway匹配规则 重要概念 路由 route 断言 predicate 过滤器 fliter 一.时间匹配 在 after 时间之后的所有请求转发到 URI中的地址 gateway: disco ...

  7. Android开发如何准备技术面试(含Android面试押题)

    今年毋庸置疑是找工作的寒冬,每一个出来找工作的同学都是值得尊敬的.现在找工作,虽然略难,但是反过来看也会逼迫我们成为更加优秀的自己. 但是不管是旺季还是寒冬,有一些优秀的同学找工作还是挺顺利的.所以说 ...

  8. NTP 集群简略部署指南

    NTP 集群简略部署指南 by 无若 1. NTP 简介 网络时间协议(英语:Network Time Protocol,简称NTP)是在数据网络潜伏时间可变的计算机系统之间通过分组交换进行时钟同步的 ...

  9. Redis缓存哪些事儿

    一提到Redis缓存,我们不得不了解的三个问题就是:缓存雪崩.缓存击穿和缓存穿透.这三个问题一旦发生,会导致大量的请求直接请求到数据库层.如果并发压力大,就会导致数据库崩溃.那p0级的故障是没跑了. ...

  10. Java-SpringBoot注解方式实现AOP

    AOP基本总结 连接点(JoinPoint): 连接点是程序运行的某个阶段点,如方法调用.异常抛出等 切入点(Pointcut): 切入点是JoinPoint的集合 是程序中需要注入Advice的位置 ...