结论:

当 \(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. 关键字替代符号C++

    不知从什么时候的哪里我看到了一个and关键字,心想这是个什么玩意...然后知道它相当于&&,于是开启了罪恶的生涯-- 替代关键字,似乎可读性更好,但是有些编译器可能会无法识别(eg.M ...

  2. 【洛谷P1140 相似基因】动态规划

    分析 f[i][j] 表示 1数组的第i位和2数组的第j位匹配的最大值 f[1][1]=-2 f[2][1]=-2+5=3 f[3][1]=-2+5+5=8 三个决策: 1.由f[i-1][j-1]直 ...

  3. 【NOIP2007】Hanoi双塔问题

    题目描述 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形). 现要将这些圆盘移到C柱上 ...

  4. 2个Double字符串进行

    public static int compare(double d1, double d2) { if (d1 < d2) return -1; // Neither val is NaN, ...

  5. Skywalking-02:如何写一个Skywalking trace插件

    如何写一个Skywalking trace插件 javaagent 原理 美团技术团队-Java 动态调试技术原理及实践 类图 实现 ConsumeMessageConcurrentlyInstrum ...

  6. IE浏览器 查看Form对象

    在ie的debug窗口中,查看form中的值,从form.all("OtherNo").value = 赋值;(fm.all('ActionFlag').value = " ...

  7. Android 开发必备的知识点——JVM基础【转】

    image 1.JVM与操作系统的关系 Java Virtual Machine JVM 全称 Java Virtual Machine,也就是我们耳熟能详的 Java 虚拟机.它能识别 .class ...

  8. shiro反序列化550、721

    shiro550反序列化 获取docker镜像 docker pull medicean/vulapps:s_shiro_1 重启docker systemctl restart docker 启动d ...

  9. tp3 联表查询

    联表查询D("column") ->field("{$DbPrefix}column.pid,{$DbPrefix}news.*") ->where ...

  10. openssl not found 离线安装的openssl问题

    离线安装问题 正常我们在Linux中按照 nginx的openssl依赖都是通过 yum来安装的,但是由于一些特殊的服务器公司不让服务器连接互联网,所以就导致我们必须通过离线方式来进行安装,但是我们离 ...