2011年5月16日

【Spoj】GSS系列题解(1、2、3、5、6、7)没找到4

摘要: 【GSS1】:题意:给定长度为N的数串,M个询问插叙[a,b]的的最大连续子段和;解析:线段树维护左端最大、右端最大、全局最大和整体和;然后动态插叙即可。【GSS3】:题意:在GSS1的基础上支持修改第i个数x的修改操作。解析:同上【GSS5】:题意:在GSS1的基础上询问x1,y1,x2,y2,使得a属于[x1,y1],b属于[x2,y2];问最大的[a,b]的字段和。解析:维护GSS1的基础上,分情况讨论1、如果x1<=y1<x2<=y2 即区间分离,则中间必须取,分别在两端区间靠近中间选取最大可以不选2、如果x1<=x2<=y1<=y2①只选取[x2, 阅读全文

posted @ 2011-05-16 18:14 Skywalker_Q 阅读(2526) 评论(0) 推荐(0) 编辑

2011年5月13日

【SDOI2011】染色(树链剖分或者动态树)

摘要: 【题目大意】:给定一棵N颗节点无根树,每个结点有个颜色;以及M个操作:C X Y Z 把X到Y的路径全染成Z颜色Q X Y 询问X到Y的路径有多少个颜色段【题目分析】:1、树链剖分,线段树维护两端颜色及颜色段数;2、动态树,Splay维护两段颜色及颜色段数;在AndyBear的鼓舞下我使用Link—Cut—Tree AC了此题。(膜拜自顶而下的Splay)PS:一个Splay里面的小Bug卡了我老半天……~~~~(>_<)~~~~ 【附代码如下】:Const maxn=100000;Type link=^node; node=record id:longint; next:link 阅读全文

posted @ 2011-05-13 19:48 Skywalker_Q 阅读(1806) 评论(0) 推荐(1) 编辑

2011年3月17日

[HNOI2008]GT考试

摘要: 传送门:http://61.187.179.132:8080/JudgeOnline/showproblem?problem_id=1009【题目分析】:由于不会KMP,所以想到动态规划,设F[i,j]表示A串的前i个字符和B串的前j个字符匹配的种类数。显然有F[i]只由F[i-1]递推而得到。于是想到矩阵乘法(其实是看数据后想到的……,这是题解就那么些吧……)。我们枚举F[i-1]已经匹配了j位,枚举下一位的字符'0'..'9'然后求能拓展出来的F[i]中的状态。然后矩阵乘法就好啦……最后的答案就是Σ(ans[0,i]),时间复杂度O(M^3log(n));【 阅读全文

posted @ 2011-03-17 19:35 Skywalker_Q 阅读(968) 评论(0) 推荐(0) 编辑

[计算几何]平面最近点对

摘要: 【算法分析】:暴力枚举O(N^2)分治解决O(NlogN)传送门:http://blogold.chinaunix.net/u2/63316/showart_2334130.html没有多想……按照算法的原理自己写了一个……效率还是蛮高的!10W的数据秒杀,暴力则跑了2min多种才出解。正确性无从而知,因此拿暴力对拍了一下,还好自测数据都是对的。【Code】:const maxn=100001;type point=record x,y:extended; end;var q,q1,q2:array[0..maxn]of longint; p,pp:array[0..maxn]of point 阅读全文

posted @ 2011-03-17 11:22 Skywalker_Q 阅读(343) 评论(0) 推荐(0) 编辑

2011年3月16日

[Tyvj1464]最远点对

摘要: 【题目分析】:先凸包然后旋转卡壳。Master_Chivu说其实面积可以用叉积计算……然后我听了恍然大悟……因为我一直拿海伦公式算……传送门1:http://cgm.cs.mcgill.ca/~orm/rotcal.frame.html传送门2:http://blog.csdn.net/kaytowin/archive/2010/01/06/5140111.aspx传送门3:http://www.cppblog.com/staryjy/archive/2010/09/25/101412.html【Code】:const eps=1e-12;type point=record x,y:int64 阅读全文

posted @ 2011-03-16 15:57 Skywalker_Q 阅读(383) 评论(0) 推荐(0) 编辑

[Tyvj1462]凸多边形

摘要: 【题目分析】:还是很裸的凸包,Master_Chivu的数据eps要1e-12.【Code】:const eps=1e-12;type point=record x,y:extended; end;var p,q:array[0..200000]of point; n,m,i,k:longint; ans:extended;procedure qsort(l,r:longint); var i,j:longint; t:point; x,y:extended; begin i:=l; j:=r; x:=p[(l+r)>>1].x; y:=p[(l+r)>>1].y; r 阅读全文

posted @ 2011-03-16 14:41 Skywalker_Q 阅读(282) 评论(0) 推荐(0) 编辑

[Tyvj1457]多边形统计

摘要: 【题目分析】:很裸的凸包,数据还很弱……【Code】:type point=record x,y:extended; end;var p,q:array[0..100]of point; n,m,i,k:longint; ans:extended;procedure qsort(l,r:longint); var i,j:longint; t:point; x,y:extended; begin i:=l; j:=r; x:=p[(l+r)>>1].x; y:=p[(l+r)>>1].y; repeat while (p[i].x<x) or (p[i].x=x) 阅读全文

posted @ 2011-03-16 14:21 Skywalker_Q 阅读(242) 评论(0) 推荐(1) 编辑

[NOI2010]能量采集

摘要: 【题目分析】算法一:位于(x,y)的点产生的分值是:Gcd(x,y);问题转换成求Gcd(x,y)。答案为Σ(gcd(x,y)*2-1),枚举x和y即可以得到80分。时间复杂度O(n^2logn)算法二:考虑Gcd(x,y)=D,D<=10^5范围不是很大,那么我们倒过来考虑,我们求解满足Gcd(x,y)=d的(x,y)的个数。有Σ(gcd(x,y)*2-1)=Σ(F[d]*(d*2-1));其中F[d]表示满足Gcd(x,y)=d的(x,y)的个数。考虑以d为公约数的(x,y)的个数g[d],显然有g[d]=[n/d]*[m/d];根据容斥原理有:f[d]=g[d]-Σ(f[d*i]) 阅读全文

posted @ 2011-03-16 13:32 Skywalker_Q 阅读(2611) 评论(0) 推荐(1) 编辑

凸包——扫描法(水平序)

摘要: {ID:tomson12PROG:fcLANG:PASCAL}type point=record x,y:extended; end;const maxn=10001;var p,ch:array[0..maxn]of point; n:longint;procedure init; var i:longint; begin readln(n); for i:=1 to n do readln(p[i].x,p[i].y); end;procedure swap(var a,b:point); var t:point; begin t:=a; a:=b; b:=t; end;procedure 阅读全文

posted @ 2011-03-16 10:20 Skywalker_Q 阅读(545) 评论(0) 推荐(2) 编辑

导航