题意:
给出一个序列;
问有几个子区间,满足可以分两段,前一段差d1,后一段差d2;
思路:
找出所有满足的大区间,这个区间里所有的子区间全部满足;
#include <cstdio>
#include <cstring>
const int N = 100005;
int a[N], n, d1, d2;
int main() {
while (scanf("%d%d%d", &n, &d1, &d2) == 3) {
long long ans = n;
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
long long cur = 1;
int flag = 0;
for (int i = 2; i <= n; i++) {
if (a[i] - a[i - 1] == d1 && flag == 0)
cur++;
else if (a[i] - a[i - 1] == d2 && flag == 0) {
flag = 1;
cur++;
} else if (a[i] - a[i - 1] == d2 && flag == 1) {
cur++;
} else {
ans += cur * (cur - 1) / 2;
if (flag == 1)
i--;
flag = 0;
cur = 1;
}
if (i == n) {
ans += cur * (cur - 1) / 2;
}
}
printf("%lld\n", ans);
}
return 0;
}