题目传送门
C - Count Arithmetic Subarrays (atcoder.jp)
题解:
本题可以先预处理好 与 之间的差值。首先每个数都是一个等差数列,接着,每两个数也是一个等差数列,然后可以看一个数字持续了几位,如果持续了位,则说明从(这个数字的首位置)到以前都是等差数列,则total加上,即为1加到的和。(不理解见代码)
AC代码:
//atcoder.jp/contests/abc369/tasks/abc369_c
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n;
int a[200005];
int c[200005];
int total;
signed main(){
cin>>n;
cin>>a[1];
for(int i=2;i<=n;i++){
cin>>a[i];
c[i]=a[i]-a[i-1];
}
total=n;
int length=0;
int now=c[2];
for(int i=2;i<=n;i++){
if(c[i]==now){
++length;
}
else{
total+=length*(length+1)/2;
length=1;
now=c[i];
}
}
total+=length*(length+1)/2;
cout<<total<<endl;
return 0;
}
洛谷账户:xuzb 的个人中心 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
欢迎 点赞+关注+交流!!!