首页 > 其他分享 >CodeForces 1C - Ancient Berland Circus

CodeForces 1C - Ancient Berland Circus

时间:2024-09-14 18:51:26浏览次数:10  
标签:Ancient return Point double Circus 1C l2 l1 Line

先通过三点确定一条直线,然后算出三条向量的夹角,与圆心角对比,如果呈倍数关系,说明可以接受。特别注意EPS 1e-2和1e-7过不了全部数据,改成1e-4通过全部数据。

点击查看代码
#include <bits/stdc++.h>
#define double long double
using namespace std;

const double PI = acos(-1);
const double EPS = 0.0001;
const double INF = numeric_limits<double>::max();

double fgcd(double x, double y) { // 实数域gcd
	return abs(y) < EPS ? abs(x) : fgcd(y, fmod(x, y));
}

bool equal(double x, double y) {return -EPS < x - y && x - y < EPS;}
struct Point { 
    double x, y;
    friend bool operator<(Point a, Point b) { return equal(a.x, b.x) ? a.y < b.y - EPS : a.x < b.x - EPS;}
    friend bool operator>(Point a, Point b) { return b < a; }
    friend bool operator==(Point a, Point b) { return !(a < b) && !(b < a); }
    friend bool operator!=(Point a, Point b) { return a < b || b < a; }
};

struct Line {Point a, b;};
struct Circle{Point o;double r;};

Point operator + (Point a,Point b) {return {a.x + b.x,a.y + b.y};}
Point operator - (Point a,Point b) {return {a.x - b.x,a.y - b.y};}
Point operator * (Point a,double D) {return {a.x*D,a.y*D};};
Point operator / (Point a,double D) {return {a.x/D,a.y/D};};
double cross(Point a, Point b) {return a.x * b.y - a.y * b.x;}
double cross(Point p1, Point p2, Point p0) {return cross(p1 - p0, p2 - p0);}
double dot(Point a, Point b) {return a.x * b.x + a.y * b.y;}
double dot(Point p1, Point p2, Point p0) {return dot(p1 - p0, p2 - p0);}
double dis(Point a, Point b) {return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));}
 
double toDeg(double x) { return x * 180 / PI;}// 弧度转角度
double toArc(double x) { return PI / 180 * x;}// 角度转弧度

double angle(Point a, Point b) {
	double val = abs(cross(a, b));
	return abs(atan2(val, a.x * b.x + a.y * b.y));
}

Point rotate(Point p1, Point p2) { // 旋转
	Point vec = p1 - p2;
	return {-vec.y, vec.x};
}

Line midSegment(Line l) {
	Point mid = (l.a + l.b) / 2; // 线段中点
	return {mid, mid + rotate(l.a, l.b)};
}

Point lineIntersection(Line l1, Line l2) {
	double val = cross(l2.b - l2.a, l1.a - l2.a) / cross(l2.b - l2.a, l1.a - l1.b);
	return l1.a + (l1.b - l1.a) * val;
}

Point getCircle(Point A, Point B, Point C) {
	Line l1 = midSegment(Line{A, B});
	Line l2 = midSegment(Line{A, C});
	return lineIntersection(l1, l2);

}

double getAng(Point a,Point b){
	return abs(atan2(cross(a,b),dot(a,b)));

}

signed main() {
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cout << fixed << setprecision(9);
	array<Point,3> v;
	for(int i = 0;i < 3;i ++ ) {
		cin >> v[i].x >> v[i].y;
	}
	Point o = getCircle(v[0],v[1],v[2]);
	double a1,a2;
	a1 = getAng(o - v[0],o - v[1]);
	a2 = getAng(o - v[0],o - v[2]);
	int k = -1;
	for(int i = 3;i <= 100;i ++ ) {
		double A = 2*PI/i;
		double a3 = fgcd(A,a1),
			   a4 = fgcd(A,a2);
		
		if(abs(A - a3) < EPS && abs(A - a4) < EPS) {
			k = i;break;
		}
	}

	double r = dis(o,v[0]);

	cout << abs(k*r*r*sin(2*PI/k) / 2.);
	return 0;	
}
/*

*/

