zoukankan      html  css  js  c++  java
  • CodeForces 287B Pipeline

    思路:二分答案,时间复杂度O(nlgn).

    若个数为x,那么算出这种情况下提供的水管的最大值和最小值与n比较即可,注意x个分离器需要减去x-1个水管。

    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define LL long long int
    using namespace std;
    LL n, k;
    LL calSum(LL ba, LL i){
        return ((2*ba + i - 1) * i)/2;
    }
    LL bin_search(LL l, LL r){
        LL ans = 0x7fffffff;
        while(l <= r){
            LL mid = (l + r) >> 1;
            LL up = min(n + mid - 1, k);
            LL tmp1 = calSum(2, mid), tmp2 = calSum(up - mid + 1, mid);
            if(tmp1 <= n + mid - 1 && tmp2 >= n + mid -1){
                ans = min(ans, mid);
                r = mid - 1;
            }
            else if(tmp1 > n + mid - 1) r = mid - 1;
            else if(tmp2 < n + mid - 1) l = mid + 1;
        }
        if(ans != 0x7fffffff) return ans;
        else return -1;
    }
    int main(){
        while(cin >> n >> k){
            if(n == 1) printf("0
    ");
            else cout << bin_search(1, k-1) << endl;
        }
        return 0;
    }
    


  • 相关阅读:
    Django框架-模板层
    Django框架-路由层
    Django流程-以登录功能为例
    常见的MySQL慢查询优化
    函数之二
    python 之 函数
    python 文件操作
    set dict tuple 内置方法
    leetcode
    python 之 数据类型初接触
  • 原文地址:https://www.cnblogs.com/anhuizhiye/p/3933135.html
Copyright © 2011-2022 走看看