题目大意:你在爬山,总共有n个时刻,在hi高度.
每次你可以选择不动,或者向上1或者向下1.
现在给你最多高的时刻n,以及中间的m个记录表示该时刻在多少海拔.
问在1-n内,处于的可能的最大海拔是多少.
思路就不说了,只要遍历,检查这个时刻与上一个时刻否成立,方法看代码吧.
这边说一下坑点.
最大的坑点是一开始是多少高度是不确定的,
假如第一个数据是a,b
则一开始所处的最好的高度为b+a-1;
这个注意的就差不多了.
或者你在注意一下结尾,判断一下就ok
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#include
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");
}
}