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

【题意】

在这里输入题意

【题解】

会发现,如果把连续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. oracle11g-rac安装部署

    网上11g rac安装文档大多不详细,今天来一个详细的! 纯操作文档,不喜勿喷!! 环境: 系统:rhel5.5 oracle:11.2.03 双网卡 共享磁盘 ip地址和主机名规划: #节点1 主机 ...

  2. js中获取数据类型

    ES5中,js中数据类型:number.string.boolean.undefined.null.object js中获取数据类型常用的四种方式 实例: var a = 123, b = true, ...

  3. [TJOI2015]弦论(后缀数组or后缀自动机)

    解法一:后缀数组 听说后缀数组解第k小本质不同的子串是一个经典问题. 把后缀排好序后第i个串的本质不同的串的贡献就是\(n-sa[i]+1-LCP(i,i-1)\)然后我们累加这个贡献,看到哪一个串的 ...

  4. 单机Mongo复制集安装配置(数据库版本:4.x)

      官方文档: https://docs.mongodb.com/manual/tutorial/deploy-replica-set-with-keyfile-access-control/#dep ...

  5. FarPoint自动换行

    单元格自动换行 FarPoint.Win.Spread.CellType.TextCellType mType = new FarPoint.Win.Spread.CellType.TextCellT ...

  6. weak和alias

    一.强符号和弱符号 在C语言中,如果多个模块定义同名全局符号时,链接器认为函数和已初始化的全局变量(包括显示初始化为0)是强符号,未初始化的全局变量是弱符号. 根据这个定义,Linux链接器使用下面的 ...

  7. Linux磁盘分区(一):加入

    ***********************************************声明************************************************ 原创 ...

  8. ORA-06553:PLS-306:wrong number or types of arguments in call to &#39;&#39;

    1.错误描写叙述 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/ ...

  9. mysql-总结select各子句及其顺序

    顺序:from->where ->group by->having ->order by

  10. jquery去重

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...