问题:问题陈述:要进入东藤游乐园,有M个柜台。总共有N个人想进入游乐园,每个人都会在一个柜台前排队。任何柜台职员都会生气,如果在他面前排队的人数至少比邻座柜台前排队的人数多2人。K柜台的工人工作最快.找出在K柜台前排队的人的最大数量,这样每个柜台至少有一个人,没有柜台工作人员生气。输入输入包含三个整数M、N和K输出:打印可以在Kth计数器前排队的最大人数,以便每个计数器至少有一个人,没有柜台工作人员生气。测试用例:样本输入:3 6 1
样本输出:3
说明:最佳安排是321.
发布于 2022-07-26 11:23:19
这里是二进制搜索解决方案-我尝试过
ll get(ll m, ll k){
ll d = k;
if (k > m) d = m;
k -= d;
return k + d * (2 * m - d + 1) / 2;
}
signed main(){
ll n, p, k; cin >> n >> p >> k;
ll l = 1, r = p+1;
while(l + 1 < r){
ll m = (l + r) / 2;
cout<<get(m, k) <<" "<<get(m, n - k + 1)<<" "<<m<<endl;
if ( ull(get(m, k)) + get(m, n - k + 1) - m > p)
r = m;
else l = m;
}
cout << l << endl;
}https://stackoverflow.com/questions/72071299
复制相似问题