有人说这种想法是错误的,能否说明一下原因
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