牛客小白月赛34 F dd爱框框 (尺取法)

Posted 行码棋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客小白月赛34 F dd爱框框 (尺取法)相关的知识,希望对你有一定的参考价值。

题目链接

尺取法

实际上和双指针差不多,就是一个头指针,一个尾指针。如果区间的总和不满足某个条件,那么头指针向前伸展,直到满足这个条件。满足之后,尾指针再向前伸展,如果还是满足这个条件,就一直往前伸展,在伸展的过程中一直维护答案。

本题题解

题意:

找到最短的区间长度满足区间和大于等于给定的值

思路:

就是尺取法,注意条件是左指针小于等于n,先右指针伸展,再左指针伸展。

r代表的是区间的右端点,l代表的是区间的左端点。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e7+5;
int a[N];

int main()
{
	ll n,x;
	cin>>n>>x;
	for(int i=1;i<=n;i++) cin>>a[i];
	int l=1,r=0;
	int l1=1,rr=n,mn=n;
	ll sum = 0;
	while(l<=n)
	{
		while(r<=n&&sum<x) sum+=a[++r];//右指针伸展
		if(sum<x) break;
		if(r-l+1<mn)//维护答案
		{
			l1 = l;rr = r;
			mn = r-l+1;
		}
		sum -= a[l++];//左指针伸展
	}
	cout<<l1<<" "<<rr<<'\\n';
	return 0;
 } 

以上是关于牛客小白月赛34 F dd爱框框 (尺取法)的主要内容,如果未能解决你的问题,请参考以下文章

牛客小白月赛34- E.dd爱旋转 - 群论思想

牛客网小白月赛34题解

牛客网小白月赛34题解

牛客网小白月赛34题解

牛客小白月赛34 ACEF(待补)

牛客小白月赛1 A-简单题