hihoCoder#1095(二分搜索)
描述
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=;
const int INF=0x3f3f3f3f;
int n,k;
int d[MAXN];
bool test(int T)
{
int cup=;
int hi_score=;
int ho_score=;
for(int i=;i<n;i++)
{
cup+=T;
if(cup<=d[i])
{
hi_score++;
cup=;
}
else
{
ho_score++;
cup-=d[i];
}
}
return ho_score>hi_score;
}
int main()
{
cin>>n>>k;
for(int i=;i<n;i++)
{
cin>>d[i];
}
int l=,r=INF;
while(r-l>)
{
int mid=(l+r)>>;
if(test(mid))
{
r=mid;
}
else
{
l=mid;
}
}
cout<<r<<endl;
return ;
}
最新文章
- C#后台调用公网接口(GET, POST)
- C#算法基础之递归排序
- 读书时间《JavaScript高级程序设计》七:表单
- AOP的成员介绍
- async简单使用
- Git版本控制的基本命令
- 扩展GDAL,支持CNSDTF格式(一)
- 课程设计个人报告——基于ARM实验箱的捕鱼游戏的设计与实现
- 爬虫基础之urllib库
- 从Java到JVM到OS线程睡眠
- go语言打造个人博客系统(一)
- asp.net core发布到linux
- python基础(16)-进程&;线程&;协程
- Telnet的三种登录方式
- Apple ID双重认证验证码无法输入问题
- 构建BSP (boardsupport packet)
- Sa身份登陆SQL SERVER失败的解决方案
- Codeforces Round #279 (Div. 2) 题解集合
- 【android】夜间模式简单实现
- 定义serialVersionUID的作用与意义整理