zoukankan      html  css  js  c++  java
  • 730. 机器人跳跃问题

    #include<iostream>
    using namespace std;
    
    /*
    e > h[k + 1],跳到k + 1 塔上的能量:e + e - h[k + 1] = 2 * e - h[k + 1]
    e <= h[k + 1], 跳到k + 1 塔上的能量:e - (h[k + 1] - e) = 2 * e - h[k + 1]
    
    二分范围:
    如果初始能量e0 >= max(h[0 ~ n - 1]) 那么一定可以满足中间不出现能量小于0的情况,并且e全程都在增加
    由于max(h[0 ~ n - 1]) <= 100000
    所以二分范围为1 ~ 1e5
    
    单调性:
    如果一个e0满足,那么所有>= e0的值都满足, 要求e0的最小值
    */
    
    const int N = 100010;
    
    int h[N], n;
    
    int check(int mid){
        for(int i = 0; i < n; i ++){
            mid = mid * 2 - h[i];
            if(mid >= 1e5) return 1;
            if(mid < 0) return 0;
        }
        return 1;
    }
    
    int main(){
        cin >> n;
        
        for(int i = 0; i < n; i ++) cin >> h[i];
        
        int l = 1, r = 1e5;
        
        while(l < r){
            int mid = l + r >> 1;
            if(check(mid)) r = mid;
            else l = mid + 1;
        }
        
        cout << l << endl;
        
        return 0;
    }
    
  • 相关阅读:
    Java 日期 Api
    Java 基础-反射
    Java 基础-运算符
    Android findBugs
    java-基础练习题3
    java-基础练习题2
    java-基础练习题1
    java-基础练习题
    Java IO 遇到的错误
    Android测试框架-uiautomator
  • 原文地址:https://www.cnblogs.com/tomori/p/13582719.html
Copyright © 2011-2022 走看看