Merge Slimes 题解
Halberd_Cease · · 题解
题意:
思路就是循环取最小的史莱姆,因为小的史莱姆只能合成大的史莱姆,所以就不会出现后面的还可以和前面的合并的情况。
取出当前最小史莱姆合并,如果当前大小的数量是奇数就答案加上
这道题有在实现的方式上比较有趣,这里会给出 3 种实现。
- set + map 版
使用 set 记录当前所有的史莱姆大小,然后用 map 将大小和数量连起来(当时脑子抽了没想到 map 可以按键值排序还傻逼地用 set 排一遍)。
每一次从头取 set 中的元素,然后用 map 获取当前大小史莱姆的数量,将合成后的史莱姆大小加入 set,数量加入 map(注意要用 +=,不要直接赋值)。
这个东西实现不好会超时一点,set 在删除最前面的元素时要删指针不要删数。
code
- set 版
用结构体存储大小和数量,重载运算符按大小排序。
每一次从头取出大小和数量,操作后查找 set 中有没有
code
- map 版
将 set+map 版改成只有 map,由于 map 自动按键值从小到大排序,所以可以代替 set 的操作。
code
还有一种思路,就是把大的史莱姆往小了砍,砍成大小为奇数后就加进一个集合里面,最后统计就可以了。