Codeforces Round #485 (Div. 2) E. Petr and Permutations
Codeforces Round #485 (Div. 2) E. Petr and Permutations
题目连接:
http://codeforces.com/contest/987/problem/E
Description
Petr likes to come up with problems about randomly generated data. This time problem is about random permutation. He decided to generate a random permutation this way: he takes identity permutation of numbers from $1$ to $n$ and then $3n$ times takes a random pair of different elements and swaps them. Alex envies Petr and tries to imitate him in all kind of things. Alex has also come up with a problem about random permutation. He generates a random permutation just like Petr but swaps elements $7n+1$ times instead of $3n$ times. Because it is more random, OK?!
You somehow get a test from one of these problems and now you want to know from which one.
Sample Input
5
2 4 5 1 3
Sample Output
Petr
题意
给定一个排列,问它是从\(1, 2, 3,...,n\)变换\(3n\)次而来,还是\(7n+1\)
Give a random permutation, it maybe transform \(3n\) times or \(7n+1\) times from the permutation of numbers from \(1\) to n. Judging it is \(3n\) or \(7n+1\) ?
题解:
考虑n是奇数的情况,\(3n\)为奇数,\(7n+1\)为偶数;n是偶数时,\(3n\)为偶数,\(7n+1\)为奇数。
考虑最小交换次数,假定为k,\(k+2*t\)次交换都可以变成目标串,但奇偶性相同。所以只需判断最小交换次数的奇偶性即可。
When n is a odd number, \(3n\) is odd,\(7n+1\) is even.When n is a even number, \(3n\) is even,\(7n+1\) is odd.
Consider about the swap times, assume k is the mininum swap times to the final permutation , \(k+2*t\) will reach the final result , \(k\) and \(k+2*t\) have the same parity. So we need to know the parity of the mininum swap times.
如果我们不把stdio的同步关闭,将会读入超时
If we dont close the sync with stdio , time limit exceeded.
代码
#include <bits/stdc++.h>
using namespace std;
int n;
map<int,int> m;
int a[1000010];
int c[1000010];
int ans;
inline int lowbit(int k) {
    return (k&(-k));
}
void update(int t) {
    while (t<n) {
        c[t]++;
        t+=lowbit(t);
    }
}
int sum(int t) {
    int ret=0;
    while (t>0) {
        ret+=c[t];
        t-=lowbit(t);
    }
    return ret;
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    cerr.tie(nullptr);
    cin>>n;
    for (int i=1;i<=n;i++) {
        cin>>a[i];
        m[a[i]]=i;
    }
    for (int i=n;i;i--) {
        ans += i-(m[i]-sum(m[i]-1));
        update(m[i]);
    }
    if ((n&1)^(ans&1)==0) cout << "Petr" <<endl;
    else cout << "Um_nik" <<endl;
}
												
											Codeforces Round #485 (Div. 2) E. Petr and Permutations的更多相关文章
- Codeforces Round #485 (Div. 2)
		
Codeforces Round #485 (Div. 2) https://codeforces.com/contest/987 A #include<bits/stdc++.h> us ...
 - Codeforces Round #485 (Div. 2) D. Fair
		
Codeforces Round #485 (Div. 2) D. Fair 题目连接: http://codeforces.com/contest/987/problem/D Description ...
 - Codeforces Round #485 (Div. 2) F. AND Graph
		
Codeforces Round #485 (Div. 2) F. AND Graph 题目连接: http://codeforces.com/contest/987/problem/F Descri ...
 - Codeforces Round #485 (Div. 2) C. Three displays
		
Codeforces Round #485 (Div. 2) C. Three displays 题目连接: http://codeforces.com/contest/987/problem/C D ...
 - Codeforces Round #485 (Div. 2) A. Infinity Gauntlet
		
Codeforces Round #485 (Div. 2) A. Infinity Gauntlet 题目连接: http://codeforces.com/contest/987/problem/ ...
 - Codeforces Round #485 Div. 1 vp记
		
A:对每种商品多源bfs一下每个点到该商品的最近距离,对每个点sort一下取前s个即可. #include<iostream> #include<cstdio> #includ ...
 - Codeforces Round #485 (Div. 2)-B-High School: Become Human
		
B. High School: Become Human time limit per test 1 second memory limit per test 256 megabytes input ...
 - Codeforces Round #485 (Div. 2) C题求三元组(思维)
		
C. Three displays time limit per test 1 second memory limit per test 256 megabytes input standard in ...
 - Codeforces Round #264 (Div. 2) D. Gargari and Permutations 多序列LIS+dp好题
		
http://codeforces.com/contest/463/problem/D 求k个序列的最长公共子序列. k<=5 肯定 不能直接LCS 网上题解全是图论解法...我就来个dp的解法 ...
 
随机推荐
- uni-app 使用 iconfont
			
使用 uni-app 做项目时需要用到 iconfont.和 web 使用略有差别.谨以此记录. 因为 uni-app 不能使用本地字体图标库,所以不能直接下载使用. 1.将iconfont中需要的图 ...
 - mysql 创建备份表
			
mysql 中对已有表进行备份用到的语句 CREATE TABLE table_name_1 SELECT * FROM table_name_2; 这个语句是创建表1并且复制表2的结构和数据到表1 ...
 - Juniper BGP配置
			
网络拓扑如下: XRV1配置 =========================================================== root@XRV1# run show confi ...
 - 20175126《Java程序设计》第九周学习总结
			
# 20175126 2016-2017-2 <Java程序设计>第九周学习总结 ## 教材学习内容总结 - 本周学习方式主要为手动敲代码并理解内容学习. - 学习内容为教材第十一章,本章 ...
 - 从零开始学spring cloud(三) -------- Eureka简介
			
1.服务发现组件:Eureka Eureka的开源文档介绍地址:https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance What is Eu ...
 - Spring--基础介绍一:IOC和DI
			
前面学习了Struts2和Hibernate. Struts2主要是用来控制业务层面逻辑和显示,告诉你什么时候走哪个action,跑去运行哪个class的什么方法,后面调到哪个jsp. Struts2 ...
 - redis集群搭建及设置账户(转)
			
Redis集群搭建以及为集群设置密码 介绍安装环境与版本 用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master.3 salve 环境. redis 采用 redis-3.2.4 版本. ...
 - 对象属性拷贝工具类大全==>Bean的属性拷贝从此不用愁
			
大家在做java开发时,肯定会遇到api层参数对象传递给服务层,或者把service层的对象传递给dao层,他们之间又不是同一个类型对象,但字段又是一样,如果还是用普通的get.set方式来处理话,比 ...
 - crm开发之用户ModelForm定制和密码加密
			
写了这么多的定制 功能.终于可以定制一下了!因为是 stark 和 rbac 两个组建. 一起使用. 所以在这里,再记录一下.需要注意的点: 先放出 目录结构: 先从 stark 开始.使用star ...
 - 除非你是BAT,前端开发中最好少造轮子
			
站在前人的肩膀上 HTML.CSS.JavaScript是前端的根基,这是无可否认的事实.正如一辆车当然都是由一堆钢板和螺钉组成的,但是现在还有人拎着个锤子敲敲打打的造车吗?李书福说过,“汽车不过是四 ...