A. Mister B and Book Reading
题目链接:codeforces 802A
题意:
看书,一本书有 c 页,初始每天看 v0 页,然后 每天比前一天多看 a 页,一天最多看 v1 页,如果没看完,复习 L 页,问多少天看完这本书
题解: 模拟
#include<bits/stdc++.h>
using namespace std;
int main(){
int c, v0, v1, a, l, ans = 0;
cin >> c >> v0 >> v1 >> a >> l;
for(int i = 0; i <= c;){
i = i + v0;
if(v0 < v1){
v0 = v0 + a;
}
if(v0 > v1){
v0 = v1;
}
ans++;
if(i >= c){
break;
}
i = i - l;
}
cout << ans << endl;
return 0;
}
B. Mister B and Angle in Polygon(几何,多边形,思维,精度)
题目链接 :codeforces 820 B
题意:
给出n,a。n代表正n边形,问哪三个点组成的角最接近a
题解:
由于是正多边形,所以从一点出发,和其他各点连成的角度相同,所以要求的角度就是一个角的倍数
举例 正三角形的角都为 60度
正四边形的角度为 45,90
正五边形的角度为 36,72,108
所以只要看最小角的倍数最接近a 即可
把点1放中间,点2 当一个邻边,求第三个点
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
double n, a;
cin >> n >> a;
int ans = 3;
double k = 180.0 / n; // 最小角
double tmp = abs(a - k);
for(int i = 3; i <= n; i++){
double tmp2 = abs((i-2)*k - a);
if (tmp - tmp2 > 1e-9){ // double 类型的比较
tmp = tmp2;
ans = i;
}
}
cout << ans << " 1 2" << endl; // 注意顺序
return 0;
}