【习题 8-20 UVA-1620】Lazy Susan
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
会发现,如果把连续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的更多相关文章
- UVa 1620 Lazy Susan (找规律)
题意:给 n 个数,每次可以把4个连续的数字翻转,问你能不能形成1-n的环状排列. 析:找一下奇偶性,写几个数试试,就会找到规律. 代码如下: #include <cstdio> #inc ...
- UVA - 1620 Lazy Susan(逆序数)
题目: 把1~n(n≤500)放到一个圆盘里,每个数恰好出现一次.每次可以选4个连续的数字翻转顺序.问能不能变成1.2.3....n的顺序. 思路: 这样的题的规律真的是一点都不好推,看了网上的博客知 ...
- 紫书 习题 8-20 UVa 1620 (找规律+求逆序对)
这道题看了半天没看出什么规律, 然后看到别人的博客, 结论是当n为奇数且逆序数为奇数的时候 无解, 否则有解.但是没有给出证明, 在网上也找到详细的证明--我也不知道是为什么-- 求逆序对有两种方法, ...
- Java50道经典习题-程序20 求前20项之和
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和.分析:请抓住分子与分母的变化规律.三个连续分数之间的规律是:上两个分子之和等于第三个分数的分子 ...
- uva1620 Lazy Susan
留坑(p.256) 什么找规律啊 坑爹 #include<cstdio> #include<cstring> #include<cstdlib> #include& ...
- UVa 1620 懒惰的苏珊(逆序数)
https://vjudge.net/problem/UVA-1620 题意:给出一个序列,每次可以翻转4个连续的数,判断是否可以变成1,2,3...n. 思路:考虑逆序数,通过计算可以得出每次翻转4 ...
- shell习题第20题:统计文件大小
[题目要求] 加入需要每小时执行一个脚本.功能:当时间是0点和12点时,将/data/log/下的文件全部清空,注意只能清空文件内容而不能删除文件.而其他时间只需要统计一下每个文件的大小,一个文件一行 ...
- UVA1620 Lazy Susan(结论证明)
结论: 当 \(n\geq 6\) 时,若 \(n\) 是奇数且输入序列的逆序对数是奇数,则无解,否则有解. 当 \(n=4\) 或 \(n=5\) 时,答案个数及其有限,只有这个环是 \(1\) 到 ...
- 线段树——习题、lazy解析
习题: C. Cloud Computing lazy操作解析:
随机推荐
- 【原创】关于JMS[1]
面向消息中间件(MOM)为分布式系统提供异步,解耦,稳定,可扩展和安全的行为.MOM在分布式计算领域是一个重要的概念.它允许应用使用代理器API在分布式环境实现各种功能.Java消息服务(Java M ...
- Struts2.3.16.1+Hibernate4.3.4+Spring4.0.2 框架整合(转)
原文 http://blog.csdn.net/songanling/article/details/22454973 最新版Struts2+Hibernate+Spring整合 目前为止三 ...
- [转帖]关于Xilinx下Micro_Blaze中UartLite232外设的使用
来源:https://blog.csdn.net/shen_you/article/details/78713746
- codeforces 493 C Vasya and Basketball
题意:给出三分线的值d,分别有两支队伍,如果小于等于d,得2分,如果大于d,得三分,问使得a-b最大时的a,b 一看到题目,就想当然的去二分了----啥都没分出来---55555555 后来才知道不能 ...
- 3dmax实例教程-使用3ds Max 创建一个完整的场景
本篇教程讲述了利用3ds max创建一个完整的场景. 灵感来源:当我在遇到一些事情睡不着觉的时候我便在努力想象一些别的事情,于是我便想到了这个场景,其实对于我的这个角色我即没有参考图也没有草稿图,有的 ...
- NetworkX-simple graph
import networkx as nx import matplotlib.pyplot import scipy.io as sio import numpy as np load_path=' ...
- tigergao
互联网从业 6 年.前码农&DBA,现运维&电商创业者,也在做自媒体.终生学习者. 运营微信公众号:高哥咋么看 感兴趣的朋友们可以订阅.
- 路飞学城Python-Day15
模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 支持多账户登录 支持账户间转账 记录每月日常消费流水 提供还 ...
- 将对象a的属性赋值给对象b
BeanUtils.copyProperties(a,b); 将a的属性赋值给b(ab的共同属性)
- GUI 图形用户界面 [学习笔记]
今晚返璞归真了一把, 系统了解了一下GUI的有关知识: GUI(Graphical User Interface) 图形用户界面 是指采用图形方式显示的计算机操作用户接口.与早期计算机使用的命令行界面 ...