标签:Ancient,return,Point,double,Circus,1C,l2,l1,Line
From: https://www.cnblogs.com/lovelyGod/p/18414549

相关文章

  • 昱合昇|通风采光天窗图集11CJ33
    通风采光天窗11CJ33是一本建筑标准设计图集,主要介绍了MCW系列的通风天窗和C系列的电动采光排烟天窗(C1T三角型电动采光排烟天窗、C2T一字型电动采光排烟天窗、C3CT圆拱型(侧开式)电动采光排烟天窗、MC3CT圆拱型(侧开式)电动采光排烟天窗、C3ST圆拱型(上开式)电动采光排烟天窗和C3G固定......
  • 51c大模型~合集52
    #Carpentopod当代版木牛流马?国外网友造出「会走路的桌子」,引百万人围观你想喝瓶啤酒,于是就把桌子叫了过来。这不是吃了菌子才有的场景,而是国外网友的一项发明,名叫Carpentopod。整个桌子有12条腿,里面内置了电机,是木工、电子和编程结合的产物。只要按下遥控器,桌子就会向你走来,像一......
  • 51c大模型~合集51
    #LLaMA大模型是如何炼成的?本文介绍来自MetaAI的 LLaMa 模型,类似于OPT,也是一种完全开源的大语言模型。LLaMa的参数量级从7B到65B大小不等,是在数万亿个token上面训练得到。值得一提的是,LLaMa虽然只使用公共的数据集,依然取得了强悍的性能。 本文介绍来自MetaAI的LL......
  • 51c嵌入式~电路~合集5
    一、电路的基础知识总结了电路基础知识点。......
  • 51c自动驾驶~合集25
    #AllWeather-Net拿捏所有天气!增强所有恶劣环境图像~论文题目:AllWeather-Net:UnifiedImageEnhancementforAutonomousDrivingUnderAdverseWeatherandLow-LightConditions论文链接:https://arxiv.org/pdf/2409.02045代码链接:https://github.com/Jumponthemoon/AllWeatherNe......
  • 「杂题乱刷2」CF1301C
    怎么没有二分的题解啊,写一篇。题目链接CF1301CAyoub'sfunction解题思路发现我们可以将问题转化成将\(n-m\)个\(1\)分成\(m\)份,设第\(i\)份的数字之和为\(sum_i\),则这样的分配方案的贡献为\(\frac{n\times(n+1)}{2}-\sum_{i=1}^{n}sum_i^2\)。容易发现要使......
  • 51c视觉~合集26
    #将MOE塞到LoRA在传统的LoRA中加入一个Mixer矩阵,进行混个不同子空间的信息。Nothingwillworkunlessyoudo.--MayaAngelou本文主要介绍一篇论文是怎么诞生。文章的基本信息是:标题:Mixture-of-SubspacesinLow-RankAdaptation链接:https://arxiv.org/pdf/2406.11909代码......
  • 51c大模型~合集47
    #支小宝支付宝突然推出新App,竟想用AI让日常生活开挂只是装了一个App,整个生活就AI了。家人们,支付宝已经这么「炸场」了吗?输入「买一张周日的高铁票,从北京到武汉,下午出发,行程时间最短的一趟」,点击三次,等待数秒,购票成功!以前跳转几个页面、点击十几下才能搞定,感觉像是一个段子。,......
  • [ARC171C] Swap on Tree
    MyBlogs[ARC171C]SwaponTree科技改变生活。以6ms的速度拿下了目前最优解(如果已经确定了\(u\)的一个儿子\(v\)内部的操作顺序,考虑在某个时刻交换\((u,v)\)。设\(a[1,k]\)是操作\(v\)子树内部时\(v\)上面的颜色,可以发现在第\(i\)个时刻交换和在第\(j\)个时......
  • 51c视觉~合集25
    #U-ViT别只盯着DiT,国产模型也在暗自发力!U-ViT:ViT架构实现Diffusion的开山之作!本文的提出比DiT还要早一点,而且本文是用ViT架构实现Diffusion模型的开山之作,使用ViT来替换Diffusion模型中基于卷积的U-Net架构,同时维持模型宏观的U形架构不变。OpenAISora[1]酷炫的效......