题意
\(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;
}
标签:le,颜色,袜子,int,include,abc295
From: https://www.cnblogs.com/-lilong-/p/17976894