摘要:
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=219 题意是,给出铁人三项运动员在每一项中的速度,问他是否有可能获得第一。 如果还没学过半平面交,估计做这题的时候应该是不停yy如何比较每两个运动员之间谁赢谁输,然后忽略了整体情况而导致狂wa不止。 如果是利用半平面交,这时我们要假设前两项项目的路程占全程分别是x和y,那么总时间T(x,y)=x/v+y/u+(1-x-y)/w。 对于判断当前运动员i是否能获胜,将它 阅读全文
摘要:
http://poj.org/problem?id=3525https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=&problem=1891&mosmsg=Submission+received+with+ID+1236113 一直不会半平面交,今天看了半平面交的做法,发现半平面交需要注意的细节还真是太多了,要仔细分析才能写对代码。半平面交较快的做法是用双向队列来维护半平面区域中的点和有向直线。 这道题 阅读全文
摘要:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4199https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=&problem=2729&mosmsg=Submission+received+with+ID+1236098 依然是《训练指南 阅读全文
摘要:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=14&page=show_problem&problem=1197 题意是给出两堆点,问是否能找到一条直线将这两堆点分开,有就输出“Yes”,否则输出“No”。 构建两个凸包,如果存在这样的一条直线,那么这两个凸包必然不相交。构建完凸包以后,就是枚举每条边,判断两个凸包是否有相交的部分。代码如下:View Code 1 #include <cstdio> 2 #include <cstrin 阅读全文
摘要:
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=16223134 -- Power Calculus 又搞了几天才出一题。 这题我是用迭代加深深度优先搜索来做的。网上的题解多种多样,大部分都是BFS的,不过好多都是没有证明的方法。表示个人认为迭代加深是一个十分好的正解。 至于这题为何用迭代加深,个人认为原因是:(1)BFS剪枝不容易加上去,即便是加上一两个剪枝也无法剪枝到系统可以接受的时间和空间。(网上有题解说搜索 阅读全文
摘要:
2743 -- Mobile Computinghttps://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1404 中等偏简单的一道搜索题,用状态压缩可以直接计算出来。因为mobile的一条rod只有两端,所以我们只要考虑两边分别是放置哪个/哪些重物就可以了。这个可以用集合的形式来表示,然后就是一个子集分割,但是这里不允许空集,所以初始集合有所不同。sample真实神奇,我的mobile的力矩公式都用反了居然还可以过了sam 阅读全文
摘要:
uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1593 要做的操作是将矩形的四个顶点拿出来,然后对点集构建凸包。简单题,1y!View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <set> 5 #include <vector> 6 #include <iostream 阅读全文
摘要:
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=problem_stats&problemid=573&category= 一道很好的几何题。要求是给出一些圆,按顺序覆盖上去,问哪些圆是可以被看见的。 看刘汝佳的书,开始的时候不明白“每个可见部分都是由一些‘小圆弧’围城的”这样又怎么样,直到我看了他的代码以后才懂。其实意思就是,因为每个可见部分都是由小圆弧围成,所以,如果我们将小圆弧中点(不会是圆与圆的交点)相对于弧的位置向里或向外稍微移动一下,然 阅读全文
摘要:
1041 -- John's trip 输出字典序最小的欧拉回路。之前做过的是要求点的序列最小字典序,今天见到这个经典的欧拉回路是要输出边的编号的最小序。做法跟输出点路径的相似。View Code 1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 #include <set> 5 #include <map> 6 #include <queue> 7 #include <stack> 8 9 using namespac 阅读全文
摘要:
Problem - 2454 模拟,利用图的性质,将当前度数最大的点(假设度数为d(x))删除的同时,把紧接着的前d(x)大的度数分别减一。如果最终可以全部相消,那么就是一个简单图,否则不是。View Code 1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 #include <set> 5 #include <stack> 6 7 #define REP(i, n) for (int i = 0; i < (n); i++) 8 using 阅读全文