题目传送门

题意:问有多少个区间,其中存在j使得ai + d1 == ai+1(i<j) && ai + d2 == ai+1 (i>j)

构造:用c1[i], c2[i]记录i为标杆左边最多几个符合以及右边最多几个符合,那么i的贡献为(c1[i]+1) * (c2[i] + 1);当d1==d2时,找出符合的连续区间,长度记为cnt,那么贡献为(cnt+1) * cnt / 2。

/************************************************
* Author        :Running_Time
* Created Time  :2015-8-18 12:27:51
* File Name     :E.cpp
************************************************/

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std;

#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int MAXN = 1e5 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
int a[MAXN];
ll c1[MAXN], c2[MAXN];

int main(void)    {     //HDOJ 5400 Arithmetic Sequence
   int n, d1, d2;
   while (scanf ("%d%d%d", &n, &d1, &d2) == 3) {
       for (int i=1; i<=n; ++i)    {
           scanf ("%d", &a[i]);
       }
       memset (c1, 0, sizeof (c1));
       memset (c2, 0, sizeof (c2));
       for (int i=2; i<=n; ++i)    {
           if (a[i-1] + d1 == a[i])    c1[i] = c1[i-1] + 1;
       }
       for (int i=n; i>=2; --i)    {
           if (a[i-1] + d2 == a[i])    c2[i-1] = c2[i] + 1;
       }

       ll ans = 0;
       if (d1 == d2)   {
           ll cnt = 1;
           for (int i=2; i<=n; ++i)    {
               if (a[i] - a[i-1] == d1)    cnt++;
               else    {
                   ans += (cnt + 1) * cnt / 2; cnt = 1;
               }
           }
           ans += (cnt + 1) * cnt / 2;
           printf ("%I64d\n", ans);    continue;
       }
       for (int i=1; i<=n; ++i)    {
           ans += (c1[i] + 1) * (c2[i] + 1);
       }
       printf ("%I64d\n", ans);
   }

   return 0;
}

转载于:https://www.cnblogs.com/Running-Time/p/4741942.html

构造 HDOJ 5400 Arithmetic Sequence相关推荐

  1. HDU 5400 Arithmetic Sequence

    HDU 5400 Arithmetic Sequence /** HDU 5400 Arithmetic Sequence 直接预处理求解就好了 预处理找出以a[i]结尾最长的subArr长度(满足条 ...

  2. Arithmetic Sequence

    Problem Description A sequence b1,b2,⋯,bn are called (d1,d2)-arithmetic sequence if and only if ther ...

  3. Arithmetic Sequence 三分,货仓选址,nth_element,__int128(济南)

    题意 : 给一序列,每次操作选择一个数加一或者减一,需要将这个序列变成等差数列,问最小操作数 思路 : 数据范围很大又没有头绪,想到二分或者三分.对于不同的公差d,肯定是只有一个最优,两边的都比这个公 ...

  4. [HDOJ]1005. Number Sequence

    数字游戏,如果硬说它有算法的话,那也只能说去找规律了. 初看本题的人,会觉得这这是一个简单的递归题目,其实我一开始也是这么想的,但后来提交了如下代码后我才明白. #include <iostre ...

  5. XTU 1278 Arithmetic Sequence

    等差数列 题目描述 给一个整数数列,请判断是否为等差数列. 输入 第一行是一个整数T(1≤T≤100),表示样例的个数. 每个样例第一行是一个整数N(3≤N≤10000),表示数列元素的个数. 第二行 ...

  6. LeetCode 1027. Longest Arithmetic Sequence--笔试题--C++解法

    LeetCode 1027. Longest Arithmetic Sequence–笔试题–C++解法 LeetCode题解专栏:LeetCode题解 我做的所有的LeetCode的题目都放在这个专 ...

  7. c语言序列sequence,Sequence

    Sequence Time Limit:1000MS Memory Limit:65536K Total Submit:0 Accepted:0 Description The sequence 1, ...

  8. LeetCode - 413. Arithmetic Slices - 含中文题意解释 - O(n) - ( C++ ) - 解题报告

    1.题目大意 A sequence of number is called arithmetic if it consists of at least three elements and if th ...

  9. Arithmetic Slices

    这两天一直复习动态规划,就想到leetcode上刷刷题,easy难度的很少,大部分都是medium和hard.本题是第一道DP类型medium难度的题目,但是用其他的方法比如暴力法也可以求解.首先来看 ...

最新文章

  1. 将页面元素置为不可修改Readonly,所有元素统一修改,统一调用
  2. HTML 30分钟入门教程
  3. Oracle数据库表空间占用过大的解决办法
  4. Pycharm中运行Python代码的几种方式
  5. 【转】SVN冲突出现场景
  6. 28.2. AndroidManifest.xml
  7. flex布局,属性用法
  8. sqlserver 2008r2 查看表结构及视图、版本及数据类型(字段)
  9. 用户调用机房收费下机中用到的策略与职责链解析
  10. 【Spring Securtiy】A granted authority textual representation is required
  11. php bouncy castle,基础才是重中之重~BouncyCastle实现的DES3加密~java通用
  12. java 中文大写金额_java编写的金额转中文大写
  13. git fatal: cannot lock ref ‘HEAD‘:unable to resolve reference‘refs/heads/main‘:reference broken
  14. 【机器学习入门】决策树算法(四):CART算法(Classification and Regression Tree)
  15. Java毕业设计_基于WEB的多媒体素材管理库的设计与开发
  16. Redis - PHP扩展 - phpredis - 安装和使用
  17. 16篇论文入选AAAI 2021,京东数科AI都在关注什么?(附论文下载)
  18. 树莓派笔记08—Python流水灯
  19. 魅族浏览器android,魅族浏览器,Flyme让原配更懂你
  20. CorelDRAW 2019.0安装教程(带安装包)

热门文章

  1. StoryBoard布局注意事项
  2. phpmyadmin教程
  3. AtCoder AGC002E Candy Piles (博弈论)
  4. VUE.JS 使用axios数据请求时数据绑定时 报错 TypeError: Cannot set property 'xxxx' of undefined 的解决办法...
  5. javascript ES6
  6. js判断display隐藏显示
  7. CF 2B The least round way DP+Math
  8. xcode armv6 armv7 armv7s arm64
  9. 中国移动OnetNet云平台 使用以太网传输数据流步骤
  10. C#引用C++ Dll 所有類型轉換的方式(转)