博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
构造 HDOJ 5400 Arithmetic Sequence
阅读量:5349 次
发布时间:2019-06-15

本文共 1627 字,大约阅读时间需要 5 分钟。

 

题意:问有多少个区间,其中存在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

你可能感兴趣的文章
Python capitalize()方法
查看>>
Daily Scrum M1 10-15
查看>>
C#访问修饰符
查看>>
消息成功失败回调demo
查看>>
laravel框架的增删改查
查看>>
CSS百宝箱
查看>>
互联网应用
查看>>
SPI bus master for System09 (2)
查看>>
[BZOJ1513][POI2006]Tet-Tetris 3D
查看>>
ABP框架系列之四十八:(Specifications-规范)
查看>>
浅谈JAVA集合框架(转)
查看>>
类似于bootstrap的后台系统框架
查看>>
数据链路层和物理层一些相关解释
查看>>
1、JavaScript基础
查看>>
5.Hibernate实现全套增删改查和ajax异步分页
查看>>
酷炫的响应式导航栏
查看>>
Android手机令牌教程
查看>>
20155201 网络攻防技术 实验九 Web安全基础
查看>>
MFC中 报错:error : bitmap file Res\tankBattle.ico is not in 3.00 format
查看>>
【C++】rand()函数,时间种子
查看>>