A题这段二分代码为什么通过率是88.46%
求大佬赐教
#include<bits/stdc++.h>
using namespace std;
int n;
int a[1005];
int sum;
int judge(int mid)
{
//cout<<mid<<endl;
if(sum%mid)
return 0;
int temp=sum/mid;
int temp2=0;
for(int i=1;i<=n;i++)
{
temp2+=a[i];
if(temp2>temp)
return 0;
else if(temp2==temp)
temp2=0;
}
if(temp2==0)
return 1;
else
return 0;
}
int main()
{
cin>>n;
sum=0;
for(int i=1;i<=n;i++)
{scanf("%1d",&a[i]);
sum+=a[i];
}
//cout<<sum<<endl;
int ans=1;
int l=1,r=n;
while(l<=r)
{
int mid=(l+r)>>1;
if(judge(mid))
{l=mid+1;
ans=mid;
}
else
r=mid-1;
}
if(ans==1)
cout<<-1<<endl;
else
cout<<ans<<endl;
return 0;
}
using namespace std;
int n;
int a[1005];
int sum;
int judge(int mid)
{
//cout<<mid<<endl;
if(sum%mid)
return 0;
int temp=sum/mid;
int temp2=0;
for(int i=1;i<=n;i++)
{
temp2+=a[i];
if(temp2>temp)
return 0;
else if(temp2==temp)
temp2=0;
}
if(temp2==0)
return 1;
else
return 0;
}
int main()
{
cin>>n;
sum=0;
for(int i=1;i<=n;i++)
{scanf("%1d",&a[i]);
sum+=a[i];
}
//cout<<sum<<endl;
int ans=1;
int l=1,r=n;
while(l<=r)
{
int mid=(l+r)>>1;
if(judge(mid))
{l=mid+1;
ans=mid;
}
else
r=mid-1;
}
if(ans==1)
cout<<-1<<endl;
else
cout<<ans<<endl;
return 0;
}
全部评论
(0) 回帖