构造 HDOJ 5400 Arithmetic Sequence
题目传送门
题意:问有多少个区间,其中存在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相关推荐
- HDU 5400 Arithmetic Sequence
HDU 5400 Arithmetic Sequence /** HDU 5400 Arithmetic Sequence 直接预处理求解就好了 预处理找出以a[i]结尾最长的subArr长度(满足条 ...
- Arithmetic Sequence
Problem Description A sequence b1,b2,⋯,bn are called (d1,d2)-arithmetic sequence if and only if ther ...
- Arithmetic Sequence 三分,货仓选址,nth_element,__int128(济南)
题意 : 给一序列,每次操作选择一个数加一或者减一,需要将这个序列变成等差数列,问最小操作数 思路 : 数据范围很大又没有头绪,想到二分或者三分.对于不同的公差d,肯定是只有一个最优,两边的都比这个公 ...
- [HDOJ]1005. Number Sequence
数字游戏,如果硬说它有算法的话,那也只能说去找规律了. 初看本题的人,会觉得这这是一个简单的递归题目,其实我一开始也是这么想的,但后来提交了如下代码后我才明白. #include <iostre ...
- XTU 1278 Arithmetic Sequence
等差数列 题目描述 给一个整数数列,请判断是否为等差数列. 输入 第一行是一个整数T(1≤T≤100),表示样例的个数. 每个样例第一行是一个整数N(3≤N≤10000),表示数列元素的个数. 第二行 ...
- LeetCode 1027. Longest Arithmetic Sequence--笔试题--C++解法
LeetCode 1027. Longest Arithmetic Sequence–笔试题–C++解法 LeetCode题解专栏:LeetCode题解 我做的所有的LeetCode的题目都放在这个专 ...
- c语言序列sequence,Sequence
Sequence Time Limit:1000MS Memory Limit:65536K Total Submit:0 Accepted:0 Description The sequence 1, ...
- 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 ...
- Arithmetic Slices
这两天一直复习动态规划,就想到leetcode上刷刷题,easy难度的很少,大部分都是medium和hard.本题是第一道DP类型medium难度的题目,但是用其他的方法比如暴力法也可以求解.首先来看 ...
最新文章
- 将页面元素置为不可修改Readonly,所有元素统一修改,统一调用
- HTML 30分钟入门教程
- Oracle数据库表空间占用过大的解决办法
- Pycharm中运行Python代码的几种方式
- 【转】SVN冲突出现场景
- 28.2. AndroidManifest.xml
- flex布局,属性用法
- sqlserver 2008r2 查看表结构及视图、版本及数据类型(字段)
- 用户调用机房收费下机中用到的策略与职责链解析
- 【Spring Securtiy】A granted authority textual representation is required
- php bouncy castle,基础才是重中之重~BouncyCastle实现的DES3加密~java通用
- java 中文大写金额_java编写的金额转中文大写
- git fatal: cannot lock ref ‘HEAD‘:unable to resolve reference‘refs/heads/main‘:reference broken
- 【机器学习入门】决策树算法(四):CART算法(Classification and Regression Tree)
- Java毕业设计_基于WEB的多媒体素材管理库的设计与开发
- Redis - PHP扩展 - phpredis - 安装和使用
- 16篇论文入选AAAI 2021,京东数科AI都在关注什么?(附论文下载)
- 树莓派笔记08—Python流水灯
- 魅族浏览器android,魅族浏览器,Flyme让原配更懂你
- CorelDRAW 2019.0安装教程(带安装包)
热门文章
- StoryBoard布局注意事项
- phpmyadmin教程
- AtCoder AGC002E Candy Piles (博弈论)
- VUE.JS 使用axios数据请求时数据绑定时 报错 TypeError: Cannot set property 'xxxx' of undefined 的解决办法...
- javascript ES6
- js判断display隐藏显示
- CF 2B The least round way DP+Math
- xcode armv6 armv7 armv7s arm64
- 中国移动OnetNet云平台 使用以太网传输数据流步骤
- C#引用C++ Dll 所有類型轉換的方式(转)