hdu 5400 Arithmetic Sequence(水题一道)

来源:互联网 发布:java虚拟机怎么安装 编辑:程序博客网 时间:2024/05/29 11:19

题目链接

http://acm.hdu.edu.cn/showproblem.php?pid=5400

Arithmetic Sequence

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 312    Accepted Submission(s): 163


Problem Description
A sequence b1,b2,,bn are called (d1,d2)-arithmetic sequence if and only if there exist i(1in) such that for every j(1j<i),bj+1=bj+d1 and for every j(ij<n),bj+1=bj+d2.

Teacher Mai has a sequence a1,a2,,an. He wants to know how many intervals [l,r](1lrn) 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(1n105,|d1|,|d2|1000), the next line contains n integers a1,a2,,an(|ai|109).
 

Output
For each test case, print the answer.

Sample Output
125
 
题意就是给你一个输入n,d1,d2 和一个个数为n的数列。问你这个数列中成等差为d1或d2或者前一部分等差为d1,后一部分等差为d2的子序列有多少个。
需要注意的是有的变量题目中给的是10的五次方,要用int64,我因为这个WA了。
#include<stdio.h>int main(){    __int64 last,temp,d;    __int64 n,b[2];    while(~scanf("%I64d",&n))    {        __int64 flag=0,len=1;        __int64 sum=n;        scanf("%I64d%I64d",&b[0],&b[1]);        scanf("%I64d",&last);        for(int i=1;i<n;i++){            scanf("%I64d",&temp);            d=temp-last;            if(flag==0){                if(d==b[0]) len++;                else if(d==b[1]){                    len++;                    flag++;                }                else{                    sum+=len*(len-1)/2;                   // printf("%I64d\n",sum);                    len=1;                }            }            else if(flag==1){                if(d==b[1]) len++;                else if(d==b[0]){                    sum+=len*(len-1)/2;                  //  printf("%I64d\n",sum);                    len=2;                    flag=0;                }                else{                    sum+=len*(len-1)/2;                   // printf("%I64d\n",sum);                    len=1;                    flag=0;                }            }            last=temp;        }        sum+=len*(len-1)/2;        printf("%I64d\n",sum);    }    return 0;}




0 0
原创粉丝点击