CF1166A Silent Classroom 题解

Content

现在有 \(n\) 名学生,我们需要将这些学生分到两个班上。对于两名在同一班级的学生,如果他们的名字首字母相同,他们就会聊天。

现在给定这些学生的名字,问最少有多少对学生会在一起聊天。

数据范围:\(1\leqslant n\leqslant 100\)

Solution

这道题目主要用到贪心。具体来说,对于所有名字首字母相同的同学,将他们尽可能平均地分到两个班里面。例如,假如名字首字母为 R 的同学有 \(5\) 名,那么我们就将 \(2\) 个人分到 \(1\) 班,\(3\) 个人分到 \(2\) 班。

然后,如果在一个班上且首字母相同的同学人数为 \(x\),那么就相当于在这 \(x\) 个人当中随机选出 \(2\) 个人聊天,那么这些人当中聊天的学生对数为 \(\begin{pmatrix}x\\2\end{pmatrix}=\dfrac{x(x-1)}2\)

依照这个思路直接模拟统计答案就好了。

Code

namespace Solution {
    int n, ans, vis[26]; string s;

    iv Main() {
        read(n);
        F(int, i, 1, n) cin >> s, vis[s[0] - 'a']++;
        F(int, i, 0, 25) {
            int x = vis[i] / 2, y = vis[i] / 2 + (vis[i] & 1);
            ans += (x * (x - 1) / 2 + y * (y - 1) / 2);
        }
        write(ans);
    }
}
posted @ 2021-12-15 21:20  Eason_AC  阅读(46)  评论(0)    收藏  举报