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

题目:Problem - C - Codeforces

C. Ski Resort (逐步累加滑动求连续子序列)_第1张图片

C. Ski Resort (逐步累加滑动求连续子序列)_第2张图片

C. Ski Resort (逐步累加滑动求连续子序列)_第3张图片

 总结:

对于样例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

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;
	}
}

你可能感兴趣的:(经验,题解,心得,算法,数据结构,c++,学习)