美丽的区间c++蓝桥杯
时间: 2023-12-06 17:36:05 浏览: 93
根据提供的引用内容,我理解到这是一道蓝桥杯的题目,题目要求找到一个序列中最短的美丽区间,其中美丽区间的定义为区间和大于等于给定的值S。下面是一个C++的解法:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100010;
int n, s, a[N], sum[N];
int main()
{
cin >> n >> s;
for (int i = 1; i <= n; i ++ ) cin >> a[i];
for (int i = 1; i <= n; i ++ ) sum[i] = sum[i - 1] + a[i];
if (sum[n] < s) puts("0");
else
{
int res = n;
for (int i = 0, j = 1; j <= n; j ++ )
{
while (sum[j] - sum[i] >= s) i ++ ;
if (sum[j - 1] - sum[i - 1] >= s) res = min(res, j - i + 1);
}
cout << res << endl;
}
return 0;
}
```
其中,sum[i]表示前i个数的和,i和j分别表示区间的左右端点,i和j都从1开始遍历,当sum[j]-sum[i]>=s时,i++,直到sum[j]-sum[i]<s,此时j-i+1就是一个美丽区间的长度,用res记录最小的美丽区间长度即可。
阅读全文