1.有木有河南安阳的初中生,有的私信我哦
2.题面如下
密码轮盘
限制:1000ms/512mb
【问题描述】
在一次探险中,你发现了一个神秘的密室。在密室的一面墙上,有一个巨大的密码轮盘,轮盘上有 N 个格子,从 1 到 N 编号。每个格子上都写着一个整数 ai,其中 1≤i≤N。
你注意到墙壁上有一行字:
“唯有解开数字之谜,方可获得宝藏。”
经过观察,你意识到这个数字之谜可能与这些格子有关。
任务: 你需要找出有多少种格子对 (i,j) 满足 a[i]=j 且 a[j]=i,(i可以等于j),也就是说,格子 i 上的数字和格子 j 的编号相同,同时格子 j 上的数字和格子 i 的编号也相同。
【输入格式】
第一行一个整数 N。
第二行有 N 个整数,第 i 个数是 a[i]。
【输出格式】
输出一个整数,表示满足条件的格子对的数量。
注意:每一对只计算一次,也就是说,(i,j) 和 (j,i) 视为相同的一对。
【规模与约定】
对于 100% 的数据, 1≤N≤105,1≤a[i]≤N
30分代码附上
#include<bits/stdc++.h>
using namespace std;
long long n,a[100005],ans;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
int x=a[i];
if(x==i)
ans++;
if(a[x]=i)
ans++;
}
ans/=2;
cout<<ans;
}
求大佬指正