HDU 5400(Arithmetic Sequence-暴力找区间)
2015-08-24 19:41
489 查看
Arithmetic Sequence
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 937 Accepted Submission(s): 411
[align=left]Problem Description[/align]
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.
[align=left]Input[/align]
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).
[align=left]Output[/align]
For each test case, print the answer.
[align=left]Sample Input[/align]
5 2 -2 0 2 0 -2 0 5 2 3 2 3 3 3 3
[align=left]Sample Output[/align]
12 5
[align=left]Author[/align]
xudyh
[align=left]Source[/align]
2015 Multi-University Training Contest 9
[align=left]Recommend[/align]
wange2014 | We have carefully selected several similar problems for you: 5421 5420 5419 5418 5417
暴力找区间
#include<bits/stdc++.h> using namespace std; #define For(i,n) for(int i=1;i<=n;i++) #define Fork(i,k,n) for(int i=k;i<=n;i++) #define Rep(i,n) for(int i=0;i<n;i++) #define ForD(i,n) for(int i=n;i;i--) #define RepD(i,n) for(int i=n;i>=0;i--) #define Forp(x) for(int p=pre[x];p;p=next[p]) #define Forpiter(x) for(int &p=iter[x];p;p=next[p]) #define Lson (x<<1) #define Rson ((x<<1)+1) #define MEM(a) memset(a,0,sizeof(a)); #define MEMI(a) memset(a,127,sizeof(a)); #define MEMi(a) memset(a,128,sizeof(a)); #define INF (2139062143) #define F (100000007) #define MAXN (1000000+10) typedef long long ll; ll mul(ll a,ll b){return (a*b)%F;} ll add(ll a,ll b){return (a+b)%F;} ll sub(ll a,ll b){return (a-b+llabs(a-b)/F*F+F)%F;} void upd(ll &a,ll b){a=(a%F+b%F)%F;} int n; ll d1,d2,a[MAXN],b[MAXN]; int main() { // freopen("E.in","r",stdin); while(cin>>n>>d1>>d2) { For(i,n) scanf("%lld",&a[i]); For(i,n-1) b[i]=a[i+1]-a[i]; // For(i,n-1) cout<<b[i]<<' ';cout<<endl; if (d1==d2) { ll sz=1,ans=0; Fork(i,2,n) if (a[i]-a[i-1]==d1) sz++; else ans+=sz*(sz+1)/2,sz=1; if (sz) ans+=sz*(sz+1)/2; cout<<ans<<endl; } else { ll sz=1,ans=0; bool flag=0; Fork(i,2,n) { if (!flag) { if (a[i]-a[i-1]==d1) sz++; else if (a[i]-a[i-1]==d2) sz++,flag=1; else ans+=sz*(sz+1)/2,sz=1,flag=0; } else { if (a[i]-a[i-1]==d2) sz++; else if (a[i]-a[i-1]==d1) ans+=sz*(sz+1)/2-1,sz=2,flag=0; else ans+=sz*(sz+1)/2,sz=1,flag=0; } }if (sz) ans+=sz*(sz+1)/2; cout<<ans<<endl; } } return 0; }
相关文章推荐
- UIScrollView添加控件,控件距离顶部始终有间距的问题
- 5 Techniques To Understand Machine Learning Algorithms Without the Background in Mathematics
- IOS第12天(3,UIViewController的生命周期)
- IOS UITextView自适应高度
- IOS UITextView自适应高度
- IOS第12天(2,UINavigationController导航控制器)
- uuid生成12位随机数 不重复
- UIAlert的使用
- STL学习----入门(1)[queue]
- 野人学Android基础篇之初探UI控件第一课--TextView静态赋值
- The Dole Queue(UVA 133)
- IOS第12天(1,UIViewController控制器的创建的 三种方式,和第一个view创建)
- 百度编辑器ueditor简单易用
- UI19_数据库
- iOS开发UI篇—CAlayer层的属性
- 如何自己编译apue.3e中代码 & 学习写makefile
- android stuido插件
- 【POJ 2031】 Building a Space Station (三维坐标求距离+最小生成树)
- IOS-6-UI知识总结-1(代码添加控件、视图切换、多种传值方式)
- iOS下UITableView的单元格重用逻辑