AcWing 730. 机器人跳跃问题

题目链接:https://www.acwing.com/problem/content/732/
思路:二分模板
总结:check()函数里面有一个e=2*e-h[i],题目中有1≤N,H(i)≤105,如果不注意的话e就会溢出,long long 也没用,考虑到H(i) ≤ \leq 105,当H(i) ≥ \geq 105,直接返回true;注意考虑题目中的数据量和某些变量的溢出问题

代码:

#include
#include
#include
#include
using namespace std;
const int N=1e5+5;
const int inf=0x3f3f3f3f;
int h[N];
int max_e=-1,n;
bool check(int mid){
	for(int i=0;i<n;i++){
		if(mid>=1e5)return true;
		mid=2*mid-h[i];
		if(mid<0)return 0;
	}
	return 1;
}
int main(){

	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&h[i]);
		max_e=max(max_e,h[i]);
	}
	int l=0, r=max_e;
	while(l<r){
		int mid=(l+r)>>1;
		if(check(mid)) r=mid;
		else l=mid+1;
	}
	cout<<l;
 
	return 0;
}

你可能感兴趣的:(模板变型,基本算法(二分,双指针,离散化))