题意:

给定一个圆的圆心和一个矩形的左下方坐标和右上方坐标, 除圆的半径之外的 666 个数据均
在−1000-1000−1000 到 100010001000 范围内, 圆的半径在 111 到 100010001000 范围。 求圆与矩形相交的面积。
计算几何,求圆和凸多边形的相交面积模板。

AC代码:

#include <bits/stdc++.h>
#define inf 1000000000000
#define M 100009
#define eps 1e-12
#define PI acos(-1.0)
using namespace std;
struct Point
{double x, y;Point() {}Point(double xx, double yy){x = xx;y = yy;}Point operator-(Point s) { return Point(x - s.x, y - s.y); }Point operator+(Point s) { return Point(x + s.x, y + s.y); }double operator*(Point s) { return x * s.x + y * s.y; }double operator^(Point s) { return x * s.y - y * s.x; }
} p[M];
double max(double a, double b) { return a > b ? a : b; }
double min(double a, double b) { return a < b ? a : b; }
double len(Point a) { return sqrt(a * a); }
double dis(Point a, Point b) { return len(b - a); } //Á½µãÖ®¼äµÄ¾àÀë
double cross(Point a, Point b, Point c)             //²æ³Ë
{return (b - a) ^ (c - a);
}
double dot(Point a, Point b, Point c) //µã³Ë
{return (b - a) * (c - a);
}
int judge(Point a, Point b, Point c) //ÅжÏcÊÇ·ñÔÚabÏ߶ÎÉÏ£¨Ç°ÌáÊÇcÔÚÖ±ÏßabÉÏ£©
{if (c.x >= min(a.x, b.x) && c.x <= max(a.x, b.x) && c.y >= min(a.y, b.y) && c.y <= max(a.y, b.y))return 1;return 0;
}
double area(Point b, Point c, double r)
{Point a(0.0, 0.0);if (dis(b, c) < eps)return 0.0;double h = fabs(cross(a, b, c)) / dis(b, c);if (dis(a, b) > r - eps && dis(a, c) > r - eps) //Á½¸ö¶Ëµã¶¼ÔÚÔ²µÄÍâÃæÔò·ÖΪÁ½ÖÖÇé¿ö{double angle = acos(dot(a, b, c) / dis(a, b) / dis(a, c));if (h > r - eps)return 0.5 * r * r * angle;else if (dot(b, a, c) > 0 && dot(c, a, b) > 0){double angle1 = 2 * acos(h / r);return 0.5 * r * r * fabs(angle - angle1) + 0.5 * r * r * sin(angle1);}elsereturn 0.5 * r * r * angle;}else if (dis(a, b) < r + eps && dis(a, c) < r + eps)return 0.5 * fabs(cross(a, b, c)); //Á½¸ö¶Ëµã¶¼ÔÚÔ²ÄÚµÄÇé¿öelse                                   //Ò»¸ö¶ËµãÔÚÔ²ÉÏÒ»¸ö¶ËµãÔÚÔ²ÄÚµÄÇé¿ö{if (dis(a, b) > dis(a, c))swap(b, c); //ĬÈÏbÔÚÔ²ÄÚif (fabs(dis(a, b)) < eps)return 0.0; //ab¾àÀëΪ0Ö±½Ó·µ»Ø0if (dot(b, a, c) < eps){double angle1 = acos(h / dis(a, b));double angle2 = acos(h / r) - angle1;double angle3 = acos(h / dis(a, c)) - acos(h / r);return 0.5 * dis(a, b) * r * sin(angle2) + 0.5 * r * r * angle3;}else{double angle1 = acos(h / dis(a, b));double angle2 = acos(h / r);double angle3 = acos(h / dis(a, c)) - angle2;return 0.5 * r * dis(a, b) * sin(angle1 + angle2) + 0.5 * r * r * angle3;}}
}
int main()
{int n = 4;double rx, ry, R;scanf("%lf%lf%lf", &rx, &ry, &R);scanf("%lf%lf%lf%lf", &p[1].x, &p[1].y, &p[3].x, &p[3].y);p[2].x = p[1].x;p[2].y = p[3].y;p[4].x = p[3].x;p[4].y = p[1].y;p[5] = p[1];Point O(rx, ry);for (int i = 1; i <= n + 1; i++)p[i] = p[i] - O;O = Point(0, 0);double sum = 0;for (int i = 1; i <= n; i++){int j = i + 1;double s = area(p[i], p[j], R);if (cross(O, p[i], p[j]) > 0)sum += s;elsesum -= s;}printf("%.4lf\n", fabs(sum));
}

