本文主要是介绍[语言月赛 202404] 神秘排列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
[语言月赛 202404] 神秘排列
题目描述
一个数列是神秘数列当且仅当满足下列条件:
- 这个数列是一个排列。即,整数 1∼n 均在这个数列中出现过,且其中的每种整数仅出现过一次(例如,当 n=4 时,1,2,4,31,2,4,3 是一个排列, 1,2,2,21,2,2,2 不是一个排列);
- 我们将一个数列中 x 出现的位置(出现在第几个)记作 px(1≤px≤n),神秘数列需要满足对于 1∼n 中的任意一个整数 i,都有 pi=ai。
例如,对序列 3,5,2,1,4,其中 1 的出现位置为 4,因此 p1=4。但是 a1=3!=p1,因此这个序列不是神秘序列。
你的工作是需要判定一个数列 a1,a2,⋯,an 是否为神秘数列。
输入格式
第一行一个整数 n,表示数列的长度。
第二行 n 个整数 a1,a2,⋯,an。
输出格式
一个字符串,假如这个数列是神秘数列,则输出 YES
,否则输出 NO
。
输入输出样例
输入 #1
3 2 1 3
输出 #1
YES
输入 #2
5 3 5 2 1 4
输出 #2
NO
说明/提示
数据规模与约定
对于 100% 的数据,1≤n≤105。
数据保证 a 是一个排列。即,整数 1∼n 均在这个数列中出现过,且每种整数仅出现过一次。
#include<bits/stdc++.h>
using namespace std;
int n,a[100000];
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<=n;i++){if(a[a[i]]!=i){cout<<"NO";return 0;}}cout<<"YES";
}
这篇关于[语言月赛 202404] 神秘排列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!