Subtask #1 WA求助

P2678 [NOIP2015 提高组] 跳石头

```cpp #include <bits/stdc++.h> using namespace std; int d,n,m; int a[1001000]; int l,r,mid,ans; bool check(int x) { int t=0,wz=0,s=0; while (s<n+1) { s++; if (a[s]-a[wz]<x) t++; else wz=s; } if (t>m) return false; else return true; } int main(){ cin>>d>>n>>m; for (int i=1;i<=n;i++)cin>>a[i]; a[n+1]=d; l=1; r=d; while (l <= r) { mid = (l+r) / 2; if (check(mid)) { ans=mid; l=mid+1; } else r=mid-1; } cout<<ans<<endl; } ``` 应该是思考的时候出问题了(建议检查草稿纸
by FrostDi @ 2023-06-18 18:03:33


@[2010_AC_gu](/user/722799) 不理解为什么在`a`数组最后添加`len`。 我的做法类似,多了个排序。 ```cpp #include<bits/stdc++.h> using namespace std; int n,m,l,i,t,w,mid,now,s,a[100000]; int main(){ cin>>l>>n>>m; for(i=0;i<n;i++)cin>>a[i]; sort(a,a+n); t=1;w=l; while(t<w){ mid=(t+w+1)/2; now=s=0; for(i=0;i<n;i++){ if(l-a[i]<mid)break; if(a[i]-now<mid)s++; else now=a[i]; } s+=n-i; if(s<=m)t=mid; else w=mid-1; } cout<<t; } ```
by __Walter_Fang__ @ 2023-06-18 18:10:34


@[2010_AC_gu](/user/722799) Hack: ```text 22 5 2 2 11 14 17 21 ```
by creation_hy @ 2023-06-18 19:54:24


@[Walter_Fang](/user/609249) 添加的`len`是终点
by SnowFalling_2010 @ 2023-06-18 22:29:44


@[2010_AC_gu](/user/722799) Hack: Input: ``` 8 3 1 2 4 7 ``` Output: Right:2 Wrong:1
by __Walter_Fang__ @ 2023-06-19 17:13:41


@[__Walter_Fang__](/user/609249) @[creation_hy](/user/576378) 感谢,已AC ``` #include<bits/stdc++.h> using namespace std; const int N=50100; int len,n,m,l=0,r=1e9+1,mid,a[N],b[N]; bool check(int x) { int m1=m; for(int i=1; i<=n; i++) b[i]=a[i]; for(int i=1; i<=n-1; i++) { if(b[i+1]-b[i]<x) b[i+1]=b[i],m1--; } return m1>=0; } int main() { scanf("%d%d%d",&len,&n,&m); a[n+2]=len,n+=2; for(int i=2; i<n; i++) scanf("%d",&a[i]); while(l+1<r) { mid=(l+r)/2; if(check(mid)) l=mid; else r=mid; } printf("%d",l); return 0; } ```
by SnowFalling_2010 @ 2023-06-19 21:35:16


此帖结。
by SnowFalling_2010 @ 2023-06-19 21:35:45


@[__Walter_Fang__](/user/609249) 你这个样例我输出3(难崩)
by woshidabian @ 2023-08-06 10:18:26


|