wa 2,10求助

P3853 [TJOI2007] 路标设置

朋友,我也是这么做的,也是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


|