置换排列 |
Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB |
Total submit users: 1290, Accepted users: 1137 |
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 |
AC:
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <vector>
std::vector <int> v;
int main()
{
int t, n, tmp;
scanf("%d", &t);
for (int i = 0; i < t; ++i)
{
scanf("%d", &n);
v.push_back(0);
for (int j = 0; j < n; ++j)
{
scanf("%d", &tmp);
v.push_back(tmp);
}
bool f = 1;
for (int j = 1; j <= n; ++j)
{
if (v[v[j]] != j) { f = 0; break; }
}
if (!f) printf("no\n");
else printf("yes\n");
v.clear();
}
return 0;
}