Description \text{Description} Description
Given an array a [ ] , swap random 2 number of them for 3 n or ( 7 n + 1 ) times. \text{Given an array }a[],\text{ swap random 2 number of them for }3n\text{ or }(7n+1)\text{ times.} Given an array a [ ] , swap random 2 number of them for 3 n or ( 7 n + 1 ) times.
Please compute how many times for swaping. \text{Please compute how many times for swaping.} Please compute how many times for swaping.
Solution \text{Solution} Solution
It’s easy to know that if we keep swaping a [ i ] and a [ a [ i ] ] , they’ll always \text{It's easy to know that if we keep swaping }a[i]\text{ and }a[a[i]],\text{ they'll always} It’s easy to know that if we keep swaping a [ i ] and a [ a [ i ] ] , they’ll always
goes a [ i ] = i at last. \text{goes }a[i]=i\text{ at last.} goes a [ i ] = i at last.
Counting times we’ve done that so that ∀ i , a [ i ] = i . Check its parity. \text{Counting times we've done that so that }\forall i,a[i]=i.\text{ Check its parity.} Counting times we’ve done that so that ∀ i , a [ i ] = i . Check its parity.
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
int n;
int a[ 1000010 ] ;
int ans= 0 ;
int main ( ) {
scanf ( "%d" , & n) ;
for ( int i= 1 ; i<= n; ++ i)
scanf ( "%d" , & a[ i] ) ;
for ( int i= 1 ; i<= n; ++ i)
while ( a[ i] != i) {
std:: swap ( a[ i] , a[ a[ i] ] ) ;
++ ans;
}
if ( ans% 2 == n% 2 ) puts ( "Petr" ) ;
else puts ( "Um_nik" ) ;
}