专栏文章
题解:CF538C Tourist's Notes
CF538C题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miqovgtg
- 此快照首次捕获于
- 2025/12/04 08:19 3 个月前
- 此快照最后确认于
- 2025/12/04 08:19 3 个月前
CF528C 题目传送门
题目大意
一个人出去爬山 天,第 天所在地方的高度为 ,相邻两天的高度之差不超过 。给出部分天数的高度,问这个人在这 天中,所到地方的最高高度是多少?如果根据给出的数据不符合题意描述,即出现相邻两天的高度之差超过 ,输出
IMPOSSIBLE。解决思路
用一个结构体记录天当天高度 和当天天数 。设 为相隔的天数, 为 天相隔的高度差
- 若 ,即相隔的高度比天数大(相邻两天的高度差不超过 ),则不符合题意,直接输出
IMPOSSIBLE; - 否则就符合要求,求出相隔天数中的最大海拔高度就为
ans = max(ans, a[i].h + (hh + dd) / 2)。
最终 即为答案。
代码展示
CPP#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int n, m, ans;
struct node
{
int d, h;
//d记录天数
//h记录高度
}a[N];
int main()
{
scanf("%d%d", &n, &m);//建议scanf,更快
for(int i = 1; i <= m; i++)
scanf("%d%d", &a[i].d, &a[i].h);
ans = a[1].h + a[1].d - 1;
for(int i = 1; i < m; i++)
{
int dd = a[i + 1].d - a[i].d;//相隔天数
int hh = a[i + 1].h - a[i].h;//dd天相隔的高度
if(abs(hh) > dd)
{//相隔的高度比天数大
printf("IMPOSSIBLE\n");
return 0;//建议printf,更快
}
else ans = max(ans, a[i].h + (hh + dd) / 2);
}
ans = max(ans, a[m].h + n - a[m].d);
printf("%d\n", ans);
return 0;//换行是个好习惯
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...