B3965 [语言月赛 202404] 神秘排列 题解
Source & Knowledge
2024 年 4 月语言月赛,由洛谷网校入门计划/基础计划提供。
题目大意
给定一个数列,求这个排列是否是神秘数列。
一个数列是神秘数列当且仅当满足下列条件:
- 这个数列是一个排列。即,整数
1 \sim n 均在这个数列中出现过,且其中的每种整数仅出现过一次(例如,当n=4 时,1,2,4,3 是一个排列,1,2,2,2 不是一个排列); - 我们将一个数列中
x 出现的位置(出现在第几个)记作p_x (1 \leq p_x \leq n ),神秘数列需要满足对于1 \sim n 中的任意一个整数i ,都有p_i=a_i 。
题目分析
考虑一下
因此遍历数组,逐个判断
for (int i = 1; i <= n; ++i) {
if (a[a[i]] != i) {
cout << "NO" << endl;
return 0;
}
}
cout << "YES" << endl;