蛋糕分好了,小朋友排着队去领蛋糕。铭铭想从 N 人的队伍中选出 K 位小朋友帮忙分发蛋糕。但铭铭选人 的方法有点特别,他想从队伍中选连续的 K 个小朋友, 而且必须是男比女多,你知道铭铭有多少种选择吗?
输入格式
第一行,两个整数 N,代表队伍中有 N(0<N<=1000000)个小朋友,铭铭想选 K(K<N)个人。
第二行:有 N 个 0 或 1(0 代表男,1 代表女),每个数用空格隔开
输出格式
输出一个整数。代表铭铭可以有多少种选择方案。
输入/输出例子1
输入:
10 3
0 1 1 0 1 0 0 1 0 1
输出:
4
样例解释
数据范围: 50%的数据 0<N<1000,k<N;
80%的数据 0<N<1000000,k<=100;
100%的数据 0<N<1000000,k<N;
此题代码及思路如下:
#include<bits/stdc++.h>
using namespace std;
int n,k,a[1000005],x[1000005],y[1000005],z;
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]==0)x[i]=x[i-1]+1,y[i]=y[i-1];
else y[i]=y[i-1]+1,x[i]=x[i-1];//统计男生及女生人数的前缀和
}
for(int i=k;i<=n;i++)
{
if(x[i]-x[i-k]>y[i]-y[i-k])z++;//如果这k个里男生比女生多,就是一个方案
}
cout<<z;
return 0;
}