计算几何:平面
文章平均质量分 91
ProLightsfxjh
这个作者很懒,什么都没留下…
展开
-
UESTC 1170 红与蓝 计算几何、贪心、红蓝点对
贪心的做法预处理所有Ai到O的距离, 然后根据距离排序, 之后依次对每个Bi也求出BiO, 然后二分查找, 然后处理最近的+-100个点, 答案必定在这100或者1000个点之内比赛的时候是+-100 共200个点Accepted的然后比赛结束后试了一下, 我这样的方法至少要+-40 共80个点才能通过那个题目的数据测试好像还有专业计算几何的算法 红蓝点对 ☺☺原创 2016-07-28 22:11:54 · 1685 阅读 · 1 评论 -
Codeforces Good Bye 2017 C. New Year and Curling 几何、枚举
题意:有n个半径为r的圆盘,从第1个到第n个圆盘,依次从y = 10^100的位置向y = 0直线运动,当到达y = 0时,或者碰到之前停止运动的圆盘则停止。这里相切也作为碰到。求每个圆盘最终所在位置的圆心坐标。几何、枚举对于考虑圆i时,扫一遍j = 1~i-1所以圆心所在的位置,dabs = abs(x[i] - x[j]);如果它们的差dabs > 2*r 则它们不可能碰撞。否则ans[i] = max(ans[i], sqrt(4*r*r - dabs*dabs) + ans[j]);//ans原创 2018-01-14 19:11:38 · 517 阅读 · 0 评论 -
计蒜之道 2017 程序设计大赛 - 计蒜客 复赛 B Windows 画图 几何、平面、枚举
题意:在一个m*m(1≤n≤80000,1≤m≤250)的平面内给出n条线段,然后给出q(1≤q≤62500)个询问,为点x,y最近被2条线段所经过,如果没有则输出0。几何、平面、枚举这里 8e4 * 250 == 2e7,刚好可以预处理出mp[x][y]表示最后一次经过的线段。然后注意下精度问题即可,可能是向上修复精度,也可能是向下修复精度。y = -1;if(fabs(k*(j-xa) + ya*1.0 - double(int(k*(j-xa) + ya*1.0))) < EPS) y =原创 2017-06-11 18:27:32 · 913 阅读 · 0 评论 -
8VC Venture Cup 2017 - Elimination Round D. PolandBall and Polygon 树状数组+几何
题意:给出一个凸n边形,然后给一个k,存在gcd(n, k) == 1,然后从顶点x = 1开始,在x 与 y = x + k;//(while(y > n) y -= n;) 间画一条线,然后 x = y,继续 y = x + k 画线,没每画一条线图形中存在的中平面块数。树状数组+几何用ans表示画线前的平面块数,画一条xy线,则多出的平面块数为 线xy穿过的线的个数+1,观察可以发现,xy穿过的线段的个数等价于 顺时针方向 x与y之间点的权值和,(每个点的权值为点所在的线段的条数),然后考虑原创 2017-01-16 18:33:41 · 909 阅读 · 0 评论 -
Codeforces Round #385 (Div. 2) B. Hongcow Solves A Puzzle 几何、思维题
题意:那个由x构成的图片可以平移但不能翻转,问2个一样的图片分别经过以后能否构成一个矩形。几何、思维题其实就是判断所给的X构成的图形是否本身是矩形,因为只有这样才能在不翻转的情况下拼出一个矩形。笔者判断矩形的方法是,用4个变量分别记录x出现过的最高点最低点左左点最右点,然后 判断 (r - l) * (u - d) 是否 等于 x的总数,如果相等就是矩形了。这个题的难道应该是题意比较费解吧,没办法复杂度 O(n)原创 2017-01-10 23:00:42 · 546 阅读 · 0 评论 -
Codeforces Round #379 (Div. 2) D. Anton and Chess 几何
题意:首先有个white king放到棋盘上位置为x0,y0,然后输入n个黑棋的位置,其中B只能沿对角线移动任意距离、R只能水平或者垂直移动任意距离、Q可以沿对角线或者水平垂直移动任意距离,且它们都不能调过挡路的其它棋子,为是否有黑棋可以一步移到白棋white king的位置几何分别维护8个方向的由(x0, y0)发出的8条射线上距离x0,y0最近的黑棋的x,y,ch等信息。口 口 口口 x0,y0 口口 口 口最好跑一边这维护出的8个点,就可以得到答案了复杂度 O(n)原创 2016-11-16 21:37:39 · 998 阅读 · 0 评论 -
Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C. Ray Tracing 模拟+预处理、几何
模拟+预处理、几何首先每个点只有 2 条 abs(k) == 1的直线, 并且每条线最多经过一次,即每个店做多经过2次, 所以复杂度是O(n)的,模拟是可行的故先在读入的时候把该点 对应的 2 条 abs(k) == 1的直线 然后分别求出 他们与 矩形边框的2个交点 a(x1, y1),b(x2, y2) cnt[make_pair(a, b)].push_back(x, y); 即x, y 在 线段(a, b) or (b, a)上然后初始的时候 x0 = 0, y0 = 0; if(n <原创 2016-10-13 23:39:01 · 1005 阅读 · 0 评论 -
Codeforces Round #371 (Div. 2) D. Searching Rectangles 平面矩形二分法、交互题
平面矩形二分法、交互题先切一条与x轴平行的线把 2个矩形分隔开, 然后变成从 框框类确定一个矩形的坐标这样的子问题,对于那条与x轴平行且把2个矩形分隔开的线可以通过 二分法 logn的复杂度找到,如果没有与x轴平行且把2个矩形分隔开的线, 则 比有一条 与 y轴平行且把2个矩形分隔开的线, 也是 logn的复杂度可以找到然后确定单个矩形所在的大致区域以后 可以 分成4次 用 4个二分 分别二分x = x1, x = x2, y = y1, y = y2 这4条线, 确定一条线以后就确定了一个相应的坐原创 2016-09-16 03:44:46 · 1352 阅读 · 0 评论 -
Codeforces Round #340 (Div. 2) C. Watering Flowers 计算几何、圆和点
O(n)的预处理出所有点到到那个圆心的距离,val[i].r1 val[i].r2;然后 对于每个val[i]. r1 扫一遍 val[j], 当 val[j].r1 > r1 的时候 更新 r2 = max(r2, val[j].r2); 就像这个图然后对应每个i, 更新一次ans, ans = min(ans, r1 + r2);然后就是可能会都是只用到一个圆心,所以在放一个点 val[n].r1 = 0; val[n].r2 = 0)进去(val[n]), 所以从 0 到 n 考虑 n +原创 2016-09-01 01:23:15 · 1104 阅读 · 0 评论 -
Codeforces Round #340 (Div. 2) D. Polyline 计算几何,折线
几何,折线题意 给出3个点的坐标, 用折线把3个点连起来,要求每个线段 parallel to the coordinate axes(平行于坐标轴),然后线段没有交叉 和 self-touches(可能是说不能成环), 求出需要的最小的线段个数所以, 如果(x1 == x2 && x2 == x3) || (y1 == y2 && y2 == y3) 则可以一条线段 如果 (x1 == x2) || (x2 == x3) || (x1 == x3) || (y1 ==原创 2016-09-01 01:39:18 · 1136 阅读 · 0 评论 -
Moscow Subregional 2010 Problem A. Alien Visit 计算几何、连续圆的总面积
计算几何 计算 一串可能有相交可能有相离的同半径且圆心在同一水平面的圆的总面积总共是分三类讨论 1、相交, 圆心相距比较远, 相交并且 相交部分在那个菱形里面2、相交, 圆心相距比较近, 那个菱形在相交部分里面3、相离, 外离注意一下精度然后就是 每次把相交部分算到前一个圆, 然后一次算去就好了Wrong answer, 然后对圆心排个序就通过了, 本来以为默认就是升序的, 结果是乱序的⊙﹏⊙‖∣复杂度 O(n)这个是队友代码实现的, 所以向队友 nardo 要了AC代码原创 2016-08-09 01:20:01 · 995 阅读 · 1 评论 -
Codeforces Round #365 (Div. 2) C. Chris and Road 实数级的二分法、几何
实数级的二分法、几何可以把问题分成2种情况第一种情况:车到线之前, 行人通过 //遍历 n 个点第二种情况:车到线之后,行人通过 //即行人等了x分钟之后, 开始过马路, 刚好可以安全通过, nlogn 二分答案 + 遍历 n 个点Y ( ^ _ ^ ) Y 实数级的二分法最开始用的 eps = 1e-6, Wrong answer on test 3然后改成 eps = 1e-9 就过了。二分部分的代码 double l =原创 2016-09-16 21:30:33 · 1333 阅读 · 0 评论