先为大家呈现一下题目:
题目描述
要进行全市的表演比赛了。需要你安排一些学生参加这个比赛。为了排练方便,需要叫一些学号连续的同学去。
同时对学生的身高有一定的要求,每个同学的身高不能低于P。
现在需要叫m个同学去排练,请问有多少种方案。
输入
第一行三个整数n,m,P,n表示同学的人数,同学的编号是1到n。
第二行n个数,表示每个学生的身高。
输出
输出有多少种方案
样例输入 Copy
5 2 151 151 152 160 150 170
样例输出 Copy
2
提示
样例解释:可以选择的学号区间[1,2],[2,3]。
对于60% 的数据,n的范围[1,5000];
对于100% 的数据,n的范围[1,100000],m∈[1,n],P和学生身高范围[150,250];
此题如果你能想的出来,那么你的脑力堪称元宇宙大爆炸了。好了,先理清思路,根据提示,第一代代码单身了(tips:请耐心看完全文)
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long i,x[1001],n,m,p,v=0;
cin>>n>>m>>p;
for(i=1;i<=n;i++) cin>>x[i];
for(i=1;i<=n;i++)
{
if(x[i]>=p) x[i]=1;
else x[i]=0;
}
for(i=2;i<=n;i++)
{
if(x[i]==1&&x[i-1]==1) v++;
}
cout<<v;
}
还是低估了题目的要求:达到[1,2],[2,3]。所以只有25分!
答案错误25 |
所以,经过我没日没夜,茶不思饭不想的思考,终于,
第二代代码诞生啦!
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long n,m,p,s=0,t=0;
cin>>n>>m>>p;
long long x,i;
for(i=0;i<n;i++)
{
cin>>x;
if(x>=p)
{
t++;
}
if(x<p)
{
if(t>=m)s+=t-m+1;
t=0;
}
}
if(t>=m)s+=t-m+1;
cout<<s;
return 0;
}
这条代码请联系题目理解,(重点看提示!)好了,别忘了点赞关注666哦!