【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

会发现,如果把连续4个数字进行一次翻转的话。
假设这连续的4个数字的逆序数为x;
那么翻转过后,逆序数就会变成6-x;
(最多6个逆序数,现在翻转了

那么这4个逆序数的变化为6-2x

显然变化值为一个偶数。

而1..l-1和r+1..n这一部分它们的逆序数不受l..r这段翻转的影响。

因此我们进行一次翻转操作。

不会让序列的奇偶性发生变化。

因此如果

a[1]..a[n]

a[2]..a[n]a[1]

a[3]...a[n]a[1]a[2]

(因为是个圆 所以有多个序列

这些序列里面只要有一个它的逆序数个数为偶数那么就可以.否则不行

找一下规律会发现,n如果为偶数的话,总是存在这么一个逆序数为偶数的序列的。

n如果为奇数的话,只要其中有一个序列逆序数为奇数,那么其他的n-1个序列的逆序数必然也都是 奇数

因此只要判断一下输入的那一个序列的逆序数是否为偶数就好

如果为这个逆序数为偶数,或者n为偶数。那么肯定有解,否则一定无解。

(可以省去枚举序列的起点那一层循环了

【代码】

#include <bits/stdc++.h>
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define all(x) x.begin(),x.end()
#define pb push_back
#define ls l,mid,rt<<1
#define rs mid+1,r,rt<<1
using namespace std; const double pi = acos(-1);
const int dx[4] = {0,0,1,-1};
const int dy[4] = {1,-1,0,0};
const int N = 500; int n,a[N+10],cnt; void solve(){
cin >> n;
for (int i = 1;i <= n;i++) cin >> a[i];
cnt = 0;
for (int i = 1;i <= n;i++){
for (int j = 1;j < i;j++)
if (a[j]>a[i]){
cnt++;
}
}
if (cnt%2==0 || (n%2==0)){
cout<<"possible"<<endl;
}else{
cout<<"impossible"<<endl;
}
} int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
ios::sync_with_stdio(0),cin.tie(0);
int T;
cin >> T;
while(T--){
solve();
}
return 0;
}

【习题 8-20 UVA-1620】Lazy Susan的更多相关文章

  1. UVa 1620 Lazy Susan (找规律)

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

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

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

  3. 紫书 习题 8-20 UVa 1620 (找规律+求逆序对)

    这道题看了半天没看出什么规律, 然后看到别人的博客, 结论是当n为奇数且逆序数为奇数的时候 无解, 否则有解.但是没有给出证明, 在网上也找到详细的证明--我也不知道是为什么-- 求逆序对有两种方法, ...

  4. Java50道经典习题-程序20 求前20项之和

    题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和.分析:请抓住分子与分母的变化规律.三个连续分数之间的规律是:上两个分子之和等于第三个分数的分子 ...

  5. uva1620 Lazy Susan

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

  6. UVa 1620 懒惰的苏珊(逆序数)

    https://vjudge.net/problem/UVA-1620 题意:给出一个序列,每次可以翻转4个连续的数,判断是否可以变成1,2,3...n. 思路:考虑逆序数,通过计算可以得出每次翻转4 ...

  7. shell习题第20题:统计文件大小

    [题目要求] 加入需要每小时执行一个脚本.功能:当时间是0点和12点时,将/data/log/下的文件全部清空,注意只能清空文件内容而不能删除文件.而其他时间只需要统计一下每个文件的大小,一个文件一行 ...

  8. UVA1620 Lazy Susan(结论证明)

    结论: 当 \(n\geq 6\) 时,若 \(n\) 是奇数且输入序列的逆序对数是奇数,则无解,否则有解. 当 \(n=4\) 或 \(n=5\) 时,答案个数及其有限,只有这个环是 \(1\) 到 ...

  9. 线段树——习题、lazy解析

    习题: C. Cloud Computing lazy操作解析:

随机推荐

  1. windows2008搭建ftp服务器

    控制面板 操作—〉添加角色 (web,文件服务) windows 搜索中: 添加ftp站点: 计算机---管理 –服务器管理  --- 添加一个用户 ,密码. 防护墙高级设置中添加 出入站规则 允许2 ...

  2. Dropout 上

    From <白话深度学习与TensorFlow> Dropout 顾名思义是“丢弃”,在一轮训练阶段丢弃一部分网络节点,比如可以在其中的某些层上临时关闭一些节点,让他们既不输入也不输出,这 ...

  3. word中输入公式方案

    如何开启word公式模式:“Alt”+"=" 1. 如何输入矩阵: 使用&链接行元素,@进行换行,空格键进行转换 如输出: 先开启公式模式:“Alt”+"=&qu ...

  4. mariadb 视图 事务 索引 外键

    视图 对于复杂的查询,在多个地方被使用,如果需求发生了改变,需要更改sql语句,则需要在多个地方进行修改,维护起来非常麻烦   假如因为某种需求,需要将user拆房表usera和表userb,该两张表 ...

  5. python 面向对象 封装

    什么是封装 广义上的封装:代码的保护,面对对象的思想本身就是 只让自己的对象能调自己类的方法 狭义上的封装:将属性和方法藏起来 私有属性/私有方法 python没有真正意义的私有属性,可以通过调用实例 ...

  6. 紫书 习题 8-17 UVa 11536 (滑动窗口)

    这道题说连续子序列, 马上就想到滑动窗口. 注意窗口里面的元素中小于等于k的才是有效元素.记录窗口里面有效元素的个数, 满足了之后开始 缩短窗口, 如果左端点不是有效元素或者即使窗口中存在这个元素的个 ...

  7. JavaIO 总结-装饰者模式

    另外参考文章:http://www.ibm.com/developerworks/cn/java/j-lo-javaio/ 一. File类 file.createNewFile();file.del ...

  8. 2015 Multi-University Training Contest 1 Assignment

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  9. The Karplus-Strong Algorithm

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/48730857 Karplus-Stro ...

  10. LaTeX 简介与安装

    1 LaTeX 简介 Leslie Lamport 开发的 LaTeX 是当今世界上最流行和使用最为广泛的TeX格式.它构筑在Plain TeX的基础之上,并加进了很多的功能以使得使用者可以更为方便的 ...