Petr 要打乱排列。他首先有一个从
Alex 也要打乱排列。他与 Petr 唯一的不同是他进行
给定一个
(by AKEE)
题解
首先我们考虑怎么快速还原这个序列。
很显然的一个贪心策略就是假设序列为
这样做我们发现交换次数是
然后我们发现要一个序列交换后形成交换前的序列交换次数只能是偶数。所以该交换次数与 Petr 或 Alex 的奇偶性相同。
于是只要判一下奇偶即可。
代码
cpp
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1000005;
int aa[maxn];
int main()
{
int n;
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
scanf("%d", &aa[i]);
int ans = 0;
for(int i = 1; i <= n; ++i)
{
while(aa[i] != i)
{
swap(aa[aa[i]], aa[i]);
ans++;
}
}
if((n & 1) == (ans & 1)) // 判断奇偶性相同
puts("Petr");
else
puts("Um_nik");
return 0;
}