Rasheda And The Zeriba Gym - 100283A ? 计算几何

http://codeforces.com/gym/100283/problem/A

考虑到多边形是不稳定的,是可以变来变去的。

那么总是可以把每个点放到圆上。

所以只需要判断圆心角是不是小于等于360即可。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <assert.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;

#include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <bitset>
const int maxn = 1000 + 20;
int a[maxn];
const double eps = 1e-6;
int n;
double pi = acos(-1.0);
bool check(double r) {
    double res = 0;
    for (int i = 1; i <= n; ++i) {
        res += asin(a[i] / 2.0 / r);
    }
    return res <= pi;
}
void work() {
    int sum = 0;
    int mx = 0;
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
        mx = max(a[i], mx);
        sum += a[i];
    }
    static int f = 0;
    printf("Case %d: ", ++f);
    if (sum - mx <= mx) {
        cout << "can‘t form a convex polygon" << endl;
        return;
    }
    double be = 0, en = 3e6 + 20;
    while (be + eps < en) {
        double mid = (be + en) / 2;
        if (check(mid)) {
            en = mid;
        } else be = mid;
    }
    printf("%.4f\n", en);
}

int main() {
#ifdef local
    freopen("data.txt", "r", stdin);
//    freopen("data.txt", "w", stdout);
#endif
    freopen("zeriba.in", "r", stdin);
    int t;
    scanf("%d", &t);
    while (t--) work();
    return 0;
}

时间: 2024-10-12 19:56:42

Rasheda And The Zeriba Gym - 100283A ? 计算几何的相关文章

Gym 101055A 计算几何,暴力

http://codeforces.com/gym/101055/problem/A 题目:给定一些三维空间的点,要你找一个平面,能覆盖尽量多的点,只要求输出点数即可.n<=50 因为数据量小,我们考虑暴力. 首先,三个不在同一条直线的点,确定一个平面,然后枚举其他的点.判断一下,这样的复杂度是n^4.可以接受 特判.所有点都在同一条直线.直接输出n. 后面的,枚举三个点后,能算出这个平面的法向量,然后枚举其他点,与法向量的数量积是0的,就可以ans++ #include <cstdio>

Gym - 101845D 计算几何

Ignacio is a famous mathematician, some time ago he was married with Dolly, a famous scientific, at that time they bought a huge piece of land that they would use to construct a national university, they chose the land with the following property: if

Gym 101464C - 计算几何+二分(uva1463)

网络赛的A题.不是很难,但是我觉得对代码能力的要求还是挺高的. 注意模块化. 因为是浮点数,所以二分用的很多很多. 参考 https://blog.csdn.net/njupt_lyy/article/details/81256538?utm_source=blogxgwz4 对半径二分,这样我们只需要判断能不能放的下这个圆.这时,通过给定的半径,对于每一条线段可以找到一个区间(或者为空),使得圆心不能落在这个区间上,我们只需要判断区间的并集是否覆盖了[0,L].那么如何去找到这个区间呢?对于每

【计算几何】【分类讨论】Gym - 101173C - Convex Contour

注意等边三角形的上顶点是卡不到边界上的. 于是整个凸包分成三部分:左边的连续的三角形.中间的.右边的连续的三角形. 套个计算几何板子求个三角形顶点到圆的切线.三角形顶点到正方形左上角距离啥的就行了,分类比较多. #include<cstdio> #include<cmath> using namespace std; const double PI=acos(-1.0); int n; char a[25]; struct Point{ double x,y; double len

Gym 101917 E 简单计算几何,I 最大流

题目链接 https://codeforces.com/gym/101917 E 题意:给定一个多边形(n个点),然后逆时针旋转A度,然后对多边形进行规约,每个点的x规约到[0,w]范围内,y规约到[0,h]范围内,输出规约后的结果. 解析:求出来 多边形的长和宽,再和w,h比较,对点按比例进行缩放就好了. (多边形旋转其实是绕给出的第一个点旋转,以为是绕原点wa了1发). AC代码 1 #include <bits/stdc++.h> 2 #define Vector Point 3 usi

Codeforces GYM 100651 D I Conduit! (水计算几何)

大致题意: 1e3 个线段,画在一张纸上,求可以看成多少个线段,( 两个线段部分重叠,或收尾相接将看成一个线段) 思路: 在同一一条直线上的两条线段: 他们斜率相等,他们在Y轴或X轴上的投影点相等.然后根据这两个排下序就可以搞出来了. 这题卡精度,要用到eps //#pragma comment(linker, "/STACK:1024000000,1024000000") #include <iostream> #include <cstring> #incl

【计算几何】【bitset】Gym - 101412G - Let There Be Light

三维空间中有一些(<=2000)气球,一些光源(<=15),给定一个目标点,问你在移除不超过K个气球的前提下,目标点所能接受到的最大光照. 枚举每个光源,预处理其若要照射到光源,需要移走哪些气球,构建成一个bitset. 然后再2^15枚举光源集合,看看要让集合中所有光源照到目标点所要移走的气球是否在K以内,尝试更新答案. 需要注意的一点是,三维叉积叉出来的向量的长度的绝对值,就是原来两个向量所张成的平行四边形面积的大小. #include<cstdio> #include<

【计算几何】【凸包】Gym - 101164H - Pub crawl

平面上n个点,点之间沿直线走,规划一条路线,每次只能往左半平面的点走,走过最多的点. 显然所有的点都能走过. n^2的暴力显然是每次找左边与其所形成夹角最小的点,但这样过不了(卡常数?). 或者每轮不断求凸包.有个非常巧妙的地方是将每一轮输出后剩下的最后一个点加到下一轮的点里面一起求凸包,这样只要按逆时针输出每一轮,就能满足. #include<cstdio> #include<cmath> #include<algorithm> using namespace std

【计算几何】【凸包】【极角排序】【二分】Gym - 101128J - Saint John Festival

平面上n个红点,m个黑点,问你多少个黑点至少在一个红三角形内. 对红点求凸包后,转化为询问有多少个黑点在凸包内. 点在凸多边形内部判定,选定一个凸包上的点作原点,对凸包三角剖分,将其他的点极角排序之后,使用二分法就可以判定点在哪个剖分出来的三角形的夹角内,然后用叉积即可判定其在凸包内还是外,O(logn): http://www.cnblogs.com/dream-wind/archive/2012/05/23/2514694.html #include<cstdio> #include<