2016 UESTC Training for Math Problem E- 蹲在墙角画圈圈的愚人王

E - 蹲在墙角画圈圈的愚人王

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

愚人王发现自己也就是条咸鱼了,只能搞(出)搞(出)套路题了。所以膜拜了下final柱后,默默的蹲在墙角画圈圈去了.....

title

他在一个X*Y的矩形框框里画了n个圈圈(圆),然后无聊的向这个矩形中丢石子玩.....

突然,他灵(临)光(时)一(脑)闪(抽)!

他突然非常想知道,如果每次丢一个石子得到的分数为被覆盖的圆的数量的平方的话,那么得到的分数的数学期望是啥?!

嗯,他假设:石子是无限小的一个个的点;X,Y,圆的坐标和半径都是整数;所有的圆都在矩形框框中。

脑补半响后,他惊呼:“这道题太难了,根本不会做呀......“

机智的您,请帮愚人王解决一下这个问题吧.....

Input

第一行,n表示圈圈的个数。

0<=n<=1000;

第二行,X,Y

1<=X,Y<=1000

后面n行,每行三个整数x y r表示第i个圆的圆心坐标和半径。保证圆在矩形内部。

Output

一行,表示分数的期望。没有spj,结果请保留三位小数.

解题思路:

解题思路:

期望=每个区域覆盖次数的平方*(区域面积/总面积);

利用二次项展开,例如:(A+B+C)^2=(A*A+B*B+C*C+A*B+B*A+A*C+C*A+B*C+C*B);

乘号代表面积求交;我们可以发现这样计算每个区域的面积正好被计算了被覆盖次数的平方次;

代码:

#include<bits/stdc++.h>
using namespace std;
struct node{
	int x,y,r;
}cir[1001];//保存圆的圆心坐标,半径; 
double cross(int x1,int y1,int r1,int x2,int y2,int r2)//求圆面积交,其中用到余弦定理,算出两个扇形的和减去多边形的面积; 
{
	double d=pow(x1-x2,2)+pow(y1-y2,2);
	if(d<=pow(r1-r2,2))
	{
		return pow(min(r1,r2),2)*M_PI;
	}
	else if(d>pow(r1-r2,2)&&d<pow(r1+r2,2))
	{
		double m1=(r1*r1+d-r2*r2)/(2*r1*sqrt(d));
		double m2=(r2*r2+d-r1*r1)/(2*r2*sqrt(d));
		double s1=acos(m1)*r1*r1;
		double s2=acos(m2)*r2*r2;
		double s3=sqrt(d)*r1*sin(acos(m1));
		return s1+s2-s3;
	}
	else
	return 0;
}
int main()
{
	int n,x,y,i,j;
	double sum=0;
	scanf("%d%d%d",&n,&x,&y);
	for(i=0;i<n;i++)
	scanf("%d%d%d",&cir[i].x,&cir[i].y,&cir[i].r);
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
		sum+=cross(cir[i].x,cir[i].y,cir[i].r,cir[j].x,cir[j].y,cir[j].r);//枚举求交; 
	printf("%.3f",sum/(x*y));
}

原本还想用圆的离散化的,那样太麻烦了,其实这样做30+行搞定;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
大学生在线租房平台管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、报修评价管理、字典管理、房东管理、房屋管理、房屋收藏管理、房屋留言管理、房屋租赁管理、租房论坛管理、公告信息管理、留言板管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 大学生在线租房平台管理系统可以提高大学生在线租房平台信息管理问题的解决效率,优化大学生在线租房平台信息处理流程,保证大学生在线租房平台信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理大学生在线租房平台信息,包括房屋管理,培训管理,报修管理,薪资管理等,可以管理公告。 房屋管理界面,管理员在房屋管理界面中可以对界面中显示,可以对房屋信息的房屋状态进行查看,可以添加新的房屋信息等。报修管理界面,管理员在报修管理界面中查看报修种类信息,报修描述信息,新增报修信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值