Arithmetic Sequence

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

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
题意:给定一序列和d1,d2.问有多少间隔可以保证存在i,对于每一个j,有j(1≤j<i),bj+1=bj+d1, j(i≤j<n),bj+1=bj+d2.成立。
 #include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
const int N = ;
const int oo = 0x3f3f3f3f;
long long al[N], ar[N], as[N], n; // al数组存从左边到这个点一直满足的+d1的数有几个,ar是往右边数满足+d2的有几个。
int main()
{
long long d1, d2, i, ans;
while(~scanf("%lld %lld %lld", &n, &d1, &d2))
{
for(i = ; i <= n; i++)
scanf("%lld", &as[i]);
al[] = ar[n] = ;
for(i = ; i <= n; i++)
if(as[i] == as[i-]+d1)
al[i] = al[i-]+;
else al[i] = ; // 只要间隔,不满足了那么连续的就是1个,它自身
for(i = n-; i >= ; i--)
{
if(as[i]+d2 == as[i+])
ar[i] = ar[i+]+;
else ar[i] = ;
}
ans = ;
for(i = ; i <= n; i++)
{
if(d1 == d2) ans += al[i]; // 如果d1,d2相等,al直接相加
else ans += al[i]*ar[i]; // if不等,就等于两者相乘,即间隔种类数
}
printf("%lld\n", ans);
}
return ;
}

最新文章

  1. 2017技术核心——Spring
  2. September 28th 2016 Week 40th Wednesday
  3. delphi动态数组指针问题
  4. C字符串和C++中string的区别 &amp;&amp;&amp;&amp;C++中int型与string型互相转换
  5. jqGrid 设置列宽
  6. Python学习 - 简单抓取页面
  7. 找出整数中第k大的数
  8. Jquery学习笔记:利用parent和parents方法获取父节点
  9. 基于angularJs的单页面应用seo优化及可抓取方案原理分析
  10. css的内容
  11. 大整数相乘问题总结以及Java实现
  12. AUTOCAD参数约束功能
  13. VMware下Debian开发环境部署之常见问题记录
  14. C# SemaphoreSlim 实现
  15. Neo4j 安装插件APOC和GRAPH ALGORITHMS
  16. LintCode Sqrt(x)
  17. 关于kingoroot这款软件
  18. mysql 数据类型TIMESTAMP用法
  19. azkaban:java任务调度系统
  20. 重学 以太网的mac协议的CSMA/CD

热门文章

  1. python 操作openpyxl导出Excel 设置单元格格式以及合并处理
  2. 06 使用bbed修复delete的数据--01
  3. PHP 图片+文字+二维码生成小程序分享海报
  4. [USACO 2008 Jan. Silver]架设电话线 —— 最短路+二分
  5. vue 常用插件,保存
  6. oracle--表分区、分区索引
  7. python列表-简单操作
  8. Redis--小小总结
  9. El 表达式和 Jstl 标签库
  10. keep-alive 被 beforeRouteEnter 骗了