• hdu 5400 Arithmetic Sequence(模拟)


    Problem Description
    A sequence b1,b2,⋯,bn are called (d1,d2)-arithmetic sequence if and only if there exist i(1≤i≤n) such that for every j(1≤j<i),bj+1=bj+d1 and for every j(i≤j<n),bj+1=bj+d2.
    
    Teacher Mai has a sequence a1,a2,⋯,an. He wants to know how many intervals [l,r](1≤l≤r≤n) there are that al,al+1,⋯,ar are (d1,d2)-arithmetic sequence.
     
    Input
    There are multiple test cases.
    
    For each test case, the first line contains three numbers n,d1,d2(1≤n≤105,|d1|,|d2|≤1000), the next line contains n integers a1,a2,⋯,an(|ai|≤109).
     
    Output
    For each test case, print the answer.
     
    Sample Input
    5 2 -2 
    0 2 0 -2 0
    5 2 3
    2 3 3 3 3
     
    Sample Output
    12 
    5
     
    Author
    xudyh
     
    Source
     
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 #define N 100006
     6 #define ll long long 
     7 int n,k1,k2;
     8 int a[N];
     9 int dp[N];
    10 int main()
    11 {
    12     while(scanf("%d%d%d",&n,&k1,&k2)==3)
    13     {
    14         for(int i=1;i<=n;i++)
    15         {
    16             scanf("%d",&a[i]);
    17         }
    18 
    19         memset(dp,0,sizeof(dp));
    20         for(int i=1;i<n;i++)
    21         {
    22             if(a[i+1]==a[i]+k1)
    23                dp[i+1]=1;
    24             else if(a[i+1]==a[i]+k2)
    25                 dp[i+1]=2;
    26             else dp[i+1]=3;
    27         }
    28 
    29         ll ans=0;
    30         ll tmp=0;
    31         for(int i=1;i<=n;i++)
    32         {
    33             if(dp[i]==1)
    34             {
    35                 if(dp[i-1]==2)
    36                 {
    37                     tmp=1;
    38                 }
    39                 else
    40                     tmp++;
    41                 ans=ans+tmp+1;
    42             }
    43             else if(dp[i]==2)
    44             {
    45                 tmp++;
    46                 ans=ans+tmp+1;
    47             }
    48             else
    49             {
    50                 ans++;
    51                 tmp=0;
    52             }
    53 
    54         }
    55         printf("%I64d
    ",ans);
    56     }
    57     return 0;
    58 }
    View Code
  • 相关阅读:
    【贪心】时空定位I
    【贪心】删数问题
    【贪心】取火柴游戏
    【贪心】均分纸牌
    Fix a Tree
    Vacations
    One Bomb
    Abandoned country
    BZOJ 1006 [HNOI2008]神奇的国度
    BZOJ 2118 墨墨的等式
  • 原文地址:https://www.cnblogs.com/UniqueColor/p/4740444.html
Copyright © 2020-2023  润新知