• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
LyonLys
愿意在角落唱沙哑的歌 再大声也都是给你 请用心听 不要说话 Contact me via E-mail: lyon.lys@gmail.com
博客园    首页    新随笔    联系   管理    订阅  订阅
07 2013 档案
hdu 3068 最长回文 (Manacher算法求最长回文串)

摘要:参考博客:Manacher算法--O(n)回文子串算法 - xuanflyer - 博客频道 - CSDN.NET 从队友那里听来的一个算法,O(N)求得每个中心延伸的回文长度。这个算法好像比较偏门,不过还是稍微掌握一下会比较好。 其实,我的理解就是,记录当前知道找到的最长的回文串的中心以及向右延伸后的最右端点位置。然后其中找最长回文串的操作其实还是暴力的,只不过这样记录两个位置以及覆盖了区间以后,下次我们要找的最长回文串的时候就可以借助这个已知信息减少大量的冗余查找。至于怎么证明这个剪枝可以使算法达到O(N)的复杂度,还是找资料比较好。用hdu 3068这题测试,340ms通过: 1 #.. 阅读全文
posted @ 2013-07-31 04:16 LyonLys 阅读(227) 评论(0) 推荐(0)
Simpson公式的应用(HDU 1724/ HDU 1071)

摘要:辛普森积分法 - 维基百科,自由的百科全书Simpson's rule - Wikipedia, the free encyclopedia 利用这个公式,用二分的方法来计算积分。1071 ( The area ) 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const double EPS = 1e-8;10 double A, B, C, P, Q;11 12 template T sqr(T x) { return x * x;}13 inline ... 阅读全文
posted @ 2013-07-31 00:55 LyonLys 阅读(423) 评论(0) 推荐(0)
2013多校训练赛第三场 总结

摘要:HDU 4621~4631 今天的多校好变态,是IOI冠军出的题,把我们虐的半死了。 简单讲一下今天的情况,今天就只做了两道水题,算是签了个到,然后就卡1011(HDU 4631)一个下午了。其实感觉今天1009的几何是可以做的,因为我之前也做过类似的题,不过最后还是因为没信心做,所以放弃了。目测是可以用PSLG来做1009的,不过当时计算了一下最坏复杂度,觉得会超时,一直没做。 1011啱看上去是kd树,不过当时搞了好久都还是超时。开始的时候我直接上标准kd树,不带平衡功能的,各种超时。然后我就改成预处理整棵树,然后就用标记法来搞点的插入,理论上平均能达到O(log n)每次操作的,因... 阅读全文
posted @ 2013-07-31 00:47 LyonLys 阅读(337) 评论(0) 推荐(0)
hdu 3934 Summer holiday (凸包+旋转卡壳)

