• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
LyonLys
愿意在角落唱沙哑的歌 再大声也都是给你 请用心听 不要说话 Contact me via E-mail: lyon.lys@gmail.com
博客园    首页    新随笔    联系   管理    订阅  订阅
06 2013 档案
LA 4973 Ardenia (3D Geometry + Simulation)

摘要:ACM-ICPC Live Archive 三维几何,题意是要求求出两条空间线段的距离。题目难度在于要求用有理数的形式输出,这就要求写一个有理数类了。 开始的时候写出来的有理数类就各种疯狂乱套,TLE的结果是显然的。后来发现,在计算距离前都是不用用到有理数类的,所以就将开始的部分有理数改成直接用long long。其实好像可以用int来做的,不过我的方法比较残暴,中间运算过程居然爆int了。所以就只好用long long了。代码如下,附带debug以及各种强的数据: 1 #include 2 #include 3 #include 4 #include 5 #includ... 阅读全文
posted @ 2013-06-30 21:36 LyonLys 阅读(426) 评论(0) 推荐(0)
poj 3334 Connected Gheeves (Geometry + BInary Search)

摘要:3334 -- Connected Gheeves 题意是,给出两个尖形的相连的容器,要求向其中灌水。它们具有日常的物理属性,例如两个容器中水平面高度相同以及水高于容器顶部的时候就会溢出。开始的时候打算直接用几何的计算,求出精确值。后来发现,这样的计算实在是太麻烦了,实现起来有很多细节要注意。于是,后来就想到了用二分的方法,枚举水平面的高度,然后求直线切割容器得到的多边形的面积,因为这个面积会随着水平面的高度具有单调性。注意预先确定好二分的上下界即可。1y~代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 ... 阅读全文
posted @ 2013-06-29 23:32 LyonLys 阅读(252) 评论(0) 推荐(0)
hdu 1596 find the safest road (变形SP && dij+heap)

摘要:Problem - 1596 变形最短路问题,给出邻接矩阵,要求求出给定点对间安全率最大值。 这题可以用dijkstra+heap来做。对于每一个查询,做一次dij即可。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const int N = 1111;10 double wt[N][N];11 bool vis[N];12 #define _clr(x) memset(x, 0, sizeof(x))13 typedef pair PDBI;... 阅读全文
posted @ 2013-06-29 01:29 LyonLys 阅读(241) 评论(0) 推荐(0)
hdu 1736 美观化文字