CTU Open Contest 2019 C. Beer Coasters(计算几何)相关推荐

  1. CTU Open Contest 2019

    A. Beer Barrels 题意:给出四个整数:A,B,K,C,A,B,C 都是大于 0 的个位数,问在所有仅由 A 或 B 组成的 K 位数中(K 位数的每一位都是 A 或 B),数字 C 的个 ...

  2. CTU Open Contest 2019 计蒜客重现补题报告

    个人总结 寒假过完的第一场比赛,总是有很多问题.主要有以下两点:一是寒假做题有点依赖翻译,看不下去很长的英文题面,导致这次比赛的一些题目看很长时间也没看懂.二是发现了自己的做题量仍然很少,很多题目缺乏 ...

  3. Beer Coasters

    Beer Coasters 计算几何,求圆和凸多边形的相交面积模板. Beer Coasters Often, in an average pub, the beer is served in a m ...

  4. 2021年度训练联盟热身训练赛第二场(ICPC North Central NA Contest 2019,南阳师范学院),签到题ABCDEFGIJ

    A. Binarize It,简单枚举 链接:https://ac.nowcoder.com/acm/contest/12794/A 来源:牛客网 题目描述 Professor Boolando ca ...

  5. HZNU Training 4 for Zhejiang Provincial Collegiate Programming Contest 2019

    今日这场比赛我们准备的题比较全面,二分+数论+最短路+计算几何+dp+思维+签到题等.有较难的防AK题,也有简单的签到题.为大家准备了一份题解和AC代码. A - Meeting with Alien ...

  6. Central Europe Regional Contest 2019 J. Saba1000kg (并查集+根号讨论)

    链接:https://ac.nowcoder.com/acm/contest/7817/I 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524 ...

  7. 2018 Benelux Algorithm Programming Contest (BAPC 18) J-Janitor Troubles(计算几何公式)

    思路来源 https://www.cnblogs.com/elpsycongroo/p/6777584.html 题意 给四条边边长,保证一定可以构成一个四边形. 问其构成最大的四边形的面积. 题解 ...

  8. Helvetic Coding Contest 2019 online mirror (teams allowed, unrated)

    http://codeforces.com/contest/1184 A1 找一对整数,使x^x+2xy+x+1=r 变换成一个分式,保证整除 #include<iostream> #in ...

  9. Yahoo Programming Contest 2019 F - Pass

    传送门 题目大意 给定一个只包含012序列,0表示这个人有2个红球,1表示一个红球一个蓝球,2表示两个蓝球.进行n*2次游戏,每次游戏所有有球的人选择一个球递给前一个人,第一个人把球放到一个序列中,' ...

  10. 2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem C. Equivalent Cards 计算几何

    Problem C. Equivalent Cards 题目连接: http://www.codeforces.com/gym/100253 Description Jane is playing a ...

最新文章

  1. C语言实例第1期:十进制数转换二进制数
  2. android后台截屏实现(3)--编译screencap
  3. 可再生能源建设提速 风电光伏业高景气可期
  4. 5-32 说反话-加强版
  5. sublime多行变一行及sublime一键格式化html/css/js、光标快捷键移动行首行尾、删除空行
  6. socket-Java
  7. 关于线上问题处理心得分享
  8. python 城市地图_使用底图获取城市地图的最佳方法? - python
  9. 有爱无碍,科技为他们点亮漫天星光
  10. 数据库课程设计基础需求
  11. matlab三角函数用法
  12. C/C++程序设计题
  13. 抖音无水印视频批量下载助手
  14. 拼多多订单详情接口订单同步接口
  15. 【论文】360-aware saliency estimation with conventional image saliency predictors阅读笔记
  16. 生动的ajax图片显示效果,LightBox
  17. 华为智慧屏 鸿蒙如何,抛开鸿蒙 华为智慧屏V65作为电视合格吗?
  18. wxwork和wx.qy判断企业微信小程序编译运行环境
  19. Union can only be performed on tables with the compatible column types
  20. java对数字证书的验证_JAVA对数字证书的常用操作

热门文章

  1. ipa包瘦身之图片无损压缩瘦身
  2. 【练习】基于Vue全家桶的仿小米商城系统
  3. Oracle学习3:dual详解
  4. 谈谈我职业生涯中的三次潦倒 Leo病中的思考 续
  5. 网站SEO的七个技巧
  6. PowerBuilder -- 条码打印
  7. [转]“荒”是民工用脚投票的权利自救
  8. 七夕情人节送什么礼物给女朋友?音质好的蓝牙耳机推荐
  9. 天才小毒妃 第917章 深藏不露大财主
  10. 通过css布局实现去掉window.print()打印界面的页眉页脚