HDOJ 5400 Arithmetic Sequence 暴力枚举

Arithmetic SequenceTime Limit: 4000/2000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 382Accepted Submission(s): 196

Problem Description

A sequenceare called-arithmetic sequence if and only if there existsuch that for everyand for every.Teacher Mai has a sequence. He wants to know how many intervalsthere are that-arithmetic sequence.

Input

There are multiple test cases.For each test case, the first line contains three numbers, the next line contains.

Output

For each test case, print the answer.

Sample Input

5 2 -20 2 0 -2 05 2 32 3 3 3 3

Sample Output

125

Author

xudyh

Source

/* ***********************************************Author:CKbossCreated Time :2015年08月18日 星期二 12时21分22秒File Name:1005.cpp************************************************ */#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <string>#include <cmath>#include <cstdlib>#include <vector>#include <queue>#include <set>#include <map>using namespace std;typedef pair<int,int> pII;typedef long long int LL;const int maxn=100100;const int INF=0x3f3f3f3f;int n,d1,d2;int a[maxn];LL ans;vector<pII> up,down;void bd2(){LL aaa=n-1;for(int i=0,sz=up.size();i<sz;i++){pII pi=up[i];LL dur=pi.second-pi.first+1;aaa+=dur*(dur-1)/2;}cout<<aaa<<endl;}int main(){//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);while(scanf("%d%d%d",&n,&d1,&d2)!=EOF){ans=n;up.clear(); down.clear();/// one duanint left=-1,right=-1;int Left=-1,Right=-1;bool cl=false;bool Cl=false;for(int i=1;i<=n;i++)scanf("%d",a+i);a[n+1]=INF; n++;for(int i=1;i<=n;i++){if(i>1){int ca=a[i]-a[i-1];if(ca==d1){if(left==-1){left=i-1; right=i; cl=true;}else right=i;}else{if(cl==true){up.push_back(make_pair(left,right));left=right=-1;cl=false;}}}if(i>1){int ca=a[i]-a[i-1];if(ca==d2){if(Left==-1){Left=i-1; Right=i; Cl=true;}else Right=i;}else{if(Cl==true){down.push_back(make_pair(Left,Right));Left=Right=-1;Cl=false;}}}}if(d1==d2){bd2();continue;}/// single duanfor(int i=0,sz=up.size();i<sz;i++){pII pi=up[i];LL dur=pi.second-pi.first+1;ans+=dur*(dur-1)/2;}for(int i=0,sz=down.size();i<sz;i++){pII pi=down[i];LL dur=pi.second-pi.first+1;ans+=dur*(dur-1)/2;}/// double duanfor(int i=0,j=0,sz1=up.size(),sz2=down.size();i<sz1&&j<sz2;){if(up[i].second==down[j].first){LL duan1=up[i].second-up[i].first;LL duan2=down[j].second-down[j].first;ans+=duan1*duan2;i++; j++;}else{if(up[i].second>down[j].first) j++;else if(up[i].second<down[j].first) i++;}}printf("%lld\n",ans);}return 0;}

版权声明:来自: 码代码的猿猿的AC之路

,妩媚动人,让我感受到了大自然的神奇。

HDOJ 5400 Arithmetic Sequence 暴力枚举

相关文章:

你感兴趣的文章:

标签云: