全站寻人/站外题求助
  • 板块灌水区
  • 楼主lyx703
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/10/8 15:51
  • 上次更新2023/11/2 14:56:03
查看原帖
全站寻人/站外题求助
931976
lyx703楼主2023/10/8 15:51

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≤10510^5,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;

 } 

求大佬指正

2023/10/8 15:51
加载中...