Source
Codeforces Round #378 (Div. 2)
My Solution
题意:可以把2个长方体合并成1个(只能把尺寸相同的面合并),或者只选一个,然后搞出一个球,求选1个或者2个合并成1个,从而球的体积最大
data structures、map<ii, priority_queue > mp;
把长方体的分成地面和高来储存,
如果长宽高3条边都不相等,则每个面存一次,mp[ii(x, y)].push(ii(z, i)); mp[ii(y, z)].push(ii(x, i)); mp[ii(x, z)].push(ii(y, i)); 并且确保mp.first.first >= mp.first.second
如果有2条边相等,则存2个面
如果长宽高都相等,则存1个面
存储完后,用迭代器访问一遍map,每个priority_queue,访问前1个和前2个,并用 a, b, ans分别维护选中的第一个长方体的编号、选中的第二个长方体的编号(如果有)、所求球体的直径。
复杂度 O(nlogn)
#include
#include
#include
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
https://www.prolightsfxjh.com/
Thank you!
------from ProLightsfx
共有 0 条评论