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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章