点击打开题目
刚开始二分的条件控制有错,应该是剩下的人无论怎么分这个人都是运气王。
代码如下:
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
int n,m,k;
int maxx,sum; //前面人钱最多的,总和
int rec; //剩余分钱的人数
int money; //剩余钱数
int u;
scanf ("%d",&u);
while (u--)
{
scanf ("%d %d %d",&n,&m,&k);
maxx = sum = 0;
for (int i = 1 ; i <= k ; i++)
{
int t;
scanf ("%d",&t);
maxx = max (maxx , t);
sum += t;
}
rec = n-k-1;
money = m - sum;
if (money-rec <= maxx)
{
printf ("Impossible\n");
continue;
}
if (rec == 0) //注意这个
{
printf ("%d\n",money);
continue;
}
int l,r,mid;
l = maxx + 1;
r = money - rec;
while (r >= l)
{
mid = (l + r) >> 1;
if (money - mid - rec + 1 < mid)
r = mid - 1;
else
l = mid + 1;
}
printf ("%d\n",l);
}
return 0;
}