统计每个数的个数,然后用一个优先队列维护每个数,按照每个数出现的次数的一个小根堆。
一个贪心想法是,考虑每个数先和其他每个数配对一次,然后剩余多的数再自己和自己匹配。
因为总共有 n 个数,每个数至多各进出一次优先队列。
至于为什么需要先和其他数匹配,再和自己匹配。
炼金术士收集了 n 份原始材料,每份材料都有一个魔力值。当他将两份材料进行融合时,会触发一种共鸣效果。共鸣效果的类型完全由这两份材料的魔力值决定,且与材料的顺序无关(即魔力值 x 与 y 的融合和 y 与 x 的融合视为同一种效果)。术士想要尽可能多地发现不同种类的共鸣效果。同一种效果即使被触发多次,也只算作一种。现在给定所有材料的魔力值,请你帮他计算最多能发现多少种不同的共鸣效果。
材料数量 n 满足 1≤n≤105,每份材料的魔力值 ai 满足 1≤ai≤109。
第一行包含一个整数 n,表示材料的数量。 第二行包含 n 个整数,依次表示每份材料的魔力值。
In following contests:
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.