[Usaco2013 Jan] Square Overlap
2013-02-24 17:21
316 查看
题目链接: http://www.usaco.org/index.php?page=viewproblem2&cpid=227
官方题解:http://www.usaco.org/current/data/sol_squares.html
模型:有n个大小相同的正方形,问是否存在两个正方形有公共部分,若仅有一个公共部分,求出它的面积;若没有,输出0;否则输出-1.
以下是我在比赛期间死磕出来的算法:
记以A为中心,k为边长的正方形为正方形A
建立一个用来描述中心点所在区域的数组area[][][],其中area[x][y]
表示第n个落在以(xk, yk)为左下角,边长为k的正方形区域(不包括上边和右边)内的点的编号(显然area[][][]很容易进行初始化)。
定理:两个正方形A,B有公共部分必须满足这两个点所在的正方形区域M,N有公共点。
证明:(稍后补上) 偷个懒
当然这并不是充分条件,所以我们需要重新判断正方形A,B之间的是否由公共部分。由此可以得出算法:枚举每一个点A,判断与它所在区域有公共点的9个区域中是否有点B满足A,B有公共部分并求出其面积。
由于几乎所有区域中最多只会有一个中心点(若存在两个有两个(或更多)中心点的区域,答案即为-1),所以该算法的时间复杂度为O(n)
最后吐槽一下:数据的第9个点的k是奇数,但题目描述保证k为偶数,于是就悲剧了。。。
(代码正在修改中)代码就不贴了哈
由于我不知道我用的到底是什么算法,暂且归为ad hoc吧!
UPD: 官方数据的第9个点已经改正。
官方题解:http://www.usaco.org/current/data/sol_squares.html
模型:有n个大小相同的正方形,问是否存在两个正方形有公共部分,若仅有一个公共部分,求出它的面积;若没有,输出0;否则输出-1.
以下是我在比赛期间死磕出来的算法:
记以A为中心,k为边长的正方形为正方形A
建立一个用来描述中心点所在区域的数组area[][][],其中area[x][y]
表示第n个落在以(xk, yk)为左下角,边长为k的正方形区域(不包括上边和右边)内的点的编号(显然area[][][]很容易进行初始化)。
定理:两个正方形A,B有公共部分必须满足这两个点所在的正方形区域M,N有公共点。
证明:(稍后补上) 偷个懒
当然这并不是充分条件,所以我们需要重新判断正方形A,B之间的是否由公共部分。由此可以得出算法:枚举每一个点A,判断与它所在区域有公共点的9个区域中是否有点B满足A,B有公共部分并求出其面积。
由于几乎所有区域中最多只会有一个中心点(若存在两个有两个(或更多)中心点的区域,答案即为-1),所以该算法的时间复杂度为O(n)
最后吐槽一下:数据的第9个点的k是奇数,但题目描述保证k为偶数,于是就悲剧了。。。
(代码正在修改中)代码就不贴了哈
由于我不知道我用的到底是什么算法,暂且归为ad hoc吧!
UPD: 官方数据的第9个点已经改正。
相关文章推荐
- 【BZOJ 3049】【USACO2013 Jan】Island Travels BFS+状压DP
- 【BZOJ 3050】【USACO2013 Jan】Seating 线段树
- 【bzoj 3048】[Usaco2013 Jan]Cow Lineup(单调队列)
- BZOJ 3048: [Usaco2013 Jan]Cow Lineup 单调队列
- 【USACO】2013 Jan Liars and Truth Tellers 真假奶牛
- USACO翻译:USACO 2013 JAN三题(1)
- 【BZOJ】【P3028】【Usaco2013 Jan】【Cow Lineup】【题解】
- 【bzoj3048】[Usaco2013 Jan]Cow Lineup
- [bzoj 3048] [Usaco2013 Jan]Cow Lineup
- BZOJ 3050: [Usaco2013 Jan] Seating
- BZOJ_3048_[Usaco2013 Jan]Cow Lineup _双指针
- [Usaco2013 Jan]Island Travels
- BZOJ3048: [Usaco2013 Jan]Cow Lineup
- [USACO 2013 Jan]Island Travels
- BZOJ 3049: [Usaco2013 Jan]Island Travels
- bzoj3048: [Usaco2013 Jan]Cow Lineup(单调队列)
- [BZOJ3048][Usaco2013 Jan]Cow Lineup(单调队列)
- [BZOJ3050][Usaco2013 Jan]Seating(线段树)
- [USACO2013 Jan]Liars and Truth Tellers真假奶牛
- 【usaco-Liars and Truth Tellers, 2013 Jan真假奶牛】并查集