AT_abc295_c

题意

\(n\) 个袜子,每个袜子有一个颜色,如果有两个袜子的颜色相同,则可以把它们配成一对袜子。求一共能配成多少对袜子。

思路

看到颜色值域 \(1 \le a_i \le 10^9\),用普通的数组存不下。可以考虑对序列 \(a\) 排序,求出相同颜色袜子的数量 \(k\),则可以产生 \(\left\lfloor\dfrac{k}{2}\right\rfloor\) 对袜子。将答案累加即可。

Code

代码实现十分简洁:

#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

int n,a[1000001],ans,cnt;

int main()
{
	cin >> n;
	for( int i = 1 ; i <= n ; i ++ )
		cin >> a[i];
	sort( a + 1 , a + n + 1 );
	for( int i = 1 ; i <= n ; i ++ )	
		if( a[i] == a[i - 1] )
			cnt ++;
		else
			ans += cnt / 2,cnt = 1;
	ans += cnt / 2;
	cout << ans;
	return 0;
}
posted @ 2024-01-20 18:05  liyilang2021  阅读(1)  评论(0编辑  收藏  举报