CodeForces 538C Tourist's Notes (简单题)

题目大意:你在爬山,总共有n个时刻,在hi高度.

每次你可以选择不动,或者向上1或者向下1.

现在给你最多高的时刻n,以及中间的m个记录表示该时刻在多少海拔.

问在1-n内,处于的可能的最大海拔是多少.

思路就不说了,只要遍历,检查这个时刻与上一个时刻否成立,方法看代码吧.

这边说一下坑点.

最大的坑点是一开始是多少高度是不确定的,

假如第一个数据是a,b

则一开始所处的最好的高度为b+a-1;

这个注意的就差不多了.

或者你在注意一下结尾,判断一下就ok

#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
int main()
{
	int n, m;
	while (~scanf("%d%d", &n, &m))
	{
		bool flag = true;
		int a, b;
		int prea=0, preb=0;
		int res = 0;
		int ans = 0;
		scanf("%d%d", &prea, &preb);
		ans = preb + prea - 1;
		m--;
		while (m--)
		{
			scanf("%d%d", &a, &b);
			if (abs(b - preb) > a - prea)
				flag = false;
			if (flag)
			{
				int disd = a - prea;
				int dish =b - preb;
				if (dish >=0)
				{
					res = preb + dish;
					disd -= dish;
					res += disd / 2;
					ans = max(ans, res);
				}
				else
				{
					disd += dish;
					res= preb+disd / 2;
					ans = max(ans, res);
				}
				
			}
			prea = a;
			preb = b;
		}
		if (flag)
		{
			preb += n - prea;
			ans = max(ans, preb);
		}
		if (flag)
			printf("%d\n", ans);
		else
			puts("IMPOSSIBLE");
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值