codeforces 820 A. Mister B and Book Reading, B. Mister B and Angle in Polygon

本文解析了CodeForces平台上的两道经典算法题,包括模拟看书进度和在正多边形中寻找最接近指定角度的三点组合。通过代码示例详细展示了如何运用数学和逻辑解决这些竞赛题目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值