| Time Limit: 2000MS | Memory Limit: 10000K | |
| Total Submissions: 5093 | Accepted: 2644 |
Description
Write a program to calculate the perimeter. An example with 7 rectangles is shown in Figure 1.
The corresponding boundary is the whole set of line segments drawn in Figure 2.
The vertices of all rectangles have integer coordinates.
Input
0 <= number of rectangles < 5000
All coordinates are in the range [-10000,10000] and any existing rectangle has a positive area.
Output
Sample Input
7 -15 0 5 10 -5 8 20 25 15 -4 24 14 0 -6 16 4 2 15 10 22 30 10 36 20 34 0 40 16
Sample Output
228
Source
/*
第一个线短树, 对于输入矩形,将其转换为所有竖边进行存储,然后将竖边进行排序
线段树的存储按照所有点y轴坐标递增序列的下标来组织
然后一次处理所有竖线,如果是矩形的左竖边,则将其加入线段树,如果是矩形的右竖边,则从线段树中减去
(注意,amountLen是指区域的覆盖长度,而不是总长度,即重复的区域只统计一次),然后统计当前值,当前
值的统计分两块:(1)竖线长度 = 当前的amountLen - 上一个amountLen (2)横线长度 = (当前竖线x坐标 - 上一个竖线x坐标)× 当前的段总数 × 2; 最后 总长+= (1) + (2)即可
注意这道题的与star之类的题的不同点在于,star的amountLen是总长度,即包括重复区域,而这道题的总长度是覆盖长度,而不包括区域长度的重复统计
*/
654



被折叠的 条评论
为什么被折叠?



