分析:给你n个数和d1,d2,问有多少个区间满足“可以将该区间分为两个子区间,前一个区间是公差为d1的等差数列,后一个区间是公差为d2的等差区间,其中可以有一个子区间为空。如果给定的前len个数从第1个数到第len个数的这个区间满足题意,且第len+1个数也满足,就能新加len+1个满足题意的区间。比如:d1=2,d2=-2,前5个数是1 3 5 7 5,如果第6个数为3,那么他前5个数满足题意,能新加6个区间[i,6](1<=i<=6)满足题意;如果第6个数为7,那么他前1个数满足题意,能新加2个区间[5,6]和[6,6];如果第6个数既不是3也不是7,比如2,那么他前0个数满足题意,能新加1个区间[6,6]。
# include <stdio.h>
int main()
{
int i,n,a,b,d1,d2,len,f;
__int64 ans;
while(scanf("%d%d%d",&n,&d1,&d2)!=EOF)
{
ans=0; len=0; f=0;
for(i=0;i<n;i++)
{
scanf("%d",&b);
if(len==0)
len=1;
else
{
if(f==0&&b-a==d1)
len++;
else if(f==1&&b-a==d1)
len=2,f=0;
else if(b-a==d2)
len++,f=1;
else if(b-a!=d2&&(b-a!=d1||f==1))
len=1,f=0;
}
ans+=len; a=b;
}
printf("%I64d\n",ans);
}
return 0;
}