usaco Section 3.1 Shaping Regions -- 矩形切割

      听说这道题用矩形切割做,于是学习了2004薛矛的oi论文。

     


 

      我的做法是:弄一个白纸集合,开始里面只有一张白纸(0,0) (A,B)。然后把输入的N个矩形倒序地,每一个都与白纸集合中的所有白纸依次切割。对于输入的矩形rec[i]与每张白纸,用rec[i]去覆盖它。如果有交集,则交集为rec[i]的颜色,把元素个数统计到rec[i]的颜色中,然后把白纸中没被覆盖的地方切成矩形加入到白纸集合,并且把原来被切的白纸从集合中删除。没有交集就什么都不用做。N个矩形都处理过后,白纸集合中矩形就都是颜色为1的矩形,把它们的元素个数统计到颜色1中去即可。

      其中矩形切割的函数是按着上面的伪代码写的。

     

USER: li xiu [lingxiu1]  TASK: rect1  LANG: C++

Compiling...   Compile: OK   Executing...

Test 1: TEST OK [0.000 secs, 3052 KB]

Test 2: TEST OK [0.000 secs, 3052 KB]

Test 3: TEST OK [0.000 secs, 3052 KB]

Test 4: TEST OK [0.000 secs, 3052 KB]

Test 5: TEST OK [0.000 secs, 3052 KB]

Test 6: TEST OK [0.000 secs, 3052 KB]

Test 7: TEST OK [0.000 secs, 3052 KB]

Test 8: TEST OK [0.000 secs, 3052 KB]

Test 9: TEST OK [0.000 secs, 3052 KB]

Test 10: TEST OK [0.000 secs, 3052 KB]

Test 11: TEST OK [0.011 secs, 3052 KB]

All tests OK.

Your program ('rect1') produced all correct answers! This is yoursubmission #12 for this problem. Congratulations!

速度还不错啊~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值