几何
meopass
即使摸爬滚打,满身泥泞,我也要前进
展开
-
codeforces610D 矩形面积并
点相当于格,则先将右上角坐标x++, y++,将格转化成点。原问题等价于矩形面积并。 扫描线解决即可,枚举y扫描线,需要离散化x坐标轴。对于x坐标轴的离散化,需要将线段树原有的[l,r]闭区间转化成[l, r)左开右闭区间。这样每一点都代表一段区间V[r+1] - V[l]。#include <bits/stdc++.h>using namespace std; #define all(x) x.原创 2017-08-16 15:39:15 · 228 阅读 · 0 评论 -
HDU6206 几何 + 高精度
简略题意:给出4个点的坐标,问第4个点是不是在前3个点组成的三角形的外接圆外。先求出外接圆,然后判断第4个点和圆心的距离即可,唯一的问题是精度不够,需要上java。import java.io.PrintWriter; import java.math.BigDecimal; import java.math.BigInteger; import java.util.Scanner; /** *原创 2017-10-09 14:49:50 · 379 阅读 · 0 评论 -
codeforces 851C 数学
简要题意:给出nn个55维坐标系下的点,问有多少点满足任意两个点与其连线成的夹角必然大于等于π/2π/2。先考虑在二维平面下满足要求的点,以这个点为原点做平面直角坐标系,则该平面除原点外至多只会包含44个点,这四个点分别处于不同象限。否则,答案为00。 对于kk维平面,除原点外这样的点至多包含2∗k2*k个。因此当点数多于11个,答案必然不存在。否则我们暴力即可。(直接暴力也能过就是了= =!原创 2017-09-05 11:24:39 · 318 阅读 · 0 评论 -
codeforces106E 模拟退火
找到点即可,比较显然的模拟退火。#include <bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() typedef long long LL;const LL maxn = 3300;const double eps = 1e-8; double r; int n;struct Point { dou原创 2017-08-16 15:45:00 · 507 阅读 · 0 评论 -
codeforces314D 二分+滑窗
首先先将坐标轴旋转,之后二分答案,维护滑窗,前后缀优化判定连通性即可。#include <bits/stdc++.h>using namespace std;const int maxn = 110000; const double eps = 1e-8;int n; double premax[maxn], premin[maxn]; double sufmax[maxn], sufmin[max原创 2017-08-16 15:46:02 · 345 阅读 · 0 评论 -
codeforces406D LCA+凸包
首先我们来想一下,如果两个山顶间有连边,意味着两座山中间没有任何一座山高于这两座山的连线。 加入从左到右三座山分别是p, q, r,这就意味着Kpq >= Kqr,否则q山将是不合法的,这其实就是在维护一个凸包。 接下来的问题是,我们需要能够到达当前能够到达的最右端的山峰,并且在这里我们能和团队中的另一个人相遇。 第一个问题我们可以反向维护一个下凸壳来解决,之后我们就得到了当前山峰能够到达的最原创 2017-08-16 15:42:09 · 344 阅读 · 0 评论 -
codeforces630Q 几何
棱锥的体积是棱柱的1/3,随便怎么求都可以。#include <bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() typedef long long LL;const LL maxn = 1e5+100;double x, y, z;int main(){ scanf("%lf%lf%lf", &x,原创 2017-08-16 15:43:57 · 394 阅读 · 0 评论 -
codeforces2C 模拟退火
比较显然的模拟退火。 如果我们知道了点的坐标,那么其与其他三个圆的角度就可以得到了。我们需要最大化角度,这点不是很清楚,大概是因为这个点唯一?#include <bits/stdc++.h> using namespace std;struct Circle { double x, y, r; void in() { scanf("%lf%lf%lf", &x, &原创 2017-08-16 15:40:54 · 329 阅读 · 0 评论 -
CodeForces 600D 圆的面积交
#include <bits/stdc++.h> #define aint(x) x.begin(), x.end() using namespace std;typedef long long LL; const int maxn = 111;const long double pi = acos(-1.0); struct Point { long double x, y; Po原创 2017-08-16 15:01:32 · 323 阅读 · 0 评论 -
codeforces 24C 找规律
X轴与Y轴独立,且当n为奇数时,循环节为2*n。#include <bits/stdc++.h> #define aint(x) x.begin(), x.end() using namespace std;typedef long long LL; const int maxn = 111;const int pi = acos(-1.0); struct Point { int x,原创 2017-08-16 15:37:25 · 258 阅读 · 0 评论 -
SPOJ CIRU 圆的面积并 自适应辛普森积分
简略题意:给出n个圆,求他们的面积并。 去掉内含圆,因为不会对答案造成影响。 去掉和其他圆都相离的圆,这部分答案直接计算。 这样我们就只用计算和别的圆相交的圆的面积了。 辛普森积分暴力搞吧,对于x = a的直线,看多少圆覆盖了这条直线,求出这部分的长度即可。 #define poj #ifdef poj #include <iostream> #include <cstring> #include原创 2017-12-25 17:05:08 · 419 阅读 · 0 评论