专栏文章

题解:CF538C Tourist's Notes

CF538C题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqovgtg
此快照首次捕获于
2025/12/04 08:19
3 个月前
此快照最后确认于
2025/12/04 08:19
3 个月前
查看原文

CF528C 题目传送门

题目大意

一个人出去爬山 nn 天,第 ii 天所在地方的高度为 hh,相邻两天的高度之差不超过 11。给出部分天数的高度,问这个人在这 nn 天中,所到地方的最高高度是多少?如果根据给出的数据不符合题意描述,即出现相邻两天的高度之差超过 11,输出 IMPOSSIBLE

解决思路

用一个结构体记录天当天高度 hh 和当天天数 dd。设 dddd 为相隔的天数,hhhhdddd 天相隔的高度差
  • hh>ddhh>dd,即相隔的高度比天数大(相邻两天的高度差不超过 11),则不符合题意,直接输出 IMPOSSIBLE
  • 否则就符合要求,求出相隔天数中的最大海拔高度就为 ans = max(ans, a[i].h + (hh + dd) / 2)
最终 ansans 即为答案。

代码展示

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 条评论,欢迎与作者交流。

正在加载评论...