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 班级聚会上的游戏相关推荐

  1. HHUOJ 1887 班级聚会上的游戏

    HHUOJ 1887 班级聚会上的游戏 题目描述 前不久小明所在的班级为了庆祝在运动会上夺得第一名,开了一场班级聚会.在聚会上大家玩了这样一个游戏: 在地上放一个圆形硬纸片,然后参加游戏的人手里拿一个 ...

  2. 大学小说男主计算机,一部小说,男女主是大学校友,男主比较高冷,一次聚会上认识,男主对女主一见钟情,然后带去出租屋里睡了...

    一部小说,男女主是大学校友,男主比较高冷,一次聚会上认识,男主对女主一见钟情,然后带去出租屋里睡了,一.一部小说,男女主是大学校友,男主比较高冷,一次聚会上认识,男主对女主一见钟情,然后带去出租屋里睡 ...

  3. P1293 班级聚会洛谷c++题解

    P1293 班级聚会 题目描述 毕业25年以后,我们的主人公开始准备同学聚会.打了无数电话后他终于搞到了所有同学的地址.他们有些人仍在本城市,但大多数人分散在其他的城市.不过,他发现一个巧合,所有地址 ...

  4. 洛谷 P1293 班级聚会

    P1293 班级聚会 题目描述 毕业25年以后,我们的主人公开始准备同学聚会.打了无数电话后他终于搞到了所有同学的地址.他们有些人仍在本城市,但大多数人分散在其他的城市.不过,他发现一个巧合,所有地址 ...

  5. 班级聚会(reunion)

    本题连接 http://59.61.75.5:8888/JudgeOnline/showproblem?problem_id=1589 班级聚会 2010-10-31普及模拟赛(reunion) Ti ...

  6. c语言派对游戏,适合5,6人聚会玩的游戏

    适合5,6人聚会玩的游戏 导语:5,6人聚会时玩什么游戏好呢?下面就由jy135小编给大家带来一些适合5,6人聚会玩的游戏,希望大家喜欢. 适合5,6人聚会玩的游戏 适合5,6人聚会玩的游戏--喝水传 ...

  7. 在通知栏上玩游戏,Steve iOS 游戏实现思路

    在通知栏上玩游戏,Steve iOS 游戏实现思路 最近有一款游戏特别的火爆,叫做Steve ,一种可以在通知中心直接玩的游戏.作者的脑洞也是非常的大,实在让人佩服.其实实现起来也简单,就是用到了iO ...

  8. 《为iPad而设计:打造畅销App》——想象iPad上的游戏

    本节书摘来自异步社区<为iPad而设计:打造畅销App>一书中的想象iPad上的游戏,作者[英]Chris Stevens,更多章节内容可以访问云栖社区"异步社区"公众 ...

  9. 060031班第一次班级聚会

    060031第一次班级聚会 (2008.8.2) 1.活动内容和时间安排: 2.人员 参加此次活动的人员有以下几部分人组成: 1)  本班原有成员 2)  成员家属 3)  对本班有感情的所有个人和团 ...

最新文章

  1. 对称密码获取(OJ)
  2. linux go语言环境配置文件,linux下安装配置go语言环境
  3. 第十一章 AtomicInteger源码解析
  4. CSDN 独家对话阿里云贾扬清、华先胜等大咖,剧透阿里云原生技术密码
  5. Android 返回键的处理
  6. CUDA ---- Hello World From GPU
  7. Vue源码分析 - compile.js
  8. php strcmp bypass漏洞
  9. 拓端tecdat|R语言惩罚logistic逻辑回归(LASSO,岭回归)高维变量选择的分类模型案例
  10. 一篇关于原生 js 开发一款插件的前端教程
  11. 医院耗材管理系统开发_4
  12. 网页视频播放器代码大全 + 21个为您的网站和博客提供的免费视频播放器
  13. GT S7278 Android4.4,三星S7278U官方原版固件rom系统刷机包(线刷格式)
  14. 2018年终总结--修身篇
  15. TARA从3.4.1更新到3.5.7后项目运行出现app.js错误: TypeError: Cannot read property ‘isBatchingLegacy‘ of undefined
  16. 【C++】 文件提取英文单词
  17. 学做一点吃食烤面包虾粥
  18. 基于语音的疲劳度检测算法研究
  19. java srs 推流_srs推流服务器部署
  20. CS0533隐藏继承的抽条成员/CS0534不实现继承的抽象成员

热门文章

  1. Qpython教程和软件下载(Android手机学习python的平台利器)
  2. “万丈高楼平地起,编程学习要趁早”
  3. 斜杠【/】 与 反斜杠【\】
  4. office2016选中、编辑突然变慢
  5. Python - 面向对象编程 - 实战(4)
  6. 多CPU 多核CPU | 多进程 多线程 | 并行 并发
  7. 机器学习 —— Bagging算法
  8. 视频号如何给账号定位,如何做好视频号的定位
  9. 一步一步学RenderMonkey
  10. Java如何设置word中某段文字的字体/段落样式