1 条题解
-
0
自动搬运
来自洛谷,原作者为

Gabriel
登高必自卑,行远必自迩搬运于
2025-08-24 22:48:13,当前版本为作者最后更新于2023-06-24 09:09:39,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
思路
先把每个 的人数统计好,然后 的数量有两种情况:
- 数比二小。
- 数大于等于二。
把 大于等于二的学生数减二用 累加, 小于二的学生数用 累加。
如果 ,则只要把 相同且人数大于等于二的人的 改掉即可,即输出 。
如果 ,则把 相同的人改掉后剩下的不符合题意,应把一半 人数为一的改掉。即输出 。
代码
#include <bits/stdc++.h> using namespace std; const int N = 1e6 + 10; typedef long long ll; int a[N], cnt[N]; int n; int sum1 = 0, sum2 = 0; int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; cnt[a[i]]++; } for (int i = 1; i <= 1e6; i++) { if (cnt[i] >= 2) { sum1 += (cnt[i] - 2); } else { sum2 += cnt[i]; } } if (sum1 > sum2) { cout << sum1 << "\n"; } else { cout << sum1 + (sum2 - sum1) / 2 << "\n"; } return 0; }
- 1
信息
- ID
- 8845
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者