題目大意:你在爬山,總共有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");
}
}