zoukankan      html  css  js  c++  java
  • hihoCoder#1095(二分搜索)

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    Little Hi and Little Ho are playing a drinking game called HIHO. The game comprises N rounds. Each round, Little Hi pours T milliliter of water into Little Ho's cup then Little Ho rolls a K-faces dice to get a random number d among 1 to K. If the remaining water in Little Ho's cup is less than or equal to d milliliter Little Hi gets one score and Little Ho drinks up the remaining water, otherwise Little Ho gets one score and Little Ho drinks exactly d milliliter of water from his cup. After N rounds who has the most scores wins.

    Here comes the problem. If Little Ho can predict the number d of N rounds in the game what is the minimum value of T that makes Little Ho the winner? You may assume that no matter how much water is added, Little Ho's cup would never be full.

    输入

    The first line contains N(1 <= N <= 100000, N is odd) and K(1 <= K <= 100000).
    The second line contains N numbers, Little Ho's predicted number d of N rounds.

    输出

    Output the minimum value of T that makes Little Ho the winner.

    样例输入
    5 6
    3 6 6 2 1
    样例输出
    4

    思路:求最值时考虑使用二分搜索。
    #include <iostream>
    using namespace std;
    const int MAXN=100005;
    const int INF=0x3f3f3f3f;
    int n,k;
    int d[MAXN];
    bool test(int T)
    {
        int cup=0;
        int hi_score=0;
        int ho_score=0;
        for(int i=0;i<n;i++)
        {
            cup+=T;
            if(cup<=d[i])
            {
                hi_score++;
                cup=0;
            }
            else
            {
                ho_score++;
                cup-=d[i];
            }
        }
        return ho_score>hi_score;
    }
    int main()
    {
        cin>>n>>k;
        for(int i=0;i<n;i++)
        {
            cin>>d[i];
        }
        int l=0,r=INF;
        while(r-l>1)
        {
            int mid=(l+r)>>1;
            if(test(mid))
            {
                r=mid;
            }
            else
            {
                l=mid;
            }
        }
        cout<<r<<endl;
        return 0;
    }
  • 相关阅读:
    音乐播放器
    滚动视图、定时器、分页控件的综合使用
    简易拼图
    IOS开发复习笔记(1)-OC基础知识
    64位matlab mex64位编译器解决方案
    LibSvm添加到Matlab
    code first 数据库无损迁移
    asp.net mvc4连接mysql
    自定义控件引用时候尺寸发生变化
    jquery 操作动态添加的元素
  • 原文地址:https://www.cnblogs.com/program-ccc/p/5729375.html
Copyright © 2011-2022 走看看