acmclub 2081 班级聚会上的游戏
acmclub 2081 班级聚会上的游戏(天勤考研算法练习赛(5))
题目链接:http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=2801
计算几何
题目分析:刨去内含和相离两种特殊情况,剩下的就是求两扇形面积和减去大四边形面积了。圆心角用反三角函数来求,精度是个坑。
code:
#include<stdio.h>
#include<math.h>
#define PI acos(-1)
int main()
{double c1,c2,r1,r2,c,h,x1,x2,y1,y2,p;while(scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&r1,&x2,&y2,&r2)!=EOF){c=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));if(r1<r2)h=r1,r1=r2,r2=h;//保证r1总是大的if(r1>=c+r2){printf("%.3f\n",PI*r2*r2);continue;}//内切||内含 if(r1+r2<=c){printf("0.000\n");continue;}//外切||相离 p=(r1+r2+c)/2;//海伦公式里的p,这用的海伦公式 h=sqrt(p*(p-r1)*(p-r2)*(p-c))*2/c;//printf("%f\n",h);c1=sqrt(r1*r1-h*h);c2=c-c1;if(r1*r1<r2*r2+c*c)printf("%.3f\n",asin(h/r1)*r1*r1+asin(h/r2)*r2*r2-c*h);elseprintf("%.3f\n",(PI-asin(h/r2))*r2*r2+asin(h/r1)*r1*r1-c*h);//double a1=acos((r1*r1+c*c-r2*r2)/(2.0*r1*c));//double a2=acos((r2*r2+c*c-r1*r1)/(2.0*r2*c));//printf("%.3f\n",a1*r1*r1+a2*r2*r2-r1*c*sin(a1));}return 0;
}
PS:我用的海伦公式求得面积,再通过面积求高;注释掉的那种方法用的是余弦定理直接求角,也能A。
PPS:一开始π定义的3.14159265,wrong死了,直到最后也没发现是wrong在这里,标程上定义的是acos(-1),能过,我后来又改成小数点后16位,也过了……
附标程:
#include <stdio.h>
#include <math.h>const double eps = 1e-8;
const double pi = acos(-1);double x[2], y[2], r[2];double dis(double x1, double y1, double x2, double y2) {return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}double fusiform(double a, double c, double b) {double angle = acos((a * a + b * b - c * c) / (2 * a * b)) * 2;double s1 = a * a * pi * (angle / (2 * pi));double s2 = a * a * sin(angle) / 2;return s1 - s2;
}double common(double x1, double y1, double r1, double x2, double y2, double r2) {double d = dis(x1, y1, x2, y2);if (d + eps >= r1 + r2)return 0;if (d - eps <= fabs(r1 - r2)) {if (r1 > r2)return pi * r2 * r2;elsereturn pi * r1 * r1;}return fusiform(r1, r2, d) + fusiform(r2, r1, d);
}int main() {while (scanf("%lf%lf%lf%lf%lf%lf", &x[0], &y[0], &r[0], &x[1], &y[1], &r[1]) != EOF)printf("%.3lf\n", common(x[0], y[0], r[0], x[1], y[1], r[1]));return 0;
}
acmclub 2081 班级聚会上的游戏相关推荐
- HHUOJ 1887 班级聚会上的游戏
HHUOJ 1887 班级聚会上的游戏 题目描述 前不久小明所在的班级为了庆祝在运动会上夺得第一名,开了一场班级聚会.在聚会上大家玩了这样一个游戏: 在地上放一个圆形硬纸片,然后参加游戏的人手里拿一个 ...
- 大学小说男主计算机,一部小说,男女主是大学校友,男主比较高冷,一次聚会上认识,男主对女主一见钟情,然后带去出租屋里睡了...
一部小说,男女主是大学校友,男主比较高冷,一次聚会上认识,男主对女主一见钟情,然后带去出租屋里睡了,一.一部小说,男女主是大学校友,男主比较高冷,一次聚会上认识,男主对女主一见钟情,然后带去出租屋里睡 ...
- P1293 班级聚会洛谷c++题解
P1293 班级聚会 题目描述 毕业25年以后,我们的主人公开始准备同学聚会.打了无数电话后他终于搞到了所有同学的地址.他们有些人仍在本城市,但大多数人分散在其他的城市.不过,他发现一个巧合,所有地址 ...
- 洛谷 P1293 班级聚会
P1293 班级聚会 题目描述 毕业25年以后,我们的主人公开始准备同学聚会.打了无数电话后他终于搞到了所有同学的地址.他们有些人仍在本城市,但大多数人分散在其他的城市.不过,他发现一个巧合,所有地址 ...
- 班级聚会(reunion)
本题连接 http://59.61.75.5:8888/JudgeOnline/showproblem?problem_id=1589 班级聚会 2010-10-31普及模拟赛(reunion) Ti ...
- c语言派对游戏,适合5,6人聚会玩的游戏
适合5,6人聚会玩的游戏 导语:5,6人聚会时玩什么游戏好呢?下面就由jy135小编给大家带来一些适合5,6人聚会玩的游戏,希望大家喜欢. 适合5,6人聚会玩的游戏 适合5,6人聚会玩的游戏--喝水传 ...
- 在通知栏上玩游戏,Steve iOS 游戏实现思路
在通知栏上玩游戏,Steve iOS 游戏实现思路 最近有一款游戏特别的火爆,叫做Steve ,一种可以在通知中心直接玩的游戏.作者的脑洞也是非常的大,实在让人佩服.其实实现起来也简单,就是用到了iO ...
- 《为iPad而设计:打造畅销App》——想象iPad上的游戏
本节书摘来自异步社区<为iPad而设计:打造畅销App>一书中的想象iPad上的游戏,作者[英]Chris Stevens,更多章节内容可以访问云栖社区"异步社区"公众 ...
- 060031班第一次班级聚会
060031第一次班级聚会 (2008.8.2) 1.活动内容和时间安排: 2.人员 参加此次活动的人员有以下几部分人组成: 1) 本班原有成员 2) 成员家属 3) 对本班有感情的所有个人和团 ...
最新文章
- 对称密码获取(OJ)
- linux go语言环境配置文件,linux下安装配置go语言环境
- 第十一章 AtomicInteger源码解析
- CSDN 独家对话阿里云贾扬清、华先胜等大咖,剧透阿里云原生技术密码
- Android 返回键的处理
- CUDA ---- Hello World From GPU
- Vue源码分析 - compile.js
- php strcmp bypass漏洞
- 拓端tecdat|R语言惩罚logistic逻辑回归(LASSO,岭回归)高维变量选择的分类模型案例
- 一篇关于原生 js 开发一款插件的前端教程
- 医院耗材管理系统开发_4
- 网页视频播放器代码大全 + 21个为您的网站和博客提供的免费视频播放器
- GT S7278 Android4.4,三星S7278U官方原版固件rom系统刷机包(线刷格式)
- 2018年终总结--修身篇
- TARA从3.4.1更新到3.5.7后项目运行出现app.js错误: TypeError: Cannot read property ‘isBatchingLegacy‘ of undefined
- 【C++】 文件提取英文单词
- 学做一点吃食烤面包虾粥
- 基于语音的疲劳度检测算法研究
- java srs 推流_srs推流服务器部署
- CS0533隐藏继承的抽条成员/CS0534不实现继承的抽象成员