[hihoCoder]HIHO Drinking Game
关键不要纠结于T是什么。
观察发现,T越大,最后Ho的得分越高。对于任意的T,Ho的得分很容易计算。那么二分查找之就好了。
注意,T = K时,不一定能保证Ho一定赢。若输入全是K,那么Ho就输了。
#include <iostream>
using namespace std;
int N, K;
int *d;
//O(n)
int ho_score(int T)
{
int res = 0;
int volume = 0;
for (int i = 0; i< N; ++i) {
volume += T;
if (volume <= d[i]) // hi wins
{
volume = 0;
}
else
{
volume -=d[i];
res++;
}
}
return res;
}
int gtt(int b,int e)
{
if(e==b+1) return e;
if(e==b) return e;
int m = (b+e)/2;
if (ho_score(m) > N/2)
{
return gtt(b,m);
}
else
{
return gtt(m,e);
}
}
int main()
{
cin >> N >> K;
d = new int[N];
for (int i = 0; i< N;++i) cin >> d[i];
cout << gtt(0,K+1);/// K+1 !~~~~~~
return 0;
}

浙公网安备 33010602011771号