[模拟] aw3629. 同心圆涂色(模拟+水题)
Posted Ypuyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[模拟] aw3629. 同心圆涂色(模拟+水题)相关的知识,希望对你有一定的参考价值。
1. 题目来源
链接:3629. 同心圆涂色
2. 题目解析
模拟,水题。
一个知识点,const double PI = acos(-1);
这就是基本定义。
半径从大到小排序,(r1-r2)^2*PI
就是蓝环面积。
注意输入为 1 的情况,防止数组下标为负的这种 2 逼情况。
输入下标可以从 1 开始,或者按照方法一做,让下标取到 n
。
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)
// 谨防数组越界、禁止下标为负这种 2 逼操作
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
const double PI = acos(-1);
int n;
int s[N];
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i ++ ) scanf("%d", s + i);
sort(s, s + n, greater<int>());
double res = 0;
for (int i = 0; i < n; i += 2) res += (s[i] * s[i] - s[i + 1] * s[i + 1]) * PI;
printf("%.6lf", res);
return 0;
}
// 虽 ac,但是只有一个数据时,i=0,i-1 为负下标...
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
const double PI = acos(-1);
int n;
int s[N];
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i ++ ) scanf("%d", s + i);
sort(s, s + n);
double res = 0;
for (int i = n - 1; i >= 0; i -= 2) res += (s[i] * s[i] - s[i - 1] * s[i - 1]) * PI;
printf("%.6lf", res);
return 0;
}
以上是关于[模拟] aw3629. 同心圆涂色(模拟+水题)的主要内容,如果未能解决你的问题,请参考以下文章
[模拟] aw3694. A还是B(模拟+水题+aw周赛004_1)