题目:Problem - C - Codeforces
总结:
对于样例1
3 1 5
-5 0 -10
转化
n=3 //天数
k=1 //最小天数
q=5 //最适温度
设最后输出值为num;(num最初为0)
操作一:
从-5统计 -5 小于最适温度5 可取
可取:(-5)
num+=1
操作二:
第二个0 小于最适温度5可取
可取 :
情况一:(-5)0
情况二:-5 (0)
情况三:(-5 0)
num+=1+1+1
这三种情况
在操作二中的情况1与操作一的情况相同可以整合成一块
可用代码实现如下
res = res + (ans - k + 1); //对于连续的数逐个累加类似于滑动窗口
代码献上(累加滑动求连续子序列):
#include<iostream>
using namespace std;
long long n, k, q, res, ans;
int t;
int main()
{
cin >> t;
while (t--)
{
res = 0, ans = 0;
cin >> n >> k >> q; //数据输入
for (int i = 1; i <= n; i++)
{
int m;cin >> m;
if (m <= q)ans++; //对最适合温度的天数连续统计
else ans = 0;
if (ans >= k) //判断连续天数是否满足最小天数要求
res = res + (ans - k + 1); //对于连续的数逐个累加类似于滑动窗口
}
cout << res << endl;
}
}