Codeforces987 E. Petr and Permutations(思维+逆序对)
题意:
一开始有一个长度为n的原排列a,
一次操作随机选择两个不同位置的数a(i)和a(j),然后交换。
Petr会进行3n次操作,Alex会进行7n+1次操作。
现在给出结果序列,要求判断结果序列是经过谁的操作得到的。
数据范围:1e3<=n<=1e6
解法:
因为是排列,每个数都不同,
所以每次交换一定会使得逆序对数量的奇偶性变化。
3n和7n+1的奇偶性一定不同,因此序列的逆序对数量奇偶性也一定不同。
那么直接计算出给定排列的奇偶性就能判断答案了。
code:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxm=1e6+5;
int a[maxm];
int n;
struct BIT{int c[maxm];int lowbit(int i){return i&-i;}void add(int i,int t){while(i<maxm){c[i]+=t,i+=lowbit(i);}}int ask(int i){int ans=0;while(i){ans+=c[i],i-=lowbit(i);}return ans;}
}T;
signed main(){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);}ll ans=0;for(int i=1;i<=n;i++){T.add(a[i],1);ans+=i-T.ask(a[i]);}if(n%2==0&&ans%2==0){puts("Petr");}else if(n%2==1&&ans%2==1){puts("Petr");}else{puts("Um_nik");}return 0;
}
Codeforces987 E. Petr and Permutations(思维+逆序对)相关推荐
- E. String Reversal(思维+逆序对)详解
https://codeforces.com/contest/1430/problem/E 题意:交换相邻的字母使得字符串翻转的最小次数. 最近碰到了几道逆序对的题,有个比较明显的特征是交换相邻的数. ...
- CF986B Petr and Permutations 思维
每次交换:逆序对的数量+1或者-1: 假设最后逆序对数量为 sum; ①x+y=3n; ②x-y=sum; -> 3n+sum为偶数: 所以 n 和 sum 必须奇偶一样: #include&l ...
- What Goes Up Must Come Down(思维+逆序对构造LIS山峰)
https://ac.nowcoder.com/acm/contest/7831/F 考虑题意:对于每一个数来说,它最终要不左边的数全比它小,要不右边的数全比他小. 交换相邻的两个数,其他数字的相对位 ...
- 108. 奇数码问题【思维 / 逆序对】
n为奇数,左右交换不改变逆序对数个数,上下交换不改变逆序对奇偶性. 结论就是,将其转化成1维,将0去除掉,求逆序对的数量,看这两个的逆序对的奇偶性是否相同即可. #include<bits/st ...
- Codeforces Round #598 (Div. 3) F. Equalizing Two Strings 思维 + 逆序对
传送门 文章目录 题意: 思路: 题意: 给你两个长度为nnn的串a,ba,ba,b,每次可以同时翻转a,ba,ba,b中任意一段长度为L(1≤L≤n)L(1\le L\le n)L(1≤L≤n)的子 ...
- CodeForces - 987E Petr and Permutations(树状数组+逆序对定理)
题目链接:点击查看 题目大意:给出一个长度为 n 的序列,可能打乱过 3 * n 次,也可能打乱过 7 * n + 1 次,问到底打乱过多少次 题目分析:首先看出,3 * n 和 7 * n + 1 ...
- 期望dp ---- B. Tree Array 思维+期望dp 逆序对期望数
题目大意 题目大意: n(n≤200)n(n\leq200)n(n≤200)个节点的树.初始的时候,等概率随机选择一个点标记,接来随机选择一个与标记点相连的未标记点来标记,直到所有的点都被标记.根据点 ...
- 【Codeforces 986B】Petr and Permutations
[链接] 我是链接,点我呀:) [题意] 题意 [题解] n为奇数时3n和7n+1奇偶性不同 n为偶数时也是如此 然后交换任意一对数 逆序对的对数的奇偶性会发生改变一次 求出逆序对 对n讨论得出答案. ...
- 左神小和问题逆序对问题面试
归并排序的扩展问题 --先了解数据结构之归并排序,更容易理解以下的问题. 小和问题和逆序对问题. 在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和.在一个数组中,左边的数如果比右边 ...
最新文章
- php 输出任意一个数,php 生成任意范围的水仙花数
- 间谍新高度:航空航天探测器被当作间谍武器
- The 2018 ACM-ICPC Asia Qingdao Regional Contest
- android 自定义 child,Android自定义View
- SAP UI5 初学者教程之五:视图控制器初探 试读版
- 老男孩python课后作业_老男孩python基础知识练习题(一)中
- 为什么复制粘贴格式总是出错_想把图片转换成pdf格式怎么做?你找对方法了吗...
- 如何开发与设计一个爆款小游戏
- ArcGIS几种数据格式
- Cisco Packet Tracer思科模拟器单臂路由的配置
- java 图片压缩100k_Java 图片压缩至指定大小
- mysql8不区分大小写_不看不知道,这年头学个字母都有这么多门道(附学习资源)...
- python羊车门问题
- 发表16篇Nature、14篇Science!这位顶尖学者告诉你论文十大诀窍
- 数模常用查找数据网址大全
- 海康威视摄像头存储到电脑硬盘
- 必测的支付漏洞(一)——使用fiddler篡改支付金额
- 微信公众号开发教程[010]-消息管理-获取公众号的自动回复规则
- 走在边缘地带上的百度,还是差了那么一点!
- ElasticSearch全文搜索引擎