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
#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");
	}
}


你可能感兴趣的:(ACM_CF)