B. Petr and Permutations+数学

分组

有n个元素的组需要交换n-1次

这样n-cyc就是最少的交换次数

petr与n奇偶一致,这样判断n与最少次数是否一致

B. Petr and Permutations
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

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.

Input

In the first line of input there is one integer n

( 103n106

).

In the second line there are n

distinct integers between 1 and n — the permutation of size n

from the test.

It is guaranteed that all tests except for sample are generated this way: First we choose n

 — the size of the permutation. Then we randomly choose a method to generate a permutation — the one of Petr or the one of Alex. Then we generate a permutation using chosen method.

Output

If the test is generated via Petr's method print "Petr" (without quotes). If the test is generated via Alex's method print "Um_nik" (without quotes).

Example
Input
Copy
5
2 4 5 1 3
Output
Copy
Petr
Note

Please note that the sample is not a valid test (because of limitations for n

) and is given only to illustrate input/output format. Your program still has to print correct answer to this test to get AC.

Due to randomness of input hacks in this problem are forbidden.


#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef vector<int> VI;
typedef long long ll;
typedef pair<int,int> PII;
const ll mod=1000000007;
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
// head

const int N=101000;

int n,p[N],vis[N],cyc;
int main() {
	scanf("%d",&n);
	rep(i,0,n) scanf("%d",p+i),--p[i];
	rep(i,0,n) if (!vis[i]) {
		int y=i; cyc++;
		while (!vis[y]) {
			vis[y]=1;
			y=p[y];
		}
	}
	cyc=n-cyc;
	if (cyc%2==n%2) puts("Petr");
	else puts("Um_nik");
}

猜你喜欢

转载自blog.csdn.net/ujn20161222/article/details/80505670