思路:
最朴素的想法是用堆存储每条蚯蚓, 同时用一个全局变量来记录所有蚯蚓增长的长度. 但是T了.
关键之处在于发现其中的单调性: 先斩的蚯蚓长度一定比后斩的蚯蚓要长.
首先先斩的蚯蚓在斩的时候就比后斩的长, 在后斩的开斩前先斩的两段长度和增加了2k, 而后斩的只增加了k, 所以先斩的两段一定比后斩的对应段要长.
发现了单调性意味着不需要使用堆来找出最长的蚯蚓了. 排序后建立三个队列存储即可, 其中一个用于存放未斩的蚯蚓, 另外两个用于存放已斩蚯蚓的对应段.
代码:
1 |
|
最朴素的想法是用堆存储每条蚯蚓, 同时用一个全局变量来记录所有蚯蚓增长的长度. 但是T了.
关键之处在于发现其中的单调性: 先斩的蚯蚓长度一定比后斩的蚯蚓要长.
首先先斩的蚯蚓在斩的时候就比后斩的长, 在后斩的开斩前先斩的两段长度和增加了2k, 而后斩的只增加了k, 所以先斩的两段一定比后斩的对应段要长.
发现了单调性意味着不需要使用堆来找出最长的蚯蚓了. 排序后建立三个队列存储即可, 其中一个用于存放未斩的蚯蚓, 另外两个用于存放已斩蚯蚓的对应段.
1 | #include <queue> |