HDU 5400 Arithmetic Sequence

分析:给你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;
  }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值