置换排列 |
Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB |
Total submit users: 201, Accepted users: 193 |
Problem 10182 : No special judgement |
Problem description |
给定一个自然数n 和 1到n的一个排列,比如 4 及 排列 1 4 3 2,我们说1放在第1个位置,第1个位置放了1,4放在第2个位置,第4个位置放2,3放在第3个位置,第3个位置放了3;我们可以输出yes;但是对5 以及 排列 2 3 4 5 1 却不成立,我们输出no。 |
Input |
第一行t,表示测试数据的个数接下来的t行每行是n 和 1到n的一个排列共n+1个自然数,n<=100。 |
Output |
对每个测试数据输出yes 或者 no。 |
Sample Input |
3 4 1 4 3 2 5 2 3 4 5 1 1 1 |
Sample Output |
yes no yes |
Problem Source |
CSU 1st Contest |
#include
<
stdio.h
>
#define MAX 150
#define YES 1
#define NO 0
main()
{
int p = 0 ,k = 0 ,n = 0 ,i = 0 ,j = 0 ,flag;
int num[MAX];
scanf( " %d " , & k);
for (p = 0 ;p < k;p ++ ){
scanf( " %d " , & n);
for (i = 1 ;i <= n;i ++ )scanf( " %d " , & num[i]);
for (i = 1 ;i <= n;i ++ ){
if ( (num[num[i]] == i) )flag = YES;
else {flag = NO; break ;}
}
if (flag == YES)printf( " yes " );
else printf( " no " );
}
system( " PAUSE " );
}
#define MAX 150
#define YES 1
#define NO 0
main()
{
int p = 0 ,k = 0 ,n = 0 ,i = 0 ,j = 0 ,flag;
int num[MAX];
scanf( " %d " , & k);
for (p = 0 ;p < k;p ++ ){
scanf( " %d " , & n);
for (i = 1 ;i <= n;i ++ )scanf( " %d " , & num[i]);
for (i = 1 ;i <= n;i ++ ){
if ( (num[num[i]] == i) )flag = YES;
else {flag = NO; break ;}
}
if (flag == YES)printf( " yes " );
else printf( " no " );
}
system( " PAUSE " );
}