摘要:Problem - 3934 晚上为了演示给师弟看水平序的凸包是多么的好写,于是就随便找了一题凸包,25min居然1y掉了。。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const int N = 1111111;10 const double EPS = 1e-8;11 inline int sgn(double x) { return (x > EPS) - (x 1 && sgn(cross(pt[i] - ch[m - 2], c 阅读全文
posted @ 2013-07-30 03:04 LyonLys 阅读(288) 评论(0) 推荐(0)
一些关于中国剩余定理的数论题(POJ 2891/HDU 3579/HDU 1573/HDU 1930)

摘要:2891 -- Strange Way to Express Integers 1 import java.math.BigInteger; 2 import java.util.Scanner; 3 4 public class Main { 5 static final BigInteger ZERO = new BigInteger("0"); 6 static final BigInteger ONE = new BigInteger("1"); 7 static BigInteger gcd(BigInteger a, BigInteger b 阅读全文
posted @ 2013-07-30 03:01 LyonLys 阅读(411) 评论(0) 推荐(0)
中国剩余定理(SCAUOJ 1077)

摘要:1077韩信点兵时间限制:500MS 内存限制:65536K提交次数:1103 通过次数:99题型: 编程题语言: 无限制Description相传汉高祖刘邦问大将军韩信统御兵士多少,韩信答说,每3人一列余1人、5人一列余2人、7人一列余4人、13人一列余6人、17人一列余2人、19人一列余10人、23人一列余1人、29人一列余11人。刘邦茫然而不知其数。你呢? 你是一位优秀的程序员,请你帮刘邦解决这一问题。输入格式要求由键盘输入A,B,C,D,E,F,G,H,a,b,c,d,e,f,g,h十六个数,分别代表每A人一列余a、每B人一列余b、每C人一列余c、每D人一列余D、每E人一列余e、每F人 阅读全文
posted @ 2013-07-29 12:47 LyonLys 阅读(614) 评论(0) 推荐(0)
uva 11426 GCD - Extreme (II)

摘要:UVa Online Judge 题意,求gcd(1,2)+gcd(1,3)+gcd(2,3)+...+gcd(n-1,n)的和。 这题的做法是,将gcd(a,b)=p(a 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 const int N = 2222222; 9 typedef long long LL;10 int phi[N];11 LL sum[N];12 13 void PRE() {14 phi[1] = 1;15 for (int i = 2; i > n && n) ... 阅读全文
posted @ 2013-07-29 03:28 LyonLys 阅读(439) 评论(0) 推荐(0)
LA 4119 Always an integer (数论+模拟)

摘要:ACM-ICPC Live Archive 一道模拟题,题意是问一个给出的多项式代入正整数得到的值是否总是整数。 这题是一道数论题,其实对于这个式子,我们只要计算1~最高次项是否都满足即可。 做的时候,模拟出了点小错误,一直wa。幸亏最后还是能找到错误的位置。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const int N = 11111; 10 typedef long long LL; 11 char str[N];... 阅读全文
posted @ 2013-07-29 00:50 LyonLys 阅读(322) 评论(0) 推荐(0)
uva 12003 Array Transformer (线段树套平衡树)

摘要:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3154 题意是,要求求出区间中小于某个值的数有多少个,然后利用这个个数来更新某个点的值。 直接树套树解决问题,不过这题时间卡的比较紧。留心观察可以发现,询问的数目其实是比较小的,可是总的个数多大30W。如果是O(n*logn*logn)的复杂度建树就会超时,估计这里就是卡这一个了。其余的都不难,不过就是开始的时候没有看出可以卡时间卡这么紧,没有建树的经验,所以直接暴力插点,一直TL 阅读全文
posted @ 2013-07-29 00:44 LyonLys 阅读(389) 评论(0) 推荐(0)
uva 10253 Series-Parallel Networks (整数划分+多重集)

摘要:UVa Online Judge 题意是计算给定数量的边通过串联并联两种方式,能组成多少种不同的网络。将它转化为一个树形结构,也就是求有多少不同构的树。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 typedef long long LL; 9 const int N = 33;10 LL ans[N];11 int s[N], top;12 13 LL com(LL n, LL m) {14 LL ret = 1;15 for (int i = 0; ... 阅读全文
posted @ 2013-07-28 02:18 LyonLys 阅读(277) 评论(0) 推荐(0)
LA 4123 Glenbow Museum

摘要:ACM-ICPC Live Archive 还是递推的题。要观察出R比O多4个这个事实,同时不能有两个以上的连续的O,然后就是dp,dp[i][j][k]表示目前为止有i个R,连续的R有j个,第一个字母为O的时候是1,R的时候是0,最后一个字母总是R。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 typedef long long LL; 9 const int N = 1111;10 LL dp[N][5][2]; // N - num of 'R', contin 阅读全文
posted @ 2013-07-27 23:56 LyonLys 阅读(256) 评论(0) 推荐(0)
uva 11361 Investigating Div-Sum Property

摘要:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2346 不知道算什么题,好像是数位dp,不过在切递推的题,所以这题应该算是递推。 首先要预处理出dp[i][j][k][p],表示一共有i位数字,其中数字和mod p余j而且这个数mod p余k的个数。然后就是枚举每一位,分段处理出结果。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std 阅读全文
posted @ 2013-07-27 21:34 LyonLys 阅读(190) 评论(0) 推荐(0)
2013多校训练赛第二场 总结

摘要:昨天打多校的第二场,状态还算可以,不会像第一场那样浑浑噩噩的敲过去了。可是这次的排名却比第一次要低了。 其实昨天比赛很不顺,主要是机房的机器不够,导致我们开局一小时后从三台机减少到只剩一台机。 开始的时候,队友ly像开挂一样,瞬间就看懂了1002,20min敲出了代码,抢了个fb。然后就是1009,这题其实很简单,很容易可以看出就是一个二分匹配的题。题目大意是,给出一些1*2的方块,有横向和纵向放置两种,其中只可能出现横向跟纵向重叠的情况,不会横向和横向纵向和纵向重叠。要求求出,最多可以剩下多少方块,是的它们之间两两不重叠。这样子,就可以对有重叠部分的横向和纵向方块添加一条边。然后求出... 阅读全文
posted @ 2013-07-26 11:41 LyonLys 阅读(321) 评论(0) 推荐(0)
uva 11174 Stand in a Line (排列组合)

摘要:UVa Online Judge 训练指南的题目。 题意是,给出n个人,以及一些关系,要求对这n个人构成一个排列,其中父亲必须排在儿子的前面。问一共有多少种方式。 做法是,对于每一个父节点,将它的儿子结点构成的子树看成无序状态,这样子对当前父节点整棵树计算一个排列数。如果把所有的这样的式子写出来,可以发现分子分母是可以相消的。假设点的总数是S,儿子的点的数目分别是A,B,C...,这样的话,对于这个结点,可以求得F(S)=F(A)+F(B)+F(C)+...。最后的结果是所有子树的F(S)*F(A)*F(B)*F(C)*...。最后消去以后就只剩下F(S)/(c(A)*c(B)*c(C)... 阅读全文
posted @ 2013-07-26 10:32 LyonLys 阅读(388) 评论(0) 推荐(0)
uva 11375 Matches (递推)

摘要:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2370 一道递推的题。 这道题的递推方程很容易可以想到,是枚举加上哪一个数字,把方法数累加起来。这道题主要是要注意前缀0的问题,可以通过枚举第一个数字不是一的所有情况,然后最后询问大于6的时候就加一。代码如下(JAVA): 1 import java.math.BigInteger; 2 import java.util.Scanner; 3 4 public class Main 阅读全文
posted @ 2013-07-25 21:00 LyonLys 阅读(360) 评论(0) 推荐(0)
uva 11806 Cheerleaders (容斥)

摘要:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2906 容斥原理,从反面去想。统计边界上都没有石子的情况。这时候就要用到容斥原理了。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 typedef long long LL; 9 const LL MOD = 1000007;10 const int N = 25;11 c 阅读全文
posted @ 2013-07-25 19:49 LyonLys 阅读(148) 评论(0) 推荐(0)
hdu 3329 The Flood (Flood Fill + MFSet)

摘要:Problem - 3329 用pfs,将淹没时间调整回来,然后用并查集,时间倒序插入点。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const int N = 111; 10 const int dx[4] = { -1, 0, 1, 0}; 11 const int dy[4] = { 0, -1, 0, 1}; 12 bool vis[N][N]; 13 int mat[N][N]; 14 15 typedef pai... 阅读全文
posted @ 2013-07-24 23:29 LyonLys 阅读(214) 评论(0) 推荐(0)
LightOJ 1269 Consecutive Sum (Trie树)

摘要:Jan's LightOJ :: Problem 1269 - Consecutive Sum 题意是,求给定序列的中,子序列最大最小的抑或和。 做法就是用一棵Trie树,记录数的每一位是0还是1。查询的时候,如果求最大值,就尽量让高位是1,相反就尽量让高位是0。代码如下,1y: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 const int N = 55555; 9 const int M = 32;10 11 struct Node {12 int c[2];13 ... 阅读全文
posted @ 2013-07-24 14:44 LyonLys 阅读(447) 评论(0) 推荐(0)
2013多校训练赛第一场 总结

摘要:http://acm.hdu.edu.cn/listproblem.php?vol=37hdu 4600~4610 2013HDU多校训练第一场 这次的组队训练好没状态,居然敲几题水题都搞了2个多种。最后我们队做出了4题,排在41名。不太想写东西,直接上题解了:Problem - 4604 这题做法其实还没想到,不过写出了一个能过目前所有数据的代码(比赛的时候数据更水,几乎算不出正确答案的代码都能过): 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 con... 阅读全文
posted @ 2013-07-23 23:48 LyonLys 阅读(276) 评论(0) 推荐(0)
hdu 3938 Portal (prim+离线)

摘要:Problem - 3938 题意是要求出给定权值下,满足要求的点对的数目。所谓的要求是,给出两点,之间会有很多路径,这个点对的最小距离是众多路径中,最短的一条路径的长度,路径长度是路径上最长边的长度。于是,认真观察可以发现,两个点能连在一起的前提条件是,之间的的边都小于给定值。于是,用边来构建最小生成树就可以得到这样的一些满足要求的点对了。如果是两个集合因为一条边的加入连在一起了,那么总的点对数目就增加Na*Nb。把答案存下来,然后查询的时候二分找出满足的那一个即可。代码如下:#include #include #include #include #include using namesp. 阅读全文
posted @ 2013-07-23 11:41 LyonLys 阅读(458) 评论(0) 推荐(0)
hdu 1811 Rank of Tetris (并查集+拓扑排序)

摘要:Problem - 1811 感觉这题的并查集以及拓扑排序并不难,但是做题的时候必须理解到矛盾(CONFLICT)与不确定(UNCERTAIN)直接的优先关系。 做这题的时候,构图什么的很简单,就是没有将矛盾摆在最高优先,一旦搜到不确定的情况就立即跳转,这是不对的。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const int N = 11111; 10 struct MFS { 11 int fa[N]; 12 ... 阅读全文
posted @ 2013-07-23 02:24 LyonLys 阅读(226) 评论(0) 推荐(0)
uva 10566 Crossed Ladders (二分)

摘要: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 阅读全文
posted @ 2013-07-22 20:05 LyonLys 阅读(232) 评论(0) 推荐(0)
hdu 1856 More is better (并查集)

摘要: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... 阅读全文
posted @ 2013-07-22 12:37 LyonLys 阅读(187) 评论(0) 推荐(0)
hdu 3234 Exclusive-OR (并查集)

摘要: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 ... 阅读全文
posted @ 2013-07-22 11:25 LyonLys 阅读(269) 评论(0) 推荐(0)
poj 3169 Layout (差分约束)

摘要: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. 阅读全文
posted @ 2013-07-22 04:04 LyonLys 阅读(236) 评论(0) 推荐(0)
poj 1716 Integer Intervals(差分约束)

摘要: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. 阅读全文
posted @ 2013-07-22 02:45 LyonLys 阅读(159) 评论(0) 推荐(0)
poj 3159 Candies (dij + heap)

摘要:3159 -- Candies 明明找的是差分约束,然后就找到这题不知道为什么是求1~n的最短路的题了。然后自己无聊写了一个heap,518ms通过。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 const int N = 33333; 9 const int M = 155555; 10 struct Edge { 11 int t, nx, c; 12 } edge[M]; 13 int eh[N], ec; 14 15 void ini... 阅读全文
posted @ 2013-07-21 22:16 LyonLys 阅读(243) 评论(0) 推荐(0)
2013暑假集训 第三场个人赛总结

摘要:7月20日,第三场个人赛。这场个人赛应该是最低谷了吧,整场比赛2y了一题以后就再也没出题了。IDOriginTitle0/11Problem ASPOJ SEGMENTSA1/94Problem BSPOJ STRDISTB26/124Problem CSGU 296C2/17Problem DCodeForces 3DDProblem ESPOJ MUSICE1/35Problem FCodeForces 185CF 这场比赛没什么好描述的。C题开始的时候贪心的思想错了,以为直接删除最小的数字就行了,结果搞了很久才搞到一组(98919 1)这样的数据,然后才知道是不停地删掉上升序列。然... 阅读全文
posted @ 2013-07-21 19:07 LyonLys 阅读(216) 评论(0) 推荐(0)
poj 1364 King (差分约束)

摘要:1364 -- King 继续差分约束的题。如果是“lt”就构造(s+n+1)->(s)=-w+1的边,否则构造(s)->(s+n+1)=w+1的边。因为没有取等号,所以w要加减一。 因为没有其他限制,所以不用别的附加边。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const int N = 111;10 const int M = N * N;11 const int INF = 0x55555555;12 struct Edge {13 ... 阅读全文
posted @ 2013-07-20 12:08 LyonLys 阅读(127) 评论(0) 推荐(0)
hdu 1384 Intervals (差分约束)

摘要:Problem - 1384 好歹用了一天,也算是看懂了差分约束的原理,做出第一条查分约束了。 题意是告诉你一些区间中最少有多少元素,最少需要多少个元素才能满足所有要求。 构图的方法是,(a)->(b+1)=c。还有就是所有的相邻的点都要连上(i+1)->(i)=0,(i)->(i+1)=-1。因为我对点离散了,所以就变成(rx[i])->(rx[i+1])=rx[i]-rx[i+1]。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 con 阅读全文
posted @ 2013-07-20 01:37 LyonLys 阅读(280) 评论(0) 推荐(0)
hdu 2312 Cliff Climbing (pfs)

摘要:Problem - 2312 一条很暴力,有点恶心的搜索。题意其实很简单,主要是pfs的时候拓展结点会有种麻烦的感觉。注意的是,这里的n和m跟平常见到的有所不同,交换过来了。我的代码就是在因为这个长宽的问题wa了一次。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 typedef pair PII;11 typedef pair PPP;12 typedef pair PPPI;13 14 #define FI first1... 阅读全文
posted @ 2013-07-19 18:20 LyonLys 阅读(289) 评论(0) 推荐(0)
2013暑假集训 第二场个人赛总结

摘要:在开头问自己一句,题解还能坚持多少场呢?不管那样,能坚持就继续坚持下去,就算我不喜欢打字。 好了,然后下面要正文了。7月18号,第二场个人赛。今天的比赛是另外一位10的大神yys出的,总体评价一下今天的题,虽然题目难度不算打,但是思维要求还是蛮高的,虽然有一道最小费用流的接近于模板题的题。然后,个人感觉,最近英语阅读水平降到不是路了,居然有一道大水题题意看了一场比赛都没看懂。_(:з」∠)_下面是题目来源,因为UESTC在比赛的过程中挂掉了,所以临时将DE两题改成SGU的两题了:IDOriginTitle30/100Problem ACodeForces 48DA2/20Problem ... 阅读全文
posted @ 2013-07-19 05:16 LyonLys 阅读(293) 评论(0) 推荐(0)
poj 1092 Farmland (Geometry)

摘要:1092 -- Farmland 怎么最近做几何题都这么蛋疼,提交C++过不了交G++就过了。据我估计,原因是用了atan2这个函数,或者是其他一些函数造成了精度的影响。不管怎样,这题最后还是过了~ 解释一下题意,题目的意思是,给出一些边和点,要求找到简单多边形,也就是没有重复的点的多边形,而且多边形里面不能有其他的点。 于是,还是之前的做法,对于每一条边作为起始边,从这条边出发,找最往左的一个点,然后移动到那里。不停这样的模拟,直到走回起始位置,就计算多边形是由多少条边构成的。如果满足就对计数器加一,最后输出结果即可。最早通过的版本的写法是可以不用检查有没有点在多边形里面的: 1 #... 阅读全文
posted @ 2013-07-18 04:23 LyonLys 阅读(507) 评论(0) 推荐(0)
hdu 2473 Junk-Mail Filter (暴力并查集)

摘要:Problem - 2473 为什么标题写的是暴力并查集?因为我的解法跟网上的有所不同,方法暴力很多。 先解释题意,这是一个模拟处理垃圾邮件的问题。垃圾邮件要根据它们的性质进行分类。对于10w个邮件,操作M是这两个邮件具有相同的属性,属性是可以传递的,也就是说,1和2有相同属性,2和3有相同属性,那么1和3就有相同属性。操作S是将这个邮件分离出来,不和任何的邮件有相同属性。最后问不同属性的邮件有多少种。这么看来,这是一个并查集。网上的正解,是把那个删除的结点当成虚拟结点,继续放在那里。然后重新开一个新的结点来存放分离出来的结点。 而我的做法则是直接构造并查集树,我的树是会记录子结点有那些... 阅读全文
posted @ 2013-07-18 00:50 LyonLys 阅读(248) 评论(0) 推荐(0)
2013暑假集训 第一场个人赛总结

摘要:暑假的第一场个人赛今天开始了,题目是10的Troy神出的,总体感觉层次性不强。一共6题,有4题简单题,然后两题中等偏难的题吧,自己做不出那两题,不过也不像是难题。 题目来源如下表格。IDOriginTitle6/71Problem ASGU 174A0/3Problem BUVALive 6039B32/141Problem CSGU 180C5/54Problem DURAL 1468D4/24Problem EUVALive 5066E0/1Problem FURAL 1529F 开场的时候,机房的机不够,我就被迫回去宿舍开始,于是开始的时间就比别人晚了大概25分钟左右。 那时已... 阅读全文
posted @ 2013-07-16 21:52 LyonLys 阅读(344) 评论(0) 推荐(0)
poj 3743 LL’s cake (PSLG,Accepted)

摘要:3743 -- LL’s cake 搞了好久都过不了,看了下题解是用PSLG来做的。POJ 2164 && LA 3218 Find the Border (Geometry, PSLG 平面直线图) - LyonLys - 博客园这篇里面写过一下,就是把点都提取出来,然后模拟沿着边界移动,找到多边形并计算面积。 而我的做法是直接模拟多边形切割,各种超时爆内存。先留着,看以后能不能用这个来过。没过的代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8... 阅读全文
posted @ 2013-07-15 22:48 LyonLys 阅读(8395) 评论(0) 推荐(0)
hdu 1434 幸福列车 (Leftist Tree)

摘要:Problem - 1434 网上题解是普通的堆合并,都是用优先队列直接做的。可是正解的堆合并应该是用左偏堆或者斐波那契堆的吧,不然O(X * N ^ 2)的复杂度应该是过不了的。斐波那契堆的实现相对麻烦,所以我用了左偏堆完成这题,最坏复杂度O(X * N log N)。 这题就是一个模拟,没什么可以解释的。1y~代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 template10 struct Node {11 int d;12 ... 阅读全文
posted @ 2013-07-15 05:55 LyonLys 阅读(341) 评论(0) 推荐(0)
poj 2442 Sequence (Priority Queue)

摘要:2442 -- Sequence 真郁闷,明明方法是对的,为什么我的代码老是那么的慢。_(:з」∠)_ 这题要想考虑两列的情况,然后逐列拓展。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const int N = 2222;10 const int Q = N * N;11 template12 struct PriQ {13 T q[Q];14 int sz;15 void clear() { sz = 0;}16 ... 阅读全文
posted @ 2013-07-15 04:32 LyonLys 阅读(193) 评论(0) 推荐(0)
二叉堆&&左偏堆 代码实现

摘要:今天打算学习左偏堆,可是想起来自己二叉堆都没有看懂,于是就跑去回顾二叉堆了。发现以前看不懂的二叉堆,今天看起来特简单,随手就写好了一个堆了。 简单的说一下我对二叉堆操作的理解。我不从底层函数说上去,相反,我打算从实现来解释底层函数的构造,以大堆为例。 其实操作都很简单,对于push函数,因为堆是一棵严格的完全二叉树,所以我们直接在队列的尾端插入新增加的元素。然后就将这个元素不停的跟他的父节点进行比较,如果这个元素更大就跟父节点交换,否则就退出上推更新这个操作。对于pop的操作也是差不多的,我们可以将出堆的元素的位置用最底的元素替换。然后就是将这个替换上堆顶的元素下推。对于当前这个元素的... 阅读全文
posted @ 2013-07-15 03:31 LyonLys 阅读(748) 评论(0) 推荐(0)
hdu 4002 Find the maximum

摘要:Problem - 4002 不知道思路了。。居然是大一上学期的时候做的题,今天找回来才发现是区域赛的题。为什么那时候就写这么恶心的代码?_(:з」∠)_ 好像很厉害的样子。。 写一下那时候我的记录下来的思路,不知道对不对的了。。囧:1.筛素数70个左右2.求素数的乘积,要用到高精度乘法3.把70个积都存下来4.读入字符串,然后比较大数,超过已存素数就输出 大概就这样子。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 int prime[101]; 7 char *product[101]; 8 9 voi... 阅读全文
posted @ 2013-07-15 02:39 LyonLys 阅读(208) 评论(0) 推荐(0)
hdu 2112 HDU Today (最短路)

摘要:Problem - 2112 就一个普通的最短路,除了用floyd会超时外,要注意起点终点地名相同是一个trick。代码如下:#include #include #include #include #include using namespace std;map id;const int INF = 11111111;const int N = 222;int mat[N][N];char s[44], t[44];int q[N mat[s][cur] + mat[cur][i]) { mat[s][i] = mat[s][cur] + mat[cur][i... 阅读全文
posted @ 2013-07-14 19:32 LyonLys 阅读(185) 评论(0) 推荐(0)
hdu 1789 Doing Homework again (Greedy)

摘要:Problem - 1789 继续贪心。经典贪心算法,如果数据比较大就要用线段树来维护了。 思路很简单,只要按照代价由大到小排序,然后靠后插入即可。RE了一次,是没想到deadline可以很大。如果deadline比任务总量要大,显然这个任务是能做的,直接加上去。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 typedef pair PII;10 typedef vector VPII;11 12 VPII rec;13 vector vis;... 阅读全文
posted @ 2013-07-14 01:04 LyonLys 阅读(137) 评论(0) 推荐(0)
hdu 1050 Moving Tables (Greedy)

摘要:Problem - 1050 过两天要给12的讲贪心,于是就做一下水贪心练习练习。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 typedef pair PII;11 typedef vector VPII;12 13 multiset cor;14 multiset::iterator msi;15 VPII rec;16 VPII::iterator vi;17 18 int main() {19 int n,... 阅读全文
posted @ 2013-07-14 00:37 LyonLys 阅读(203) 评论(0) 推荐(0)
hdu 2225 The nearest fraction (数学题)

摘要:Problem - 2225 一道简单数学题,要求求出一个分母不超过m的最接近sqrt(n)的分数。 做法就是暴力枚举,注意中间过程不能用浮点数比较,误差要求比较高。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 typedef long long LL;10 template T sqr(T x) { return x * x;}11 template T gcd(T a, T b) { return b ? gcd(b, a % b) : a... 阅读全文
posted @ 2013-07-13 19:43 LyonLys 阅读(206) 评论(0) 推荐(0)
zoj 3859 DoIt is Being Flooded (MFSet && Flood Fill)

摘要:ZOJ :: Problems :: Show Problem 这题开始的时候想不到怎么调整每个grid的实际淹没时间,于是只好找了下watashi的题解,发现这个操作还是挺简单的。ZOJ3354 | ゆっくりでいいさdebug这题累死了。。解释还是移步看watashi大神的吧。。 除了开始的时候这个调整,后面并查集的部分是相当容易想到的,其实就是用并查集了统计每一个块的个数。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace s... 阅读全文
posted @ 2013-07-13 16:49 LyonLys 阅读(586) 评论(0) 推荐(0)
poj 1066 Treasure Hunt (Geometry + BFS)

摘要:1066 -- Treasure Hunt 题意是,在一个金字塔中有一个宝藏,金字塔里面有很多的墙,要穿过墙壁才能进入到宝藏所在的地方。可是因为某些原因,只能在两个墙壁的交点连线的中点穿过墙壁。问最少要穿过多少墙壁才能得到宝藏。 比较容易想到的一个办法就是直接用中点构图,然后判断点与点之间是否能够直接相连,最后bfs得到最小距离。 我的代码也是这样做,结果相当险的900+ms通过。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9... 阅读全文
posted @ 2013-07-13 02:55 LyonLys 阅读(298) 评论(0) 推荐(0)
poj 2689 Prime Distance (素数二次筛法)

摘要:2689 -- Prime Distance 没怎么研究过数论,还是今天才知道有素数二次筛法这样的东西。 题意是,要求求出给定区间内相邻两个素数的最大和最小差。 二次筛法的意思其实就是先将1~sqrt(b)内的素数先筛出来,然后再对[a,b]区间用那些筛出来的素数再次线性筛。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 const int N = 66666; 9 int prm[N >> 3], pn;10 bool np[N];11 12 void getbas... 阅读全文
posted @ 2013-07-12 14:16 LyonLys 阅读(421) 评论(0) 推荐(0)
hdu 3635 Dragon Balls (MFSet)

摘要:Problem - 3635 切切水题,并查集。 记录当前根树的结点个数,记录每个结点相对根结点的转移次数。1y~代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 const int N = 11111; 8 struct MFS { 9 int fa[N], tm[N], cnt[N];10 void init() { for (int i = 0; i < N; i++) fa[i] = i, tm[i] = 0, cnt[i] = 1;}11 in... 阅读全文
posted @ 2013-07-12 01:44 LyonLys 阅读(191) 评论(0) 推荐(0)
hdu 4419 Colourful Rectangle (离散化扫描线线段树)

摘要:Problem - 4419 题意不难,红绿蓝三种颜色覆盖在平面上,不同颜色的区域相交会产生新的颜色,求每一种颜色的面积大小。 比较明显,这题要从矩形面积并的方向出发。如果做过矩形面积并的题,用线段树做的,这题就只差一个把每个区域计算单独出来的思路了。 这里不详细介绍扫描线,只是说一下针对这题的做法。其实网上有好多版本,都是直接单独计算答案的。然而,我稍微绕了个小弯,我觉得我这种处理方法也是比较容易想到以及实现的。如果我们用7棵线段树计算R、G、B、R||G、R||B、B||G、R||G||B这7种情况,我们并不能直接得到所要的答案。不过可以知道,ans(G)=S(R||G||B)-S(... 阅读全文
posted @ 2013-07-12 00:20 LyonLys 阅读(286) 评论(0) 推荐(0)
hdu 3982 Harry Potter and J.K.Rowling (半平面交 + 圆与多边形交)

摘要:Problem - 3982 题意就是给出一个圆心在原点半径为R的圆形蛋糕,上面有一个cherry,对蛋糕切若干刀,最后要求求出有cherry的那块的面积占整个蛋糕的多少。 做法显而易见,就是一个半平面交,将有向直线的方向根据cherry的位置确定好,然后就进行半平面交,得到一个多边形。 再将多边形用之前几个代码的圆与多边形交,求出区域的大小,再除以整个蛋糕的面积即可。 注意,这样做的时候,精度是要用1e-6或者是1e-4,太高了反而过不了数据。——written by Lyon 阅读全文
posted @ 2013-07-11 03:18 LyonLys 阅读(271) 评论(0) 推荐(0)
poj 3675 Telescope (圆与多边形面积交)

摘要:3675 -- Telescope 再来一题。这题的代码还是继续完全不看模板重写的。 题意不解释了,反正就是一个单纯的圆与多边形的交面积。 这题的精度有点搞笑。我用比较高的精度来统计面积,居然wa了。把精度降到1e-6瞬间过了。——written by Lyon 阅读全文
posted @ 2013-07-10 18:02 LyonLys 阅读(292) 评论(0) 推荐(0)
poj 1436 && zoj 1391 Horizontally Visible Segments (Segment Tree)

摘要:ZOJ :: Problems :: Show Problem1436 -- Horizontally Visible Segments 用线段树记录表面能被看见的线段的编号,然后覆盖的时候同时把能看到的线段记录下来。这里要用到拆点,在两个整点之间插入一个点。 最后O(n^2)统计三角形的个数,因为每条线段可以看见的另外的线段的条数不多,所以可以直接枚举两条边。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const int N = 16666... 阅读全文
posted @ 2013-07-10 16:18 LyonLys 阅读(204) 评论(0) 推荐(0)
hdu 2892 area (圆与多边形交面积)

摘要:Problem - 2892 这道题的做法是以圆心为原点,对多边形进行三角剖分。题目描述中,多边形的可能是顺时针或者是逆时针给出,不过在我的做法里,是用有向面积来计算的,和常见的多边形面积的求法类似,不过就是多了三角形与圆交的情况。三角形于圆交的情况共三种(因为这里的三角形其中一个点是圆心,另外两个点是多边形上相邻的两个顶点,所以我们只考虑多边形的边与圆相交的情况):与多边形的边(一条线段)没有交点,一个交点,两个交点。 敲这份代码最大的问题是敲的过程中有很多小错误,导致最后花了将近小时来debug。——written by Lyon 阅读全文
posted @ 2013-07-10 05:06 LyonLys 阅读(341) 评论(0) 推荐(0)
poj 1039 Pipe (Geometry)

摘要:1039 -- Pipe 理解错题意一个晚上。_(:з」∠)_ 题意很容易看懂,就是要求你求出从外面射进一根管子的射线,最远可以射到哪里。 正解的做法是,选择上点和下点各一个,然后对于每个折点位置竖直位置判断经过的点是否在管中。如果是,就继续找,如果不在管中,这时射线必然已经穿过管出去了,这时就要找射线和管上下壁的交点。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 const double EPS = 1e-6;11 ... 阅读全文
posted @ 2013-07-10 02:01 LyonLys 阅读(205) 评论(0) 推荐(0)
poj 2992 Divisors

摘要:2992 -- Divisors 筛素数,分解质因数。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 typedef long long LL; 9 const int N = 444;10 int prm[N >> 2], pn, pid[N], pv[N];11 bool np[N];12 13 void getPrm() {14 np[0] = np[1] = true;15 prm[pn = 0] = 2, pid[2] = pn++;16 ... 阅读全文
posted @ 2013-07-09 13:45 LyonLys 阅读(163) 评论(0) 推荐(0)
poj 3862 && LA 4589 Asteroids (三维凸包+多面体重心)

摘要:3862 -- AsteroidsACM-ICPC Live Archive 用给出的点求出凸包的重心,并求出重心到多边形表面的最近距离。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const double EPS = 1e-10; 10 const int N = 333; 11 inline int sgn(double x) { return (x > EPS) - (x = 0; j--) { 95 ... 阅读全文
posted @ 2013-07-08 16:16 LyonLys 阅读(386) 评论(0) 推荐(0)
hdu 3662 3D Convex Hull

摘要:Problem - 3662 题意很简单,构造三维凸包,求凸包有多少个面。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const double EPS = 1e-10; 10 const int N = 333; 11 inline int sgn(double x) { return (x > EPS) - (x = 0; j--) { 95 if (outside(i, j)) { 96 ... 阅读全文
posted @ 2013-07-08 15:41 LyonLys 阅读(225) 评论(0) 推荐(0)
poj 3528 Ultimate Weapon (3D Convex Hull)

摘要:3528 -- Ultimate Weapon 一道三维凸包的题目,题目要求求出三维凸包的表面积。看懂了网上的三维凸包的代码以后,自己写的代码,跟网上的模板有所不同。调了一个晚上,结果发现错的只是数组开太小。_(:з」∠)_代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const double EPS = 1e-10; 10 const int N = 555; 11 inline int sgn(double x) { ret... 阅读全文
posted @ 2013-07-08 14:45 LyonLys 阅读(222) 评论(0) 推荐(0)
hdu 4179 Difficult Routes (SP)

摘要:Problem - 4179 坑了我一个晚上的SP题。 题意是,给出若干空间中的点,给出其中某些点之间是有直线线段路径相连的。要求求出一条从s开始到t结束的路径,它的难度是d。难度的计算是空间线段两点的高度差乘以100再除以投影到xOy平面上线段的长度。难度是d的路径的定义是路径中,经过的线段的难度最大是d。 其实比较容易可以想到的是枚举难度最大的线段的,同时构建难度小于等于给定值的正图和反图。正图是用来求出起点s到各个顶点的最短距离,因为是有向图,所以求出t到各个顶点的最短距离是要用到反图来求的。然后就将两条路径拼接到被枚举的线段上。 中间错的好多的是,写之前还想到要用反图求t到各个... 阅读全文
posted @ 2013-07-07 02:06 LyonLys 阅读(447) 评论(0) 推荐(0)
poj 1689 && zoj 1422 3002 Rubbery (Geometry + BFS)

摘要:ZOJ :: Problems :: Show Problem1689 -- 3002 Rubbery 这题是从校内oj的几何分类里面找到的。 题意不难,就是给出一个区域(L,W),这个区域里面有很多多边形,多边形的边都是和x/y轴平行的。一个射线源在(L,0),射线是走平行于x/y轴的路径的。它们可以贴着多边形的边经过,不过不能穿过区域中的多边形,甚至不能从有至少一个交点的两条边之间穿过(区域边沿也一样)。射线只能向着x减少或者y增大的方向行走,问有多大的区域是没有射线经过的,不包括多边形区域。 做法就是,先将区域离散化成若干矩形,然后将每一个矩形看成一个点,构出图以后bfs射线就可以... 阅读全文
posted @ 2013-07-06 04:43 LyonLys 阅读(403) 评论(0) 推荐(0)
hdu 1156 && poj 2464 Brownie Points II (BIT)

摘要:2464 -- Brownie Points IIProblem - 1156 hdu分类线段树的题。题意是,给出一堆点的位置,stan和ollie玩游戏,stan通过其中一个点画垂线,ollie通过在垂线上的点画一条平行线。他们的得分是stan在一三象限中有多少点,ollie在二四象限中共有多少点。在平行线和垂线的点不算任何人的。 开始的时候以为暴力二维线段树,结果发现点的数目也太庞大了。后来想了一想,只是统计这么几个区域,逐个插点就可以的嘛。用一个树状数组存下y坐标中相应位置的点的个数,向前向后做两次差点即可! 错了一次忘记将答案unique,然后就AC了。代码及debug的数据如下... 阅读全文
posted @ 2013-07-05 16:20 LyonLys 阅读(441) 评论(0) 推荐(0)
poj 1263 Reflections (Simple Geometry)

摘要:1263 -- Reflections 简单计算几何。题目给出射线以及若干个不相交的圆,求出射线会在哪些圆上反弹,依次写出反弹球的编号。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 const double EPS = 1e-10; 11 template T sqr(T x) { return x * x;} 12 inline int sgn(double x) { return (x > EPS)... 阅读全文
posted @ 2013-07-04 03:25 LyonLys 阅读(340) 评论(0) 推荐(0)
hdu 4476 Cut the rope (2-pointer && simulation)

摘要:Problem - 4476 题意是,给出若干绳子,对同一根绳子只能切割一次,求出最多能获得多少长度相同的绳子。 代码中,s是最大切割长度,而当前切割长度为t/2.代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using n... 阅读全文
posted @ 2013-07-04 02:18 LyonLys 阅读(239) 评论(0) 推荐(0)
hdu 1286 找新朋友 (容斥原理 || 欧拉函数)

摘要:Problem - 1286用容斥原理做的代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const int N = 33333;10 11 int last[N];12 void pre() {13 last[1] = 1;14 for (int i = 2; i fac;25 void getFac(int n) {26 fac.clear();27 while (n > 1) {28 fac.pus... 阅读全文
posted @ 2013-07-04 01:40 LyonLys 阅读(309) 评论(0) 推荐(0)
hdu 4063 Aircraft (Geometry + SP)

摘要:Problem - 4063 几何加简单最短路。 题意是给出若干圆的圆心以及半径,求出从给出的起点到终点的最短路径的长度,可以移动的区域是圆覆盖到的任意一个位置。 做法是这样的,对圆两两求交点,用这些得到的交点以及起点和终点作为我们要构造的图的顶点。因为我们要的是最短路径,所以如果我们要从一个区域穿越到另一区域的时候,必然是经过这些交点的。然后我们可以对这些交点两两判断是否能够相互到达。这个判断才是这道题的关键。判断的方法可以有几种,我想到的一是先求出直线与所有圆的交点,排序以后判断所有的圆能否覆盖掉这条线段;而我的是另一种方法,就是用一个队列,将还没有被覆盖的线段存在队列里,每次跟圆相... 阅读全文
posted @ 2013-07-03 23:12 LyonLys 阅读(343) 评论(0) 推荐(0)
hdu 1277 全文检索 (直接映射查找 || 自动机)

摘要:Problem - 1277 无聊做水题的时候发现的一道题目。这道题第一反应可以用自动机来解决。当然,条件是各种限制,从而导致可以用直接映射标记的方法来搜索。具体的做法就像RK算法一样,将字符串hash成一个数,这里每一个关键字前四位都是不同的,这样就有利于hash搜索了。当前四位匹配的时候,就可以搜索整个串是否完全匹配。这整个的复杂度大概是O(n*m),n是全文测长度,m是关键字的长度。自动机代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 ... 阅读全文
posted @ 2013-07-01 23:36 LyonLys 阅读(469) 评论(0) 推荐(0)
hdu 2410 Barbara Bennett's Wild Numbers

摘要:Problem - 2410 挺好玩的一道题目。这道题的意思是给出一个模糊值以及一个确定值,要求求出模糊值中大于确定值的个数有多少。 这题我是直接用dfs的方法搜索的,对于每一位如果之前位置的形成的数比确定值当前形成的数小,之后就不可能形成满足要求的值了。如果是大于的,之后的所有问号都可以填入0~9任何一个数字。如果是等于,就要继续搜索下一位。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 typedef long long LL; 9 char str1[15], s... 阅读全文
posted @ 2013-07-01 13:36 LyonLys 阅读(234) 评论(0) 推荐(0)
hdu 1289 Hat’s IEEE

摘要:Problem - 1289 好题。其实就是模拟IEEE754的格式,不过要注意的是,这里用的32位是float,用double就不对了。代码如下: 1 #include 2 #include 3 #include 4 5 using namespace std; 6 7 int main() { 8 float x; 9 while (cin >> x) {10 int cnt = 0;11 while (fabs(x) >= 2.0) x /= 2.0, cnt++;12 while (fabs(x) < 1.0)... 阅读全文
posted @ 2013-07-01 12:08 LyonLys 阅读(139) 评论(0) 推荐(0)

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3