朋友,我也是这么做的,也是80分,点2、10没通过。。。。。请问你解决了吗?
by Mr_answer @ 2023-12-24 10:15:23
(a[i] - a[i - 1]) % x == 0
by zym31415926_ @ 2023-12-24 11:24:43
bool check(long long x) {
long long sum = 0;
for (long long i = 2; i <= n; i++) {
if ((a[i] - a[i - 1]) > x) {
if ((a[i] - a[i - 1]) % x == 0) {
sum += (a[i] - a[i - 1]) / x - 1;
} else {
sum += (a[i] - a[i - 1]) / x;
}
}
}
if (sum <= k) {
return true;
} else {
return false;
}
}
by zym31415926_ @ 2023-12-24 11:26:59
@[Mr_answer](/user/714138)
(转自另一个帖子下我的一个回答,同时感谢楼下zym31415926_的回答)
的确,但是我觉得楼主没有把问题说的足够清楚(至少一开始我没看明白呜呜呜)
我再详细解释一下:
```
bool cmp(int x)
{
int tot=0,now=1,i;
for(i=2;i<=n;i++)
{
if(road[i]-road[now]>x)//出现间隔大于假设的二分答案
{
if((road[i]-road[now])%x!=0)//不能整除,说明该的长度是n*x+k(n倍的x还要多一点)
//则应该在这个间隔里面插n个路标
{
tot+=(road[i]-road[now])/x;
}
else//可以整除,说明该的长度是n倍的x,应该在其中插入(n-1个)路标
{
tot+=(road[i]-road[now])/x-1;
}
now=i;
}
else//假设是正确结果的二分答案比这个间隔要大(那没事了,玩儿去吧)
{
now=i;
}
}
return k>=tot;
}
```
我一开始就是写批注那几行没有注意(没有考虑整除和不整除的影响),导致了#2和#10出错。希望能帮到大家❤❤❤
by bxqm210 @ 2024-01-28 21:08:02
@[bxqm210](/user/758581) 感谢感谢!搞明白了!
by Mr_answer @ 2024-01-30 10:35:56