【LGR-145-Div.4】洛谷入门赛 #14

题目

团伙首领

题目描述

某 E 正在机房值班,小朋友吵得她头晕脑胀,她将 N N N 名吵闹的小朋友带出了机房,依次编号为 1 , 2 , ⋯   , N 1,2,\cdots,N 1,2,,N

某 E 发现,这些小朋友形成了若干个小团伙,每个小朋友属于且只属于一个小团伙。她要求每一名小朋友指出自己所在小团伙的首领编号,第 i i i 名小朋友指认的首领编号为 S i S_i Si

假定所有小朋友都没有说谎,请问这 N N N 名小朋友中一共形成了多少个小团伙?

输入格式

输入共两行。

输入的第一行为一个正整数 N N N

输入的第二行为 N N N 个正整数,第 i i i 个为 S i S_i Si

输出格式

输出一行一个整数,代表机房里小团体的数目。

样例 #1

样例输入 #1

5
1 1 3 4 1

样例输出 #1

3

提示

数据规模与约定

  • 对于 30 % 30\% 30% 的测试数据,每个小团体有且只有一个人。
  • 对于 100 % 100\% 100% 的测试数据, N ≤ 1 0 6 N \le10^6 N106 1 ≤ S i ≤ N 1 \leq S_i \leq N 1SiN。数据保证有解且合法,即每个小朋友都真实地指认了 ta 所在团伙的首领。
#include <iostream>
using namespace std;
int a[1010];

int main() {
   int n, x, sum = 0;
   cin >> n;
   for (int i = 1; i <= n; i++) {
   	cin >> x;
   	a[x]++;
   	if (a[x] == 1) {
   		sum++;
   	}
   }
   cout << sum << endl;
   return 0;
}

[NOIP2006 普及组] 明明的随机数

题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N N N 1 1 1 1000 1000 1000 之间的随机整数 ( N ≤ 100 ) (N\leq100) (N100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

输入格式

输入有两行,第 1 1 1 行为 1 1 1 个正整数,表示所生成的随机数的个数 N N N

2 2 2 行有 N N N 个用空格隔开的正整数,为所产生的随机数。

输出格式

输出也是两行,第 1 1 1 行为 1 1 1 个正整数 M M M,表示不相同的随机数的个数。

2 2 2 行为 M M M 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

样例 #1

样例输入 #1

10
20 40 32 67 40 20 89 300 400 15

样例输出 #1

8
15 20 32 40 67 89 300 400

提示

NOIP 2006 普及组 第一题

#include <iostream>
#include <cmath>
using namespace std;
int a[1010]; 
int main(int argc, char** argy)
{
	int sum=0,n,x;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>x;
		a[x]++;
		if(a[x]==1)
		{
			sum++;
		}
	}
	cout<<sum<<endl;
	for(int i=1;i<=1000;i++)
	{
		if(a[i]>0)
		{
			cout<<i<<" ";
		}
	}
 	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值