C. Ski Resort (逐步累加滑动求连续子序列)

26 篇文章 0 订阅
26 篇文章 0 订阅

题目: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;
	}
}

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值