本文主要是介绍上海计算机学会2022年2月月赛C++丙组T2自由配对,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
有 �n 名同学,编号分别为 1 到 n,我们需要将他们两两配对组成队伍。
每名同学有且只有一个愿意组队的对象,其中第 i 名同学的组队对象是 ai。若 �i 的组队对象是 j 而 j 的组队对象也是 i,那么这两位同学可以组队。
请这些同学可以组成多少个配对。
输入格式
- 第一行:一个整数 n
- 第二行:n 个 整数 1,2,…,a1,a2,…,an,其中 ai 表示i 号同学希望组队的编号。
输出格式
- 单个整数,表示成功组队的小组数量。
数据范围
- 对于 30%30% 的数据,2≤n≤10
- 对于 60%60% 的数据,2≤n≤1000
- 对于100%100%的数据,≤n≤100000,
- 数据保证 ai≠i
样例数据
输入:
4
3 3 2 1
输出:
1
说明:
1号同学想和3号同学组队,
2号同学想和3号同学组队,
3号同学想和2号同学组队,
4号同学想和1号同学组队,
因此2号与3号同学组队成功,共成功组成1个小组。
解析
本题关键点:a数组存储对应的同学,用循环判断是否配对成功。代码如下。
#include <iostream>
using namespace std;
int main(){int n,ans;cin>>n;ans=0;int a[100001];for(int i=1;i<=n;i++){cin>>a[i];}for (int j=1;j<=n;j++){if (a[a[j]]==j){ans++;}}cout<<ans/2; return 0;
}
这篇关于上海计算机学会2022年2月月赛C++丙组T2自由配对的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!