首页 > 其他分享 >B. Area of the Devil

B. Area of the Devil

时间:2024-07-10 20:57:13浏览次数:13  
标签:Devil 度时 Area int double cc pdd

  • 借这道题夯实一下计算几何的基础
  • 向量积:顺负逆正
  • 两线交点和夹角都是借助向量工具求解的
  • 分类讨论:圆弧小于180度时,减去三角形面积;大于180度时,加上三角形面积
  • 割补法求面积(正难则反)
  • C++中的角度以弧度制表示
点击查看代码
#include <bits/stdc++.h>
#define pdd pair<double,double>
using namespace std;
const double pi=acos(-1.0);
int s[10],t[10],r;
int read1()
{
	char cc=getchar();
	while(!(cc>=48&&cc<=57))
	{
		if(cc=='-')
		{
			break;
		}
		cc=getchar();
	}
	bool f=false;
	int s=0;
	if(cc=='-')
	{
		f=true;
	}
	else
	{
		s=cc-48;
	}
	while(1)
	{
		cc=getchar();
		if(cc>=48&&cc<=57)
		{
			s=s*10+cc-48;
		}
		else
		{
			break;
		}
	}
	if(f==true)
	{
		s=-s;
	}
	return s;
}
pdd operator -(pdd a,pdd b)
{
	pdd c;
	c.first=a.first-b.first;
	c.second=a.second-b.second;
	return c;
}
pdd operator +(pdd a,pdd b)
{
	pdd c;
	c.first=a.first+b.first;
	c.second=a.second+b.second;
	return c;
}
pdd operator *(double a,pdd b)
{
	pdd c;
	c.first=b.first*a;
	c.second=b.second*a;
	return c;
}
pdd get_dot(int rad)
{
	return make_pair(cos(rad*pi/180.0)*r,sin(rad*pi/180.0)*r);
}
double len(pdd a)
{
	return sqrt(a.first*a.first+a.second*a.second);
}
double mul1(pdd a,pdd b)
{
	return a.first*b.first+a.second*b.second;
}
double mul2(pdd a,pdd b)
{
	return a.first*b.second-a.second*b.first;
}
pdd jiaodian(pdd a,pdd b,pdd c,pdd d)
{
	pdd l1=b-a,l2=d-c;
	return c+mul2(c-a,l1)/mul2(l1,l2)*l2;
}
double stri(pdd a,pdd b,pdd c)
{
	pdd l1=b-a,l2=c-a;
	return fabs(0.5*mul2(l1,l2));
}
int sgn(double x)
{
	if(x>0)
	{
		return 1;
	}
	return -1;
}
double shu(pdd a,pdd b)
{
	double w1=mul2(a,b);
	double w2=(acos(mul1(a,b)/len(a)/len(b)));
	if(w1<0)
	{
		w2=2*pi-w2;
	}
	return (w2/(2*pi))*pi*r*r-stri(a,b,make_pair(0,0))*sgn(w1);
}
void lunhuan()
{
	for(int i=1;i<=5;i++)
	{
		s[i-1]=s[i];
		t[i-1]=t[i];
	}
	s[5]=s[0];
	t[5]=t[0];
}
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		r=read1();
		for(int i=1;i<=5;i++)
		{
			s[i]=read1();
		}
		for(int i=1;i<=5;i++)
		{
			t[i]=read1();
		}
		double ans=pi*r*r;
		for(int i=1;i<=5;i++)
		{
			pdd tmp=jiaodian(get_dot(s[1]),get_dot(t[4]),get_dot(s[2]),get_dot(t[5]));
			ans-=stri(get_dot(s[1]),get_dot(t[5]),tmp);
			ans-=shu(get_dot(t[5]),get_dot(s[1]));
			lunhuan();
		}
		printf("%.9f\n",ans);
	}
	return 0;
}
/*
1
10
10 30 85 160 175
20 40 95 170 185
*/

标签:Devil,度时,Area,int,double,cc,pdd
From: https://www.cnblogs.com/watersail/p/18294986

相关文章

  • 对原生textarea加上:当前输入字数/最大输入字数
    源码:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>TextareaCharacterCounterwithDr......
  • SwiftUI中SafeArea的管理与使用(ignoresSafeArea, safeAreaPadding, safeAreaInset)
    SafeArea是指不与视图控制器提供的导航栏、选项卡栏、工具栏或其他视图重叠的内容空间。在UIKit中,开发人员需要使用safeAreaInsets或safeAreaLayoutGuide来确保视图被放置在界面的可见部分。SwiftUI彻底简化了上述过程,除非开发者明确要求视图突破安全区域的限制,否则SwiftU......
  • com.omarea.vtools/files/up.sh
    scene="com.omarea.vtools"daemon="scene-daemon"current_dir=$(dirname$0)origin_path="$current_dir/$daemon"if[[!-e"$origin_path"]];then echo$origin_path echo"Scene'sdaemonnotfound!" exit......
  • 【uni-app】 textarea组件的auto-hieght属性,显隐切换时高度异常,无法自适应内容撑开。
    bug1:在uni-app中,在使用多文本输入框时,如果输入框存在if的显隐切换时,真机调试中auto-height计算高度有误(一般是高于正常高度),导致小程序页面渲染出现很大问题。案例代码如下:<viewclass="content_right"v-if="editable"> <textareaplaceholder="请输入地址"......
  • 2024 jscpc B题 Area of the Devil 题解
    题目链接:AreaoftheDevil算不在题目说的区域内的面积,直接算是比较麻烦的,这里给一个朋友直接算画的图,其实画出区域以后也算好算,当然官解提到的容斥去算更好写。一共有五个空余的区域,我们考虑这五个区域怎么计算,图一是直接画出的所有区域的并集,图二则是五角星处于边界情况时,图......
  • ExcelDataReader:一个.Net高性能Excel开源读取器
    ExcelDataReader:一个.Net高性能Excel开源读取器来自:编程乐趣推荐一个用于读取MicrosoftExcel文件的高性能开源库。 01项目简介ExcelDataReader是一个功能强大且易于使用的开源项目,提供了丰富的读取API,专门读取Excel文件的数据,特别是处理大数据量的情况。ExcelDataReader......
  • [cisco] NSSA Not-so-stubby stub Areas
    ANSSAisastubareathatcontainsalimitednumberofexternalroutes.ANSSAistheonlyareatypeallowedtouseType7LSAs.It'sahightlyspecializedstubareatypethatyouwon'trunintoeveryday,butyouwillrunintothem. SSA(Not......
  • a-textarea(textarea)出现模糊问题的可能解决方案
    a-textarea(textarea)出现模糊问题的可能解决方案项目介绍:本项目是一个vue3+ant-design-vue4.x开发,是一个客服机器人的组件。其它项目通过iframe+js文件来引入(iframe的内容就是表单,入口按钮是通过js文件进行dom操作创建)。通过js监听页面宽度,然后通过transform来适配不同分辨率......
  • a-textarea(textarea)出现模糊问题的可能解决方案
    a-textarea(textarea)出现模糊问题的可能解决方案项目介绍:本项目是一个vue3+ant-design-vue4.x开发,是一个客服机器人的组件。其它项目通过iframe+js文件来引入(iframe的内容就是表单,入口按钮是通过js文件进行dom操作创建)。通过js监听页面宽度,然后通过transform来适配不同分辨率......
  • 鸿蒙HarmonyOS实战-ArkUI组件(TextInput/TextArea)
    ......