CodeForces - 987E Petr and Permutations (思维+逆序对)
2024-09-07 07:42:56
题意:初始有一个序列[1,2,...N],一次操作可以将任意两个位置的值互换,Petr做3*n次操作;Alxe做7*n+1次操作。给出最后生成的新序列,问是由谁操作得到的。
分析:一个序列的状态可以归为:由原序列操作奇数次得到(简称奇序列);和操作偶数次(偶序列)得到。显然奇序列中,逆序对的个数为奇数;偶序列中,逆序对的个数为偶。当n为奇数时,3*n为奇,7*n+1为偶;n为偶数时正好相反。
用树状数组或归并排序求逆序对即可。
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<stack>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long LL;
const int maxn = 1e6+;
LL bit[maxn];
int n;
inline int lowbit(int x){return x&(-x);}
void add(int pos,LL val){
for(int i=pos;i<=n;i+=lowbit(i)){
bit[i] +=val;
}
}
LL sum(int pos){
LL res=;
for(int i=pos;i;i-=lowbit(i)) res+=bit[i];
return res;
} int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
while(scanf("%d",&n)==){
memset(bit,,sizeof(bit));
LL res=;
for(int i=;i<=n;++i){
LL val; scanf("%lld",&val);
add(val,);
res+= i-sum(val);
}
if(res%==n%) printf("Petr\n");
else printf("Um_nik\n");
}
return ;
}
最新文章
- Sort简单排序
- Oracle循环查询结果集 自定义函数
- PHP一句话过狗、卫士、D盾等免杀思路!
- 9 DelayQueueEntry 延时队列节点类——Live555源码阅读(一)基本组件类
- Bibtex使用方法
- Android 代理服务器为全网提供代理
- 20145207 《Java程序设计》第5周学习总结
- jmeter 远程测试
- iOS:测试机添加
- win7将 esc与 capslock 互换
- Android百度地图开发04之POI检索
- OSSEC配置文件ossec.conf中添加mysql服务
- 在Raspberry Pi上安装XBMC
- C语言默认參数值的实现
- Python并发实践_03_并发实战之一
- TypeScript笔记 5--变量声明(解构和展开)
- Linux查看系统、核数、CPU、位数
- Linux 获取网关地址
- 安装pywin32模块
- 【GO基础】神奇的iota特殊常量