我是靠谱客的博主 烂漫月亮,最近开发中收集的这篇文章主要介绍CodeForce 814D 贪心,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

可以发现规律,如果一个圆被内含或内切(也就是说,这个圆是小圆,被一个大圆内含或内切)的次数是奇数次,那么答案ans需要加上这个圆的面积,else答案ans需要减去这个圆的面积。然后照着这个思想写下去就好了。

注意结尾的时候控制8位小数的精度,precision自动四舍五入。

#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const double EPS = 1e-9;
const int maxv = 1010;
int visit[maxv];
struct Node {
double x, y, r;
} node[maxv];
bool solve(int i, int j) {
double dist_square = pow(node[i].x - node[j].x, 2.0) + pow(node[i].y - node[j].y, 2.0);
double R_plus_r_square = pow(node[i].r - node[j].r, 2.0);
if (dist_square - R_plus_r_square <=EPS && node[i].r > node[j].r)//两圆内切加内含的条件为d<=(R+r)
return true;
return false;
}
int main(void) {
int n;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> node[i].x >> node[i].y >> node[i].r;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
if (i == j)
continue;
if (solve(i, j)) //判断j是不是小圆且被i内含
visit[j]++;
}
double ans = 0.0;
for (int i = 1; i <= n; i++) {
if (visit[i] == 0 || visit[i] % 2 == 1)
ans += PI * pow(node[i].r, 2.0);
else
ans -= PI * pow(node[i].r, 2.0);
}
cout << fixed << setprecision(8) << ans << endl;
return 0;
}

 

最后

以上就是烂漫月亮为你收集整理的CodeForce 814D 贪心的全部内容,希望文章能够帮你解决CodeForce 814D 贪心所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部