结论:

当 \(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. python + pytest基本使用方法(拓展库)

    一.测试钩子配置文件 import pytest# conftest.py 是pytest特有的本地测试配置文件;# 既可以用来设置项目级别的Fixture,也可用来导入外部插件,还可以指定钩子函数# ...

  2. 八大排序算法~简单选择排序【记录下标k变量的作用】

    八大排序算法~简单选择排序[记录下标k变量的作用] 1,思想:打擂台法,数组中的前n-1个元素依次上擂台"装嫩",后边的元素一个挨着一个不服,一个一个上去换掉它 2,优化:通过记录 ...

  3. Java语言程序与数据结构(基础篇)-随记

    有关代码见BasicJava U1-Java概述 1-程序设计风格和文档 1.注释风格 注释:// ; 块注释:/* ~ / ; javadoc注释:/* ~ */ javadoc注释 eg. /** ...

  4. 【洛谷P5008 逛庭院】tarjan缩点+贪心

    既然没有题解,那么我就来提供给一份. -- 首先我们看到数据范围.妈耶!数据这么大,一开始还想用个DP来做,但是看着就不行,那么根据这个数据范围,我们大致可以猜到这道题的算法是一个贪心,那么我们怎么贪 ...

  5. tomcat的单例多线程代码示例(十)

    一.懒汉式单例多线程模式 1.创建模拟的servlet生成器 package cn.bjsxt.sing; import java.util.UUID; public class LszySingle ...

  6. 素数(质数)(Java版)

    4.输出质数(素数) 素数(质数):是指在大于1的自然数中,除了1和它本身外,不能被其他自然数整除(除0以外)的数 public class PrimeNumber { public static v ...

  7. ubuntu16登录后黑屏无法进入系统问题汇总

    今晚在使用虚拟机的过程中发现有些卡顿,顿时想给虚拟机增加内核数,然后,然后,,,我就再也没有看到过图形化界面,在某搜索引擎查找了半天,把我的问题汇总了一下发出来,希望对遇到同样问题的有所帮助. 出现黑 ...

  8. Maven的属性,${project.basedir},${project.build.directory}:项目构件输出目录,默认为 target/

    内置属性 主要有两个常用内置属性:${basedir}项目的根目录(包含pom.xml文件的目录),${version}项目版本 POM属性 用户可以使用该属性引用POM文件中对应元素的值,常用的PO ...

  9. koa踩坑记录

    1.koa热更新用nodemon 2.koa中暂不支持import/export 3.只发送options请求,没有后续请求   当ctx.set('Access-Control-Allow-Cred ...

  10. 【动画消消乐 】HTML+CSS 吃豆豆动画 073

    前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计 ...