牛客小白月赛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爱框框 (尺取法)的主要内容,如果未能解决你的问题,请参考以下文章