侧边栏壁纸
  • 累计撰写 192 篇文章
  • 累计创建 2 个标签
  • 累计收到 87 条评论

【题解】【上海】【选取子段】

Allen Best
2023-08-02 / 0 评论 / 2 点赞 / 79 阅读 / 416 字
温馨提示:
本文最后更新于 2023-08-02,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

image.png

#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e5+10;
int n,m,k,x,a[MAXN];
long long ans=0;
int main(){
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++){
		cin>>x;
		if(x<=k)
			a[i]=1;//小于k就标记
	}
	a[n+1]=-1;//注意这里要在最后一个设置一个不可能的数,否则最后一个子串扫不出来!!
	int t=0;
	for(int i=1;i<=n+1;i++){//这里要多枚举一个,防止最后一个子串扫不到!!
		if(a[i]==1) t++;
		else{
			if(t>=m){
				ans+=t-m+1;//合理的方案数累加
			}
			t=0;//清零
		}
	}
	cout<<ans<<endl;//输出方案数
	return 0;
}
0

评论区