摘要:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1507 比较简单的一题,直接对答案二分。因为对于同一组case,答案m越大,交点的高度就越小,可以从计算交点的函数中看出来。计算交点,假设mx=sqrt(sqr(x)-sqr(m)),my=sqrt(sqr(y)-sqr(m)),这两个是梯子跟两堵墙的交点。那么,交点的高度就是mx*my/(mx+my)了。代码如下: 1 #include 2 #include 3 #include 阅读全文
摘要:
Problem - 1856 水题。离散化,然后求最大集合元素个数。 忘记压缩路径了,tle了很久。- -代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const int N = 222222;10 map id;11 12 struct MFS {13 int fa[N], sz[N], mxsz;14 void init() {15 for (int i = 0; i 2 #include 3 #incl... 阅读全文
摘要:
Problem - 3234 题意不难理解,就是给出一些断言,以及一些查询,回答查询或者在找到断言矛盾以后沉默不做任何事。 这题其实就是一个并查集的距离存储问题,只要记录并查集元素的相对值以及绝对值就可以了。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 const int N = 22222; 11 struct MFS { 12 int fa[N], rel[N], val[N]; 13 ... 阅读全文
摘要:
3169 -- Layout 继续差分约束。 这题要判起点终点是否连通,并且要判负环,所以要用到spfa。 对于ML的边,要求两者之间距离要小于给定值,于是构建(a)->(b)=c的边。同理,对于MD的,构建(b)->(a)=-c的边。然后就是(i+1)->(i)=0,两者距离大于0的限制。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const int N = 1111;10 const int M = 33333;11 struct Ed. 阅读全文
摘要:
1716 -- Integer Intervals 跟之前个人赛的一道二分加差分约束差不多,也是求满足条件的最小值。 题意是,给出若干区间,需要找出最少的元素个数,使得每个区间至少包含两个这里的元素。 做法就是建立(b)->(a)=-2,(i)->(i+1)=1,(i+1)->(i)=0的边,然后跑一次spfa即可。 做完的时候,因为队列开太小,所以re了一次。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 const int N = 11111; 9 struct. 阅读全文