題目鏈接: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;
}