HDOJ 5400 Arithmetic Sequence 暴力枚举
来源:互联网 发布:windows返回快捷键 编辑:程序博客网 时间:2024/05/16 14:13
Arithmetic Sequence
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 382 Accepted Submission(s): 196
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 sequencea1,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.
Teacher Mai has a sequence
Input
There are multiple test cases.
For each test case, the first line contains three numbersn,d1,d2(1≤n≤105,|d1|,|d2|≤1000) , the next line contains n integers a1,a2,⋯,an(|ai|≤109) .
For each test case, the first line contains three numbers
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
2015 Multi-University Training Contest 9
/* ***********************************************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 duan int 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 duan for(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 duan for(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;}
0 0
- HDOJ 5400 Arithmetic Sequence 暴力枚举
- 【HDOJ 5400】Arithmetic Sequence
- DP-HDOJ-5400-Arithmetic Sequence
- HDOJ-----1005---Number Sequence暴力枚举
- HDU 5400(Arithmetic Sequence-暴力找区间)
- hdoj 5400 Arithmetic Sequence 【构造等差数列】
- hdoj Arithmetic Sequence 5400 (构造等差数列+技巧) 好题
- USACO-Section1.4 Arithmetic Progressions【暴力枚举】
- HDU 5400 Arithmetic Sequence
- hdu 5400 Arithmetic Sequence
- HDU 5400 Arithmetic Sequence
- HDU 5400 Arithmetic Sequence
- HDU 5400 Arithmetic Sequence
- hdu 5400 Arithmetic Sequence
- hdu 5400 Arithmetic Sequence
- hdu 5400 Arithmetic Sequence
- HDOJ 5305 Friends 暴力枚举
- HDOJ 4473 Exam 暴力枚举
- VC写加密壳
- B2B移动商务社交平台贸人E家APP在深首发
- poj2388Who's in the Middle【堆排序】
- 第三方微博登陆,通过OAuth 2.0 进行授权
- 24. 排序
- HDOJ 5400 Arithmetic Sequence 暴力枚举
- JMX监控Zookeeper状态Java API
- HashMap HashTable CourrentHashMap 区别
- Git Gui for Windows的建库、克隆(clone)、上传(push)、下载(pull)、合并
- 数据库:数据删除
- 2015.8.19 凌晨.. 博客开通 希望能从一个菜鸟慢慢变成大牛..
- JVM内存结构
- 数据库:数据更新
- 计算身体质量指数