二分求解,80分,WA了两个点

P1114 “非常男女”计划

有人说这种想法是错误的,能否说明一下原因
by sophisticate @ 2018-10-15 21:12:19


#include <bits/stdc++.h> using namespace std; int n,sum[100001],l,r,mid; bool a[100001],b; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; sum[i]=sum[i-1]+a[i]; } l=0,r=n/2*2; while(r-l>2){ mid=(l+r)/4*2; b=0; cout<<"mid : "<<mid<<endl; for(int i=0;i<=n-mid;i++) if(sum[i+mid]-sum[i]==mid/2) { b=1; break; } if(b==0) r=mid; else l=mid; } cout<<l<<endl; return 0; }
by George1123 @ 2019-04-22 20:28:17


```cpp #include <bits/stdc++.h> using namespace std; int n,sum[100001],l,r,mid; bool a[100001],b; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; sum[i]=sum[i-1]+a[i]; } l=0,r=n/2*2; while(r-l>2){ mid=(l+r)/4*2; b=0; cout<<"mid : "<<mid<<endl; for(int i=0;i<=n-mid;i++) if(sum[i+mid]-sum[i]==mid/2) { b=1; break; } if(b==0) r=mid; else l=mid; } cout<<l<<endl; return 0; } ```
by George1123 @ 2019-04-22 20:28:31


也80
by George1123 @ 2019-04-22 20:28:43


@[__CDy](/space/show?uid=59602) 我举个栗子你就明白了 - 现有010101 - 答案应该就是6 - 但按照二分的思想,如果6可以,1、2、3、4、5都可行,可是3的时候显然不可行,不符合二分的定义
by Error_666 @ 2019-07-13 18:59:10


@[Error_666](/user/91681) 显然 ans 在偶数序列上是单调的,所以二分是正确的。
by 断清秋 @ 2022-01-24 14:19:51


|