置换排列 |
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");
}