题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805439202443264
题目大意:有n个数,求这n个数当中所有连续的和为m的子数组,如果找不到,就重新找一个和x,使得存在子数组的和为x,并且x要大于m。
分析:对于每个和x,直接尺取即可。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n, m, cnt, a[N];
void solve() {
int sum = 0, l = 1, r = 1;
while(r <= n) {
sum += a[r];
if(sum == m) {
cnt++;
printf("%d-%d\n", l, r);
} else {
while(sum > m) {
sum -= a[l];
l++;
}
if(sum == m) {
cnt++;
printf("%d-%d\n", l, r);
}
}
r++;
}
}
int main() {
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]);
cnt = 0;
while(cnt == 0) {
cnt = 0;
solve();
m++;
}
return 0;
}