摘要:Problem - 1736 模拟,不过好多地方要注意。 对于每一行,左右双引号要重新计算,有可能有全角的双引号,也要算进去。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 int main() { 9 char str[2][3];10 strcpy(str[0], "“");11 strcpy(str[1], "”");12 // freopen("in", "r", stdin);13 char ch 阅读全文
posted @ 2013-06-29 00:37 LyonLys 阅读(305) 评论(0) 推荐(0)
hdu 1430 魔板 (BFS+预处理)

摘要:Problem - 1430 跟八数码相似的一题搜索题。做法可以是双向BFS或者预处理从"12345678"开始可以到达的所有状态,然后等价转换过去直接回溯路径即可。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 using namespace std; 10 11 char q[44444][10], op[44444], tmp[10]; 12 int qh, qt, last[44444]; 13 map pos; 14 1... 阅读全文
posted @ 2013-06-28 21:55 LyonLys 阅读(445) 评论(0) 推荐(0)
hdu 1358 Period (KMP求循环次数)

摘要:Problem - 1358 KMP求循环节次数。题意是,给出一个长度为n的字符串,要求求出循环节数大于1的所有前缀。可以直接用KMP的方法判断是否有完整的k个循环节,同时计算出当前前缀的循环节的个数。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 const int N = 1111111; 9 char buf[N];10 int next[N];11 12 void getNext(char *str, int len) {13 int i = 0, j =... 阅读全文
posted @ 2013-06-28 03:26 LyonLys 阅读(225) 评论(0) 推荐(0)
poj 1271 && uva 10117 Nice Milk (半平面交)

摘要:uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1058 半平面交求面积最值。直接枚举C(20,8)的所有情况即可。代码如下: 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 #include <cmath> 6 #include <vector> 阅读全文
posted @ 2013-06-21 23:04 LyonLys 阅读(518) 评论(0) 推荐(0)
uva 100 The 3n + 1 problem (RMQ)

摘要:uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=36 预处理,RMQ求区间最大值。代码如下: 1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 #include <algorithm> 5 #include <cmath> 6 7 using namespace std; 8 9 typedef long 阅读全文
posted @ 2013-06-21 21:12 LyonLys 阅读(181) 评论(0) 推荐(0)
uva 11275 3D Triangles (3D-Geometry)

摘要:uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2250 判断两个空间中的三角形是否有公共点。代码如下: 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <vector> 5 #include <iostream> 6 #include <algorithm> 7 8 using 阅读全文
posted @ 2013-06-21 19:49 LyonLys 阅读(209) 评论(0) 推荐(0)
uva 12296 Pieces and Discs (Geometry)

摘要:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3717 暴力计算几何。 用切割多边形的方法,将初始的矩形划分成若干个多边形,然后对于每一个圆判断有哪些多边形是与其相交的。面积为0的多边形忽略。 对于多边形与圆相交,要主意圆在多边形内的情况。代码如下: 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include & 阅读全文
posted @ 2013-06-21 18:10 LyonLys 阅读(415) 评论(0) 推荐(0)
poj 1514 Metal Cutting (dfs+多边形切割)

摘要:1514 -- Metal Cutting 一道类似于半平面交的题。 题意相当简单,给出一块矩形以及最后被切出来的的多边形各个顶点的位置。每次切割必须从一端切到另一端,问切出多边形最少要切多长的距离。 因为最短的切割距离肯定是没有多余的切割痕迹的,而且对于多边形的每一条边,都需要至少经过一次,也就是这些是必要切割。又因为最多就只有8条切割的痕迹,所以我们可以枚举每条痕迹的先后次序,然后模拟切割即刻。复杂度O(n!*n)。代码如下: 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #i 阅读全文
posted @ 2013-06-21 13:48 LyonLys 阅读(343) 评论(0) 推荐(0)
poj 1474 Video Surveillance (半平面交)

摘要:1474 -- Video Surveillance 跟前一篇3335的是一样的。代码入下: 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 #include <vector> 6 #include <cmath> 7 8 using namespace std; 9 10 struct Point { 11 double x, y; 12 Point() {} 13 Point(double x 阅读全文
posted @ 2013-06-21 11:31 LyonLys 阅读(186) 评论(0) 推荐(0)
poj 3335 Rotating Scoreboard (Half Plane Intersection)

摘要:3335 -- Rotating Scoreboard 给出一个多边形,要求判断它的内核是否存在。 还是半平面交的题,在这道题中,公告板允许其所在位置与直线共线也算是可见,于是我们就可以将每一条直线微小的移动,然后判断是够能够交出多边形,这样做是因为对于半平面交是不能直接判断是够交集是一个点的情况的。代码如下: 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 #include <vector> 6 #incl 阅读全文
posted @ 2013-06-21 11:26 LyonLys 阅读(213) 评论(0) 推荐(0)
poj 2451 Uyuw's Concert (半平面交)

摘要:2451 -- Uyuw's Concert 继续半平面交,这还是简单的半平面交求面积,不过输入用cin超时了一次。代码如下: 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 #include <vector> 6 #include <cmath> 7 8 using namespace std; 9 10 struct Point { 11 double x, y; 12 Point() 阅读全文
posted @ 2013-06-21 11:00 LyonLys 阅读(237) 评论(0) 推荐(0)
poj 1279 Art Gallery (Half Plane Intersection)

摘要:1279 -- Art Gallery 还是半平面交的问题,要求求出多边形中可以观察到多边形所有边的位置区域的面积。其实就是把每一条边看作有向直线然后套用半平面交。这题在输入的时候应该用多边形的有向面积来判断输入的顺序是顺时针的还是逆时针的。 对于半平面交问题,要注意最后半平面返回的是多少个点。对于小于3个点的情况应该直接返回结果,避免计算过程中产生错误。代码如下: 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 #in 阅读全文
posted @ 2013-06-21 10:30 LyonLys 阅读(215) 评论(0) 推荐(0)
hdu 1255 覆盖的面积 (Bruceforce)

摘要:Problem - 1255 暴力统计覆盖超过一次的区域。1y。代码如下: 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <iostream> 5 #include <algorithm> 6 #include <set> 7 8 using namespace std; 9 10 typedef pair<double, int> PDBI;11 multiset<PDBI> pos;12 #defin 阅读全文
posted @ 2013-06-21 06:52 LyonLys 阅读(300) 评论(0) 推荐(0)
poj 3384 Feng Shui (Half Plane Intersection)

摘要:3384 -- Feng Shui 构造半平面交,然后求凸包上最远点对。 这题的题意是给出一个凸多边形区域,要求在其中放置两个半径为r的圆(不能超出凸多边形区域),要求求出两个圆心,使得多边形中没有被覆盖的面积最小。反之就是求圆覆盖的区域最大。首先我们可以求出圆心放置的位置的区域,这个要利用半平面交,将原多边形区域向内收缩r的距离。要求两个圆覆盖的区域最大,也就是它们相交的面积最小,也就是两个圆心的距离要尽可能的大。这样就说明了,这题的做法是要求出凸包上面的最远点对。 做这题的时候犯了两个错误,一个是没有设置对精度,直接用了cout的默认输出,另一个则是没有想到收缩以后,剩余的多边形的顶... 阅读全文
posted @ 2013-06-21 05:56 LyonLys 阅读(363) 评论(0) 推荐(0)
hdu 2986 Ballot evaluation (Simulation)

摘要:Problem - 2986 之前在华工赛见过的一道简单的模拟,用map轻松干掉。为了精确,要全程用整型比较。轻松1y~代码如下: 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 #include <string> 6 #include <map> 7 8 using namespace std; 9 10 map<string, int> val;11 12 int con(char 阅读全文
posted @ 2013-06-17 16:45 LyonLys 阅读(209) 评论(0) 推荐(0)
hdu 4430 Yukari's Birthday (简单数学 + 二分)

摘要:Problem - 4430 题意是,给出蜡烛的数量,要求求出r和k,r是蜡烛的层数,k是每一层蜡烛数目的底数。 开始的时候,没有看清题目,其实中间的那根蜡烛是可放可不放的。假设放置中间的那根蜡烛,就可以用等比数列求和公式S=(k^(r+1)-1)/(k-1),因为这个公式,对于固定的r,S(k)是单调递增的,然后可以发现,r的范围是相当的小的,最多不会大于40,然后就可以对于每一个r进行一次二分查找,找到k。但是,对于r==1的时候,用这个公式的是会爆龙龙的,而r==1的时候又是直接可以计算出来的,所以留到之后再算。另外,求的是r*k最小的结果,其实很容易发现,r是越大越好的,所以就从大.. 阅读全文
posted @ 2013-06-17 14:43 LyonLys 阅读(473) 评论(0) 推荐(0)
hdu 3374 String Problem (字符串最小最大表示 + KMP求循环节)

摘要:Problem - 3374KMP求循环节。http://www.cnblogs.com/wuyiqi/archive/2012/01/06/2314078.html 循环节推导的证明相当的好,这题是很裸的套算法的题。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 const int N = 1111111; 9 char buf[N];10 int next[N];11 12 void getNext(char *str) {13 char *si = str;... 阅读全文
posted @ 2013-06-17 14:30 LyonLys 阅读(155) 评论(0) 推荐(0)
LightOJ 1285 Drawing Simple Polygon (Convex Hull && Simulation)

摘要:Jan's LightOJ :: Problem 1285 - Drawing Simple Polygon 搞了挺久的一道题,通过率挺低的。 题意是,给出一堆点,要求求出一个多边形,多边形上每一条边不与其他的边相交,而且多边形要用给出的所有点。如果能构成多边形,就输出多边形的点的序号,否则就输出"Impossible"。 做法是,对所有的点做凸包,每次做出凸包后对剩余的点继续做凸包,直到的到很多个一层包含一层的凸包。然后剩下的操作就是模拟相邻两层间的连结了。对于我代码中注释的第一组数据:对所有的点做凸包后:然后模拟遍历各个凸包的做法:其实很容易可以发现,对于每一个 阅读全文
posted @ 2013-06-16 15:04 LyonLys 阅读(502) 评论(1) 推荐(1)
hdu 3007 Buried memory (最小覆盖圆)

摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3007 前几天认真看了一下最小圆覆盖的论文,对于随机点集,只需要按顺序插入。每次插入分两种情况,一种是点在当前的圆中,另一种是点在园外。在圆中可以直接不理,在圆外的就要枚举所有构成最小覆盖圆的可能了。当发现点在圆外的时候,这个点必定是当前要找到的最小圆经过的点之一,于是就可以枚举出两个点和三个点的情况。看上去是一个O(n^3)的算法,但是对于随机的插入的点,剪枝可以使得复杂度降到期望的O(n)的规模。代码如下: 1 #include <cstdio> 2 #include <cmath> 阅读全文
posted @ 2013-06-09 21:16 LyonLys 阅读(278) 评论(0) 推荐(0)
JOJ 2785 赛车 (半平面交)

摘要:Jilin University Online Judge System--2785:赛车 吉林大学OJ上的题目。中文题。 这是经典的半平面交的模型。直接套用半平面交的模板,不过要注意,对有向直线排序的时候要用叉积来比较,不然精度会丢失,从而导致排序出错。代码如下: 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 #include <cmath> 6 7 using namespace std; 8 9 co 阅读全文
posted @ 2013-06-05 17:33 LyonLys 阅读(167) 评论(0) 推荐(0)
hdu 2215 Maple trees

摘要:Problem - 2215 题意是,给出一些直径为1的树的位置,要求求出最小的能够把所有的树围起来的圆的半径。 开始的时候打算用类似模拟退火的方法,假定一个位置是最小圆的圆心,然后向每一个方向尝试移动圆心。如果能得到更小的一个圆,那么就将圆心移动到这里。如果把所有的方向都找遍都不能找到更小的圆,这时就要将点移动的距离减少,继续移动。直到移动的距离足够小的时候停止搜索。不过这样做,精度不能保证,所以最后还是要换回最小包围圈算法来通过这题。 下面的是包围圈暴力算法的代码,复杂度O(n^3): 1 #include <cstdio> 2 #include <cstring> 阅读全文
posted @ 2013-06-05 13:06 LyonLys 阅读(250) 评论(0) 推荐(0)
hdu 2202 最大三角形 (Convex Hull && (Bruce Force || Rotate Stuck))

摘要:Problem - 2202 题目中文,不另外解释。 做法是构造出凸包,估计点是随机出的,所以凸包的大小不会太大,于是可以直接对凸包上的点进行暴力计算三角形的面积。 如果随机的点是n个,凸包上面有m个点,那么复杂度就是O(n+m^3)。代码如下: 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <algorithm> 5 #include <iostream> 6 7 using namespace std; 8 9 const double 阅读全文
posted @ 2013-06-03 22:58 LyonLys 阅读(254) 评论(0) 推荐(0)
Hangzhou Invitation Day2

摘要:希望越大,失望越大。_(:з」∠)_ 但愿这一次的失败会是以后比赛的宝贵经验。沉潜,是为了下一次能跃 的更高! 早上,阴雨的天气,我们3个人6点多就醒来了。刷牙洗脸,然后就收拾好要带去赛场的物品。一切准备的是多么的好。可是我们3人早上的状态貌似都不怎么样,感觉不太好。 我们7点半就在酒店吃完早餐,然后就下去楼下坐车去赛场了。到达赛场的时候8点钟,场地还在布置着,所以我们只能在主席台上等候志愿者安排好一切。比赛前15分钟左右,我们进入了赛场,房号东西准备开打。 本来根据气球的颜色,预计ABC三题是大水题,结果开始的时候,他们看AB,我去开编译器。ly看了下B,没有认真看清就跟我说大概... 阅读全文
posted @ 2013-06-03 08:06 LyonLys 阅读(149) 评论(0) 推荐(0)
hdu 2907 Diamond Dealer (Convex Hull)

摘要:Problem - 2907 简单的凸包加上扫描顶点。 题意是给出一个多边形,对这个多边形构造一个凸包,问有多少条边是在凸包上的,凸包上有多少个区域是缺了的。求出来以后乘以给出的权值,就是答案。 做法很简单,对给出的多边形求一次凸包,然后将原多边形的顶点顺序倒序(这是因为我的凸包是逆时针构建的),然后对齐凸包上的第一个点(一定存在能被对其的顶点,阴为在凸包上的点都在原多边形上)。然后从这个点开始扫描,如果凸包上两个点是相邻的,同时这两个点在原多边形上也是相邻的,那么这两个点之间那条边就是凸包上的边,否则就有一个缺失了的区域了。代码如下: 1 #include <cstdio> 2 阅读全文
posted @ 2013-06-03 07:01 LyonLys 阅读(207) 评论(0) 推荐(0)
Hangzhou Invitation Day1

摘要:昨晚卡题卡好久了,所以就熬夜熬到两点才睡。今天一大早7点就要起来,去参加那个无聊的开幕式,以及代表教练去抽签。 浙工的环境不错,感觉就是当年成都赛的东软学院。那个体育馆相当威武,也是我们的比赛场馆,就像两个UFO一样坐落在进去校门没多远的位置。今天的经历最搞笑的莫过于是我们的进行开幕式的建筑叫做“健行B楼”,不过我们不认识路,绕了好久都没有找到,于是只好找志愿者问了。志愿者听到这个名称,直接就说“哦,健B是吧?”,然后我们就当场笑趴了。。_(:з」∠)_我们队伍的志愿者是研一的女生,今天我们没有找到开幕式的场地起其中一个原因就是她的手机坏了,然后我们打了n多电话给她都没有回复。最后在中午... 阅读全文
posted @ 2013-06-01 22:52 LyonLys 阅读(169) 评论(0) 推荐(0)
LightOJ 1313 Protect the Mines (Convex Hull && Minimum Circle)

摘要:Jan's LightOJ :: Problem 1313 - Protect the Mines wa了好多天的一个凸包啊!之前是想错方向了,以为最后的凸包一定由在起初构建的凸包上的点构成的,于是就狂wa不止。昨天在地铁上面讨论这题,突然想到,对于一个凸包,每一条边都不会穿过要被包围的点集。所以,我们可以先判断有向直线是否穿过要被包围的点集,得到有可能围成凸包的所有有向边。然后用floyd算法,计算最小环的长度。可是,我在打的过程中居然忘记了对于一个点是否能到下一个点的判断是要找出是否能够通过中间任意一个点到达,所以就漏了一个或“|”的符号。于是又wa了一个晚上。 改过来就过了_(: 阅读全文
posted @ 2013-06-01 13:13 LyonLys 阅读(436) 评论(0) 推荐(0)
Hangzhou Invitation Pre-day

摘要:有点惊险的一天。 早上11点去杭州的飞机,我和队友们本来计划9点从五山出发的,结果拖迟了十几分钟。幸运的是,地铁速度够快,压哨2分钟从取票处拿到机票了。 飞机飞了两个钟就到杭州,然后我们坐机场大巴到武林门,再转的士到酒店。自费的比赛,开支各种心疼。TAT 到了酒店,我们入住一间3人房,设备... 阅读全文
posted @ 2013-06-01 00:44 LyonLys 阅读(210) 评论(0) 推荐(0)

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