有n个数,保存在数组a[1...n],每个数都是0或者1,每次操作可以删除数组第一个数或者删除数组最后一个数,
问至少多少次操作之后,使得数组剩下的数的和等于S。如果不能完成任务,输出-1。
输入格式
第一行,两个整数,n和S。 1<=n<=100000。 1<=S<=100000。
第二行,n个整数,第i个整数是a[i], a[i]是0或者1。第一行,两个整数,n和S。 1<=n<=100000。 1<=S<=100000。
第二行,n个整数,第i个整数是a[i], a[i]是0或者1。
输出格式
一个整数。
输入/输出例子1
输入:
16 2
1 1 0 0 1 0 0 1 1 0 0 0 0 0 1 1
输出:
7
样例解释
【提示】
有40%的数据, n<=100。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,a[1000005],s,minn=1000000;
int main(){
cin>>n>>s;
for(int i=1;i<=n;i++)
{
cin>>a[i];
a[i]+=a[i-1];
}
if(a[n]==s)cout<<0;
if(a[n]<s)cout<<-1;
else
{
for(int i=0,j=1;i<=n,j<=n;)
{
if(a[j]-a[i]<=s)
{
int w=n-j+i;
minn=min(minn,w),j++;
}
else i++;
}
}
cout<<minn;
return 0;
}