hdu5400Arithmetic Sequence

来源:互联网 发布:跑腿app源码 编辑:程序博客网 时间:2024/05/16 12:42

题目链接:点击打开链接

根据样例,单个的一个数也可以算为一个间隔,并且一个间隔里可以只含有d1或d2的等差数列,对于每一个a[i],看从左边起,它含d1等差数列的个数l[i],从右边数含d2等差数列的个数r[i],若d1!=d2,则总间隔数为l[i]*r[i],若相同为l[i].

#include<stdio.h>
#include<string.h>
long long l[100010],r[100010],a[100010];
int main()
{
int n,d1,d2,i,j;

long long ans;

while(~scanf("%d%d%d",&n,&d1,&d2))
{
for(i=1;i<=n;i++)
scanf("%lld",&a[i]);
l[1]=1;
for(i=2;i<=n;i++)
if(a[i]==a[i-1]+d1)
l[i]=l[i-1]+1;
else
l[i]=1;
r[n]=1;
for(i=n-1;i>=1;i--)
if(a[i]+d2==a[i+1])
r[i]=r[i+1]+1;
else
r[i]=1;
ans=0;
if(d1!=d2)
for(i=1;i<=n;i++)
ans+=l[i]*r[i];
else
for(i=1;i<=n;i++)
ans+=l[i];
printf("%lld\n",ans);

return 0;
 } 

0 0
原创粉丝点击