输入一个 n,输入 n 个数和一个整数 k。如果某个连续子序列中恰好有 k 个奇数数字,我们就认为这个子数组是完美子序列。
输出这个完美子序列的个数。
输入描述
输入一个 n 和 k。
输入 n 个数。
输出描述
输出完美子序列的个数。
样例输入 1
5 3 1 1 2 1 1
样例输出 1
2
样例输入 2
3 1 2 4 8
样例输出 2
0
代码:
#include<bits/stdc++.h>
using namespace std;
int arr[50005];
int main(){
int n,k;
cin>>n>>k;
int oddNum[25005];
oddNum[0]=0;
int recNumber=0;
int res=0;
for(int i=1;i<=n;i++){
cin>>arr[i];
if(arr[i]%2!=0){
oddNum[++recNumber]=i;
}
}
oddNum[recNumber+1]=n+1;
if(recNumber<k){
cout<<0;
return 0;
}
else{
for(int i=1;i<=recNumber-k+1;i++){
int left=oddNum[i]-oddNum[i-1]-1;
int right=oddNum[i+k]-oddNum[i+k-1]-1;
res+=(left+1)*(right+1);
}
}
cout<<res;
}