zoukankan      html  css  js  c++  java
  • UVA846 Steps 二分查找

    不管你是怎么做的,反正我是用二分做的,相当于做了一个预处理。一个最优的序列一定是 1 2 3 .. N .. 3 2 1,或者是 1 2 3 .. N N .. 3 2 1.

    代码如下:

    #include <cstdlib>
    #include <cstdio>
    using namespace std;
    
    long long rec[131100], a, b;
    
    void pre()
    {
        rec[1] = 1;
        long long LIM = 1LL << 32, base = 1;
        int i;
        for (i = 2; rec[i-1] <= LIM; ++i)    {
            rec[i] = rec[i-1] + base;
            if (!(i & 1)) base++;
        } 
    }
    
    int bsearch(int l, int r, long long val)
    {
        int mid, ret;
        while (l <= r) {
            mid = (l + r) >> 1;
            if (rec[mid] > val) {
                ret = mid;
                r = mid - 1;
            }
            else if (rec[mid] < val) {
                l = mid + 1;    
            }
            else {
                ret = mid;
                break;    
            }
        }
        return ret;
    }
    
    int main()
    {
        pre();
        int T;
        scanf("%d", &T);
        while (T--) {
            scanf("%I64d %I64d", &a, &b);
            if (a == b) {
                puts("0");
                continue;
            }
            printf("%d\n", bsearch(1, 131072, b-a));
        }
        return 0;    
    }
  • 相关阅读:
    div显示和隐藏
    C语言求素数的算法
    日志分析概述
    Base64编码 概念和用途
    leetcode
    hdu2665-Kth number
    为什么要新加入的人不闻不问?
    实现微博@@@
    JAVA运行程序代码段
    IfSpeed 带宽计算
  • 原文地址:https://www.cnblogs.com/Lyush/p/2646892.html
Copyright © 2011-2022 走看看