题目链接 codeforces 140 A
题意
给出n个盘子,桌子半径R,盘子半径r,问能否全部放下
题解:
求圆心角,然后用 2 * PI / 圆心角 大于盘子数量则能放下
注意精度问题,刚开始以为盘子数量是整数,所以对所求值取整和盘子数量比,错,因为计算过程中会有精度损失
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e7+100;
int main(){
int n, R, r;
cin >> n >> R >> r;
double angle = 2 * asin(r*1.0/(R-r)); // 圆心角
double PI = atan2(0, -1); // PI 值
if(R < r){ // 盘子半径大于桌子半径
cout << "NO" << endl;
}
else if(n == 1 && r <= R){ // 只有一个盘子并且盘子半径小于等于桌子半径
cout << "YES" << endl;
}
else if(2 * PI - angle * n > -1e-10){ // 取精度,这里不是大于0
cout << "YES" << endl;
}
else{
cout << "NO" << endl;
}
return 0;
}