02 2013 档案

摘要:题意:给出一些建筑物的高度与宽度,求出一条最矮的抛物线运动轨迹,能够跨过所有的建筑物。输出初速度与水平方向的夹角,以及初速度的大小。重力加速度取9.8m/(s^2)题解:相当于知道抛物线两点,求最小高度,二分抛物线方程的参量,然后检查所有建筑的顶点和抛物线的高度。再次没有写。。。。 阅读全文
posted @ 2013-02-28 23:53 proverbs 阅读(183) 评论(0) 推荐(0)
摘要:题意:给你两个集合的点,让你求一条线把这些点分成两部分,使得每一部分都包含每个集合点的一半。题解:继续通过没据点来枚举半平面~用那个多添加n-1个元素的方法,写起来真是无脑~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 33333 9 #define EPS 1e-710 阅读全文
posted @ 2013-02-28 23:51 proverbs 阅读(315) 评论(0) 推荐(0)
摘要:球面距离公式:dis = acos(sin(p1y) * sin(p2y) + cos(p1y) * cos(p2y) * cos(p2x - p1x)) * R;其中p1y,p2y表示维度(北正南负),p1x,p1y表示经度(东正西负)。R为球的半径 阅读全文
posted @ 2013-02-28 23:42 proverbs 阅读(223) 评论(0) 推荐(0)
摘要:题意:一些点,求一个单位圆最多能覆盖的点的个数,不存在两点距离恰好为2.题解:暴力枚举两个点,求圆心,然后枚举每个点验证是否在圆内。n^3的,可以过~当然还有n^2logn的转化为求圆的最大弧的覆盖次数问题(以后做CIRU 的时候也会用到这个技术~)n^3View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <algorithm> 6 #include <cmath> 阅读全文
posted @ 2013-02-28 23:40 proverbs 阅读(1259) 评论(0) 推荐(0)
摘要:题意:求从光源透过圆形的阴影的线段,并排序输出。题解:求圆的切线,利用勾股定理和坐标旋转即可。处理出所有与地平线的交点,标号正负1,排序,然后扫一遍就好了~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 2222 9 #define BUG system("paus 阅读全文
posted @ 2013-02-28 23:32 proverbs 阅读(253) 评论(0) 推荐(0)
摘要:题意:给你n个点(4~700),问你能够成多少个不同的凸四边形。题解:只要求所有凹四边形即可。对于每个点,凹四边形的个数等于:C(n-1,3)-在这个点同一侧三点构成的三角形的个数。对于凸多边形的一个顶点,其他顶点必然在穿过这个顶点的直线的同侧。处理这个有一个好方法,我以前一直没发现。算极角时,如果是负数(-pi ~ 0),就把它加上2 * pi,这样就把角度统一到了0~2pi。另外,向这题顺次统计两个点的夹角时,由于会出现转了一圈的情况不好计算角度,所以在原来数组后面再顺次加上n-1一个点,角度同一加2pi这个方法真的很好用~View Code 1 #include <iostream 阅读全文
posted @ 2013-02-28 23:28 proverbs 阅读(450) 评论(0) 推荐(0)
摘要:题意:给了n(n<50000)圆的圆心坐标和半径,任意两个圆不会相切或者相交,也就是说只存在内含和相离两种关系,问最深的那个圆被嵌套了多少次。题解:抄的别人的。。然后自己还不会nlogn的实现。。后来看别人代码,发现,set用的太神了!比较函数中有一个变量,但是这个变量的改变并不会影响set的形态!所以不会出问题!http://hi.baidu.com/bobo__bai/item/17f7b28bd5994a5d850fab39View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <c 阅读全文
posted @ 2013-02-28 23:16 proverbs 阅读(301) 评论(0) 推荐(0)
摘要:题意:一只蚂蚁,只会向左转,现在给出平面上很多个点,求解一种走法,能使得蚂蚁能经过的点最多,每个顶点该蚂蚁只能经过一次,且所行走的路线不能发生交叉.题解:不停地做凸包,将左右栈中弹出的元素继续做凸包,知道没有元素弹出为止。应该是对的吧,没写。。。。懒死啦。。。 阅读全文
posted @ 2013-02-28 23:09 proverbs 阅读(181) 评论(0) 推荐(0)
摘要:题意:有一块1000*1000的蛋糕,切几刀以后问切成了几块。题中说:"The intersections of the cut line and the cake edge are two"即每一刀和蛋糕的边缘交点为两个。描述每一刀的时候就是用这两个交点描述的。(在台湾的一个BBS上看到有人说有的时候交点并不是两个,那么应该切的正好是蛋糕边缘)。题解:欧拉定理。V-E+R=2。又写wa了,果断超起题解。。我太无节操了。。。View Code 1 #include <iostream> 2 #include <cstdio> 3 #include & 阅读全文
posted @ 2013-02-27 22:24 proverbs 阅读(266) 评论(0) 推荐(0)
摘要:题意:求多边形的最大内接圆。题解:二分答案,将所有边向内部逼近,当面积为恰好0时即为最大半径终于写a了一会。。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 222 9 #define PI 3.14159265358979 10 #define INF 1e9 11 #de 阅读全文
posted @ 2013-02-27 22:20 proverbs 阅读(355) 评论(0) 推荐(0)
摘要:题意:半平面交实际应用,用两个半径相等的圆覆盖一个多边形,问最多能覆盖多边形的面积,多边形为凸多边形,两个圆之间可以重叠,但圆不能出多边形的边界。题目要求输出,满足条件后,两个圆的圆心位置。题解:多边形向内平移r,找多边形上的最远点对就是圆心(因为两圆的圆心距越大,覆盖面积越大)又没写,只是看了看。。。 阅读全文
posted @ 2013-02-27 22:17 proverbs 阅读(196) 评论(0) 推荐(0)
摘要:题意:两个人玩藏东西,一个藏,一个找,屋子的大小事0,0 到 10,10,的正方形,从0,0开始找,每次都会提示比前一次近还是远,问每次的可能在的区域大小题解:每次做此次和上次的中垂线,答案就是求所有半平面(中垂线表示的)的交代码没有写。。。 阅读全文
posted @ 2013-02-27 22:16 proverbs 阅读(185) 评论(0) 推荐(0)
摘要:题意:半平面交面积题解:果断上模板了。尼玛。。。我输出-0.0给wa了半天,,,抑郁。。。这个好像没什么用。。。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 222222 9 #define EPS 1e-10 10 #define SIDE 10000 11 12 usi 阅读全文
posted @ 2013-02-27 22:14 proverbs 阅读(948) 评论(0) 推荐(0)
摘要:题意:一块有n个点的凸多边形面包要沾牛奶,每次可以沾的深度是h, 总共可以沾 k 次, 求最大沾取牛奶的面积。题解:枚举k条边,然后半平面交找最小剩余面积。。又查不出错了,不想对拍了,这几天写计算几何都恶心死了,各种数据弱,模板写错了都不知道,下次用被卡的时候死活检查不出来了。。改了好几回模板了,现在应该是对的,不知道我那里没考虑到,wa啊。。。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #inclu 阅读全文
posted @ 2013-02-27 22:12 proverbs 阅读(199) 评论(0) 推荐(0)
摘要:题意:给定平面上任意三点不共线的一个点集,每次询问三个点,求三个点组成的三角形中内包含点集中多少个点。点数1000,询问100000,没有三点共线题解:(引用了某神牛的图。。)分成7个区域,然后0=(0+2)+(0+6)+(0+4)+(1+2+3)+(3+4+5)+(1+5+6)-2*(1+2+3+4+5+6)然后通过种种极角排序完的单调性n^2logn预处理,O(1)回答询问。抑郁了,调了一晚上,好不容易找了错了(角标打错了。。。),对拍了半天都没发现错(没有三点共线时是对的,有三点共线就错的离谱了。。但是,题目说了没有了。。)哪位神犇如果发现我哪里写错了请告诉我一声,感谢!View Cod 阅读全文
posted @ 2013-02-26 23:47 proverbs 阅读(745) 评论(0) 推荐(0)
摘要:题意:判断多边形是否存在核。题解:最终的交点数组中没有点则没有核。View Code 1 #include <iostream> 2 #include <algorithm> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <cstring> 6 #include <cmath> 7 8 #define N 2222 9 #define EPS 1e-7 10 #define INF 1e9 11 12 using namespace std; 13 14 struc 阅读全文
posted @ 2013-02-26 23:39 proverbs 阅读(222) 评论(0) 推荐(0)
摘要:题意:求一任意多边形的核的面积题解:半平面交。第一次搞。。。找了半天错,又和题解一样了。View Code 1 #include <iostream> 2 #include <algorithm> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <cstring> 6 #include <cmath> 7 8 #define N 2222 9 #define EPS 1e-7 10 #define INF 1e9 11 12 using namespace std; 阅读全文
posted @ 2013-02-26 23:36 proverbs 阅读(229) 评论(0) 推荐(0)
摘要:题意:可以瞬移的Sunny却不能同时看两个场馆的表演,现给出n个场馆表演开始和结束时间,问多少天能全部看完。题解:求最大限度按覆盖次数。利用差分数组做。View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <algorithm> 6 7 #define N 86444 8 9 using namespace std;10 11 int s[N],e[N],n;12 13 inlin 阅读全文
posted @ 2013-02-26 23:34 proverbs 阅读(233) 评论(0) 推荐(0)
摘要:题意:一些点,求半径最小的圆能覆盖所有点。题解:我觉得随机增量特别扯。。主要还是我弱。。View Code 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 2222 9 #define EPS 1e-7 10 11 using namespace std; 12 13 struct PO 14 阅读全文
posted @ 2013-02-26 23:31 proverbs 阅读(256) 评论(0) 推荐(0)
摘要:题意:给定平面上的N个圆,问整个平面被分成了几个部分。题解:欧拉公式。欧拉公式好多啊,偶像啊!!~( 欧拉公式 ) 设 G 是连通的平面图,n,m,r分别是其顶点数、边数和面数,则n – m + r= 2证:对边数m作数学归纳法。 当m=0 时,因G是连通图,所以G只能是平凡图,结论显然成立。 假设当m=k时,结论成立。下面证明m=k+1 的情况。 若G是树,则G至少有两片树叶。设v是G的一片树叶。令G=G-v,则G仍是连通图,且G的边数m=m-1=k,由归纳假设知,n–m+r= 2,而n=n -1,r=r,于是n–m+r =(n+1)–(m+1)+r=n-m+r= 2 。 若G不是树... 阅读全文
posted @ 2013-02-25 22:52 proverbs 阅读(308) 评论(0) 推荐(0)
摘要:题意:求两圆相交面积题解:余弦定理求出红色角的cos值,然后通过叉积算出红色角的sin值,通过向量旋转即可求出圆的交点~然后就不用说了~懒得写了。。。我都懒死了。。肿么办。。 阅读全文
posted @ 2013-02-25 22:39 proverbs 阅读(265) 评论(0) 推荐(0)
摘要:已知中线长度,求三角形面积。= =我还推导出来各边边长了,结果一直WA,可能是判断面积不合法有点问题。后来发现这个有公式。。。神呐。。。这个是我推导的公式 已知中线x y z 求边长 a b cdouble a = 2.0/3.0*sqrt(2*x*x + 2*z*z - y*y);double b = 2.0/3.0*sqrt(2*y*y + 2*z*z - x*x);double c = 2.0/3.0*sqrt(2*x*x + 2*y*y - z*z);公式推导http://jwilson.coe.uga.edu/emt725/Medians.Triangle/Area.Medians. 阅读全文
posted @ 2013-02-25 22:26 proverbs 阅读(461) 评论(0) 推荐(0)
摘要:题意:已知三高求三角型面积题解:没想到还要用到海伦公式。。。。果断看题解。。。设对应三边为a,b,c面积S=1/2ax=1/2by=1/2cz a=2S/x b=2S/y c=2S/z使用求积公式: S=√[m(m-a)(m-b)(m-c)]其中m=1/2(a+b+c) =S( 1/x + 1/y+1/z)m-a=S(1/y+1/z-1/x)m-b=S(1/x +1/z-1/y)m-c=S(1/x + 1/y-1/z)代入得 S=S2√[( 1/x + 1/y+1/z)(1/y+1/z-1/x)(1/x +1/z-1/y)(1/x + 1/y-1/z)]S=1/√[( 1/x + 1/y+1/ 阅读全文
posted @ 2013-02-25 22:17 proverbs 阅读(273) 评论(0) 推荐(0)
摘要:题意:给一些点,任选任选三个构成三角形,求这个三角形的最大面积。题解:旋转卡壳,水题了。。n^2明显的过不了的,但是数据水,能过。有没有nlogn的算法啊??View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 100010 9 #define EPS 1e-7 10 11 usi 阅读全文
posted @ 2013-02-25 22:10 proverbs 阅读(468) 评论(0) 推荐(0)
摘要:题意:给出一些点,求最小的覆盖这些点的矩形的面积。题解:枚举下边界(是一条边),然后暴力卡壳左右边界(点),再暴力上边界(点),更新答案。View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 2222 9 #define EPS 1e-7 10 #define INF 1e20 1 阅读全文
posted @ 2013-02-25 21:26 proverbs 阅读(386) 评论(0) 推荐(0)
摘要:题意:求两个凸包的最近距离。题解:原来旋转卡壳这么暴力。。我以前一直以为是O(n)的。。。画画图,用叉积判断下旋转角度就行了~View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 22222 9 #define PI 3.14159265358979 10 #define EPS 阅读全文
posted @ 2013-02-25 21:20 proverbs 阅读(589) 评论(5) 推荐(0)
摘要:1,建议x,y,z直角坐标系。设A、B、C少拿点的坐标分别为(a1,b,1,c1),(a2,b2,c2),(a3,b3,c3),四面体O-ABC的六条棱长分别为l,m,n,p,q,r;2,四面体的体积为,由于现在不知道向量怎么打出来,我就插张图片了,将这个式子平方后得到:3,根据矢量数量积的坐标表达式及数量积的定义得又根据余弦定理得4,将上述的式子带入(1),就得到了传说中的欧拉四面体公式在这里说明一点这里面的推导我也是看的,要是是我自己推出来的,我不就欧拉了,哈哈。poj有一道就是关于这个公式的,说实话出这种题很没意思,如果你不知道公式基本上就做不出来,又一次我们学校比赛,有一哥就出了这个题 阅读全文
posted @ 2013-02-25 21:16 proverbs 阅读(379) 评论(0) 推荐(0)
摘要:题意:官兵与盗贼0 0?在二维平面上给出c个官兵、r个盗贼和o个市民,市民如果在3个官兵包围的三角形中状态是safe,如果在不safe的情况下被3个盗贼包围的三角形中状态是robbed,其他情况状态是neither,现在要求输出所有市民状态。题解:只是标注一下这个题。应该求一下官兵和盗贼的凸包,判断市民在凸包内就行了吧? 阅读全文
posted @ 2013-02-25 17:48 proverbs 阅读(143) 评论(0) 推荐(0)
摘要:题意:给定没有排序的凸包(就是说你还要自己再做一遍凸包),求凸多边形的质心(此题质心和重心重合)。题解:做完凸包搞成有序的,三角剖分,三角形的面积与三角形的重心坐标的加权平均数就是质心~又偷懒了,不写代码了~ 阅读全文
posted @ 2013-02-25 00:25 proverbs 阅读(474) 评论(0) 推荐(0)
摘要:题意:给出凸包上的点(无序的),要求从左下角开始按顺序逆时针输出所有凸包上的点~PS:凸包上的连续三个点存在共线。题解:直接套用可以处理共线的凸包模板~做这个题主要是为了验证模板对不对~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <cstdio> 6 #include <cmath> 7 8 #define N 222222 9 10 using nam 阅读全文
posted @ 2013-02-25 00:16 proverbs 阅读(393) 评论(0) 推荐(0)
摘要:题意:一堆圆,R=1,已知底层各个的圆心坐标,求最上面一个圆心的坐标。题解:模拟,尽量少使用反三角函数,不得不用时,尽量用atan2即可。View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 222 9 10 using namespace std;11 12 struct PO1 阅读全文
posted @ 2013-02-24 23:57 proverbs 阅读(199) 评论(0) 推荐(0)
摘要:题意:偶数个点,求两个点使之连成的线把所有点分成个数相等两部分 (不存在三点不共线)。题解:找左下角的点,求其他点相对于此点的极角,然后排序取中间值的点连线即可。嗯,如果要找到所有的线的话,怎么做啊?不知道。。这个题没写,应该好些,偷懒了。。。 阅读全文
posted @ 2013-02-24 23:02 proverbs 阅读(170) 评论(0) 推荐(0)
摘要:题意:就是求点到线段的最短和最长距离。如果最短距离比L大,输出L - MIN 否则输出0。最长距离也是。题解:利用坐标旋转+向量的点积求投影向量从而得到垂足。这样做的精度远远高于解析几何方法,而且不用考虑任何边界情况~ym applepi!!~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <cstdio> 6 #include <cmath> 7 8 #d 阅读全文
posted @ 2013-02-24 22:19 proverbs 阅读(237) 评论(0) 推荐(0)
摘要:题意:求三角形内的整点个数题解:pick定理。[Pick定理] 设以整数点为顶点的多边形的面积为S, 多边形内部的整数点数为N, 多边形边界上的整数点数为L, 则 N + L/2 - 1 = SView Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <algorithm> 6 #include <cmath> 7 8 using namespace std; 9 //[P 阅读全文
posted @ 2013-02-24 20:15 proverbs 阅读(258) 评论(0) 推荐(0)
摘要:题意:给出凸包上的点,其中一个点是(0,0),要求从(0,0)按照逆时针输出所有点。题解:不能有极角排序,因为多边形可能在原点的左侧。View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <cstring> 6 #include <cmath> 7 8 #define N 2222222 9 #define EPS 1e-3 10 //不能直接极角排序,因为图形可能 阅读全文
posted @ 2013-02-24 20:13 proverbs 阅读(262) 评论(2) 推荐(0)
摘要:题意:给出中点求顶点(结合样例的图)。顶点个数是奇数题解:很容易想到高斯消元,然后他为什么强调是奇数?随便找一个奇数个点的多边形一推导,就可以直接推出其中一个待求点的坐标,然后即推算就可以了。偶数时就不行了。。。View Code 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 1010 9 1 阅读全文
posted @ 2013-02-24 20:11 proverbs 阅读(235) 评论(0) 推荐(0)
摘要:题意:一根细杆长为l,能够压弯成为一段长为(1+n*c)*l 的圆弧。给出l, n, c的值,求出杆变形后,中间升高的距离h题解:二分圆心到细杆的距离,然后算出弧长,判断当前二分值的大小是否合适即可View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <algorithm> 6 #include <cmath> 7 8 #define PI 3.141592653589 阅读全文
posted @ 2013-02-24 20:06 proverbs 阅读(215) 评论(0) 推荐(0)
摘要:求多边形周长。角都是直角。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <algorithm> 6 7 #define N 222222 8 9 using namespace std;10 11 struct PO12 {13 int x,y;14 }p[N];15 16 int n;17 18 inline bool cmpx(const PO &a,const 阅读全文
posted @ 2013-02-24 20:03 proverbs 阅读(188) 评论(0) 推荐(0)
摘要:模板题。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <algorithm> 6 7 #define N 1000010 8 9 using namespace std;10 11 struct PO12 {13 int x,y;14 }p[N];15 16 char str[N];17 int n;18 int dx[10]={0,-1,0,1,-1,0,1,-1,0,1 阅读全文
posted @ 2013-02-24 19:03 proverbs 阅读(155) 评论(0) 推荐(0)
摘要:题意:问第二个矩形能不能放进第一个矩形中。题解:暴力旋转第二个矩形,判断左右、上下是否同时小于第一个矩形当然,数学推导也可以,挺简单的相似神马的胡搞就行~View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <algorithm> 6 #include <cmath> 7 8 #define PI 3.141592653589793 9 #define EPS 1e-7 阅读全文
posted @ 2013-02-24 19:02 proverbs 阅读(196) 评论(0) 推荐(0)
摘要:题意:求多边形内部整点的个数、边上整点数、多边形的面积(点数指正点数)题解:[Pick定理] 设以整数点为顶点的多边形的面积为S, 多边形内部的整数点数为N, 多边形边界上的整数点数为L, 则 N + L/2 - 1 = SView Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 22 阅读全文
posted @ 2013-02-24 19:00 proverbs 阅读(235) 评论(0) 推荐(0)
摘要:题意:这里讲的很清楚:http://www.cnblogs.com/xdruid/archive/2012/06/20/2555536.html我们一般的凸包模板都是最简的,而稍作变化就能做到“最繁”的~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <cstdio> 6 #include <cmath> 7 8 #define N 2222 9 10 us 阅读全文
posted @ 2013-02-24 18:54 proverbs 阅读(244) 评论(0) 推荐(0)
摘要:题解:把横坐标离散化,然后把矩形拆成上下两条边,上边标成-1,下边标成1,然后按情况增减面积即可~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <algorithm> 6 7 #define N 222 8 9 using namespace std;10 11 struct LI12 {13 double y,sx,tx;14 int nsx,ntx,fg;15 }li[ 阅读全文
posted @ 2013-02-24 18:51 proverbs 阅读(211) 评论(0) 推荐(0)
摘要:题解:好题,计算几何的好题就是数据好!然我找到了不规范相交的模板~简单多边形用不规范相交搞,然后面积随便选用每条边(边是逆时针方向的)的端点和原点做叉积,就是面积(取绝对值)~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 22222 9 #define EPS 1e-710 阅读全文
posted @ 2013-02-24 00:57 proverbs 阅读(321) 评论(0) 推荐(0)
摘要:题意:分为两种点,求两种点之间的平面最近点对题解:分治法。这个怎么暴力分治都能过。。吐槽:我用了g++ tle+wa,毛线。。。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 222222 9 #define EPS 1e-710 #define INF 1e1511 12 阅读全文
posted @ 2013-02-23 22:32 proverbs 阅读(842) 评论(0) 推荐(0)
摘要:题意:判断点在多边形内题解:随机一个区域外的点,与所有线段求交,如果点数为奇数,则在多边形内,反之,在多边形外需要注意:1、与多边形的顶点相交时,重新随机一个点2、点若在多边形上的话,直接返回奇数(我就在这里tle了。。一直随机,不停了。。。)View Code 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 #include <cmath> 7 #inc 阅读全文
posted @ 2013-02-23 21:35 proverbs 阅读(246) 评论(0) 推荐(0)
摘要:题意:给定半圆的圆心和半径和n个点,求能在半圆内的最多的点数。题解:先把所有的在圆外的点删除,然后求出所有的点关于圆心的极角,然后排序,因为是环形的,极角复制一份加在原来的后面,维护双指针即可~View Code 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 #include <cmath> 7 8 #define PI 3.141592653589 9 阅读全文
posted @ 2013-02-23 21:31 proverbs 阅读(334) 评论(0) 推荐(0)
摘要:题意:求凸包周长题解:注意特判就好,两个点时特判,不知为什么。。View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 120 9 10 using namespace std;11 12 struct PO13 {14 int x,y;15 }p[N];16 17 int stk[ 阅读全文
posted @ 2013-02-23 21:27 proverbs 阅读(214) 评论(0) 推荐(0)
摘要:题意:是否存在规范相交View Code 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 2020 9 #define EPS 1e-410 //规范相交 11 using namespace std;12 13 struct PO14 {15 double x,y;16 };17 18 str 阅读全文
posted @ 2013-02-23 21:25 proverbs 阅读(214) 评论(0) 推荐(0)
摘要:题意:很多线段,求总交点个数(不规范相交),没有三线共点题解:模板,拿几道计算几何水题开头,准备计算几何专题了~这个题的细节其实很多,只是数据太水了!不规范相交模板:View Code 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 110 9 #define EPS 1e-7 10 #defi 阅读全文
posted @ 2013-02-23 21:24 proverbs 阅读(654) 评论(0) 推荐(0)
摘要:题解:每个数第一次出现时随便改成pos-n,之后改成前一次出现的位置。询问的时候查找一个区间中比左端点小的数的个数吐槽:尼玛数组越界了查了一晚上+半个下午。树套树这种东西真难查错!我多插入了很多没有用的节点,所以就慢了点,不过省代码~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <cstdio> 6 7 #define N 6000050 8 #define INF 阅读全文
posted @ 2013-02-23 10:15 proverbs 阅读(1130) 评论(0) 推荐(0)
摘要:题意:给10个字符串,求他们的最长公共子串。题解:只要明确后缀自动机中的每个节点都是其实都对应着逆序的后缀树的一个集合。而nlcs(当前最长匹配长度)和lcs都是对于这个集合而言的,所有,每个点都要更新他的*f指针(逆序后缀树的父亲)所指的节点。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <cstdio> 6 7 #define N 500050 8 9 using 阅读全文
posted @ 2013-02-20 23:33 proverbs 阅读(906) 评论(0) 推荐(0)
摘要:题意:给你一个字符串的环,求从那个位置起字符串的字典序最小。题解:最小表示法。论文链接View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <algorithm> 6 7 #define N 20200 8 //求最小循环同构串起点 9 using namespace std;10 11 char str[N];12 int len;13 14 inline int go()15 阅读全文
posted @ 2013-02-20 20:30 proverbs 阅读(1073) 评论(0) 推荐(0)
摘要:题意:给两个字符串A、B求他们的最长公共字串。题解:后缀自动机啊。你怎么这么恶心这么神啊。。。必然还是我太弱了。。第一次搞,参考了别人的代码。将A建立成后缀自动机,后缀自动机的任意一个节点都表示若干个A的字串,让B在后缀自动机上匹配,不能匹配就沿着f指针转移就是了。在这个过程中维护自动机的一个节点对应的right集合的最大匹配长度。取最大值就是答案。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #inc 阅读全文
posted @ 2013-02-20 19:29 proverbs 阅读(992) 评论(0) 推荐(0)
摘要:题解:带单点更新的区间第k大~函数式线段树秒杀了~与不带修改的函数式线段树唯一不同的在于线段树中的每个结点维护的都是这个位置的结点的树状数组值~然后自己随便怎么胡搞啊神马的就nlog^2n了~View Code 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 7 #define N 110040 8 #define lowbit(x) x&-x 9 10 us 阅读全文
posted @ 2013-02-19 19:09 proverbs 阅读(1030) 评论(0) 推荐(0)
摘要:ORZ主席,这可持久化数据结构真是碉堡了!~PS:这两个题的读入是不同的。。。View Code 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 7 #define N 100010 8 9 using namespace std;10 11 int h[N<<5],ls[N<<5],rs[N<<5],sum[N<<5] 阅读全文
posted @ 2013-02-18 23:10 proverbs 阅读(622) 评论(5) 推荐(0)
摘要:首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。要搞懂AC自动机,先得有模式树(字典树)Trie和KMP模式匹配算法的基础知识。AC自动机算法分为3步:构造一棵Trie树,构造失败指针和模式匹配过程。如果你对KMP算法和了解的话,应该知道KMP算法中的next函数(shift函数或者fail函数)是干什么用的。KMP中我们用两个指针i和j分别表示,A[i-j+ 1..i]与B[1..j]完全相等。也就是说,. 阅读全文
posted @ 2013-02-18 22:02 proverbs 阅读(264) 评论(0) 推荐(0)
摘要:题意:给出一些单词,和一段文本,输出文本中出现的单词个数,出现多次算一次。模板题。View Code 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 7 #define N 1000010 8 9 using namespace std; 10 11 struct TR 12 { 13 int son[26],fail,bot; 14 }tr[N]; 15 16 in 阅读全文
posted @ 2013-02-18 21:33 proverbs 阅读(255) 评论(0) 推荐(0)
摘要:题解:这种数据范围果断矩阵乘法,其实dp什么的也特别显然,就是求转移矩阵特别恶心。用最小表示法(表示现学的压力比较大)表示连通性。能多暴力就多暴力的枚举,反正数据范围小~唯一需要注意的是转移的时候有两种情况是不合法的:1、第(i-k)个点不和第(i-k+1)到i个点连通2、第i个点连到已经在一个连通块中的两个点wa了半天,然后不想做了的时候突然发现ac了。。莫名其妙。。。代码比较丑陋。。View Code 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include < 阅读全文
posted @ 2013-02-17 17:32 proverbs 阅读(1336) 评论(0) 推荐(0)
摘要:题意:给定N (1 ≤ N ≤ 10)个长度不超过6的单词,求由大写字母组成长度为L的包含至少一个给定单词的字符串有多少种,答案 mod 10007,(1 ≤ L ≤ 10^6)。题解:这个题最早是在一个关于trie图的论文中看到了,最近jzh又讲到了这个题,于是就把它做了~大致有两种做法,两种方法都需要矩阵乘法加速1、trie图中的dp2、直接人工减少转移数量具体做法点击这里大致思路就是将不可能构成单词的前缀合成一类,然后胡搞就行了。View Code 1 #include <iostream> 2 #include <cstring> 3 #include < 阅读全文
posted @ 2013-02-17 12:49 proverbs 阅读(535) 评论(0) 推荐(0)
摘要:题意:求平面最远点对。输出最远距离的平方。参考:http://www.cnblogs.com/Booble/archive/2011/04/03/2004865.htmlhttp://www.cppblog.com/staryjy/archive/2009/11/19/101412.htmlView Code 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 #incl 阅读全文
posted @ 2013-02-15 00:07 proverbs 阅读(287) 评论(0) 推荐(0)
摘要:题意:国王想建一个周长最短的城墙,使墙的任意一点到城墙的距离都 大于 rr。求这面墙的周长。题解:凸包 水平序graham扫描法显然答案就是:凸包的周长+半径为rr的圆的周长View Code 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <algorithm> 5 #include <cstring> 6 #include <cmath> 7 8 #define N 1010 9 #define EPS 1e-710 # 阅读全文
posted @ 2013-02-14 20:28 proverbs 阅读(282) 评论(0) 推荐(0)
摘要:这两天在学习计算几何,随便说说自己的学习过程吧。 基本的叉积、点积和凸包等东西就不多说什么了,网上一搜一大堆,切一些题目基本熟悉了就差不多了。 一些基本的题目可以自己搜索,比如这个blog:http://blog.sina.com.cn/s/blog_49c5866c0100f3om.html 接下来,研究了半平面交,思想方法看07年朱泽园的国家队论文,模板代码参考自我校大牛韬哥:http://www.owent.net/2010/10/acm-%E8%AE%A1%E7%AE%97%E5%87%A0%E4%BD%95-%E4%B8%AA%E4%BA%BA%E6%A8%A1%E6%9D%B... 阅读全文
posted @ 2013-02-13 21:32 proverbs 阅读(572) 评论(0) 推荐(0)
摘要:题意:最长的出现k次的重复(可重叠)子串题解:和POJ 1743一样,稍作改变,求最大的话一般都是对后缀数组二分处理。。http://www.cnblogs.com/proverbs/archive/2013/02/05/2893419.html判定条件从位置相差>=m改为是否存在一个块内后缀的个数大于等于m数比较大,快排搞定,好像基数排序也可以。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #i 阅读全文
posted @ 2013-02-05 23:29 proverbs 阅读(195) 评论(0) 推荐(0)
摘要:题意:有N(1 <= N <=20000)个音符的序列来表示一首乐曲,每个音符都是1..88范围内的整数,现在要找一个重复的主题。“主题”是整个音符序列的一个子串,它需要满足如下条件:1.长度至少为5个音符2.在乐曲中重复出现(可能经过转调,“转调”的意思是主题序列中每个音符都被加上或减去了同一个整数值。)3.重复出现的同一主题不能有公共部分。题解:和最长重复子串(可重叠)的思路是一样的。只是我们需要在height数组中二分最小区间。若mid为二分值,删除所有的height[i]<mid的部分,会把height数组分成很多块,显然,我们要求的lcp一定在同一块内(后缀i和后缀 阅读全文
posted @ 2013-02-05 21:26 proverbs 阅读(1415) 评论(0) 推荐(0)
摘要:http://www.bianchengla.com/course/ds/practise/problem?id=1387找了半天终于找到一个可以提交的地方。。。题解:任何一个重复子串,都必然是某两个后缀的最长公共前缀。因为,两个后缀的公共前缀,它出现在这两个后缀中,并且起始位置时不同的,所以这个公共前缀必然重复出现两次以上(可重叠)。而任何两个后缀的最长公共前缀为某一段height值中的最小值,所以最大为height值中的最大值(即某个lcp(sa[i],sa[i+1]))。所以只要算出height数组,然后输出最大值就可以了。View Code 1 #include <iostrea 阅读全文
posted @ 2013-02-05 21:11 proverbs 阅读(377) 评论(0) 推荐(0)
摘要:题意:求单个子串的不重复子串个数题解:一个字符串中的所有子串都必然是它的后缀的前缀。对于每一个sa[i]后缀,它的起始位置sa[i],那么它最多能得到该后缀长度个子串(n-sa[i]个),而其中有height[i]个是与前一个后缀相同的,所以它能产生的实际后缀个数便是n-sa[i]-height[i]。遍历一次所有的后缀,将它产生的后缀数加起来便是答案。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #i 阅读全文
posted @ 2013-02-05 21:04 proverbs 阅读(224) 评论(0) 推荐(0)
摘要:题意:求str1的最长后缀与 str2 的最长前缀。使得 str1+str2 的长度最小,并且字典序最小(str1和str2可以互换)题解:kmp的p数组的含义:p[i]表示以i为结尾的字符串最多和开头匹配的个数。也正是这道题求解的关键、具体做法就是将两个字符串合并处理求一下p数组就好了~ps:合并的时候中间一定要加“分隔符”(比如:#,@之类的~),否则会有惊喜。。。abcbcbca bcbcbc 对拍了半天才发现这个bug。。。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cs 阅读全文
posted @ 2013-02-05 11:41 proverbs 阅读(267) 评论(0) 推荐(0)
摘要:题意:在给定的矩形字符串中找一个最小的矩形字符串,使其通过多次平移复制后,覆盖给定的矩形字符串题解:网上的神马求lcm的算法都是不完善的,具体解释见POJ 2185的discuss。。我的做法是把行看成一个整体,列看成一个整体做kmp。能过discuss里的数据,poj也ac了,不知道有没有漏洞。。感觉应该是对的。View Code 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm 阅读全文
posted @ 2013-02-05 11:31 proverbs 阅读(605) 评论(0) 推荐(0)
摘要:题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1010思路:DP方程不难想:DP[I]=MIN(DP[J]+(SUM[I]-SUM[J]+I-J-1-L)^2) ,J<I其中DP[I]表示处理到第I个玩具时最少的费用。直接来显然TLE,一维方程一般用斜率优化。先化简下方程:令F[I]=SUM[I]+I,C=1+L,则化为DP[I]=MIN(DP[J]+(F[I]-F[J]-C)^2)以下是用这方法的步骤:1.证明较优决策点对后续状态影响的持续性假设在状态I处,有两个决策点J,K(J<K),且决策K比决策J好,即DP[K]+(F 阅读全文
posted @ 2013-02-01 16:03 proverbs 阅读(2371) 评论(0) 推荐(0)