等差数列

LeetCode|413. Arithmetic Slices

我怕爱的太早我们不能终老 提交于 2019-12-05 13:39:20
A zero-indexed array A consisting of N numbers is given. A slice of that array is any pair of integers (P, Q) such that 0 <= P < Q < N. A slice (P, Q) of array A is called arithmetic if the sequence: A[P], A[p + 1], ..., A[Q - 1], A[Q] is arithmetic. In particular, this means that P + 1 < Q. The function should return the number of arithmetic slices in the array A. Example: A = [1, 2, 3, 4] return: 3, for 3 arithmetic slices in A: [1, 2, 3], [2, 3, 4] and [1, 2, 3, 4] itself. Solution 本题是一道动态规划问题。我们用动态规划的思想来解答这个问题。 这道题是要找出一个等差数列中有多少子等差数列。那么我们可以提出两个问题。 什么是等差数列以及等差数列最少需要几个数 一个任意数组有多少个子数组

等差数列(python)

匿名 (未验证) 提交于 2019-12-02 22:51:30
牛客网刷题: 题目描述 如果一个数列S满足对于所有的合法的i,都有S[i + 1] = S[i] + d, 这里的d也可以是负数和零,我们就称数列S为等差数列。 小易现在有一个长度为n的数列x,小易想把x变为一个等差数列。小易允许在数列上做交换任意两个位置的数值的操作,并且交换操作允许交换多次。但是有些数列通过交换还是不能变成等差数列,小易需要判别一个数列是否能通过交换操作变成等差数列 输入描述: 输入包括两行,第一行包含整数n(2 ≤ n ≤ 50),即数列的长度。 第二行n个元素x[i](0 ≤ x[i] ≤ 1000),即数列中的每个整数。 输出描述: 如果可以变成等差数列输出"Possible",否则输出"Impossible"。 示例1 输入 复制 3 3 1 2 输出 复制 Possible 解决方案 import sys s=sys.stdin.readlines() n=int(s[0].strip()) number=[int(i) for i in s[1].strip().split()] number.sort() d=number[1]-number[0] for i in range(n-1): if number[i+1]-number[i]==d: if i+1==n-1: print('Possible') continue else: print

[洛谷P4231] 三步必杀

。_饼干妹妹 提交于 2019-12-01 19:55:43
二阶差分好题 关于差分 :对于区间修改通常用到差分这一方法。 方法是 建立一个差分数组 \(a\) ,也就是原数列后一位减前一位的值 \((a[i] = a[i] - a[i - 1])\) 。 当某一个区间加上一个值 \(w\) 之后,该区间的左端点就会比左端点减一的值多 \(w\) ,而右端点加一就会比右端点的值少 \(w\) 。 所以对于修改的区间 \((l,r)\) , \(a[l] += w, a[r + 1] -= w\) ; 时间复杂度为 \(O(1)\) ,比数据结构优。 查询值的时候,只需要将差分数组做一遍前缀和即可。 原理是 当 \(a[l]\) 加上 \(w\) 时,做前缀和的时候从l一直到数列最后都会受到加 \(w\) 的影响, 因为会影响区间外的值,所以在右端点加 \(1\) 处减去 \(w\) ,来消除从右端点加一到数列最后的影响。 时间复杂度 \(O(n)\) ,比线段树等数据结构慢很多 所以一般当只查询最后结果时,用差分这一方法比较优。 关于本题 :可以很自然的想到差分这一方法。 但是区间修改时不是加上或减去同一个值,而是一个等差数列 怎么办呢? 考虑对于一个等差数列,它的差分数组很显然都是同一个值 而对于一个区间,每个点要加的值又是一个等差数列 所以需要知道 等差数列的差分数组 来统计 区间每个点要加的值 的 差分数组 怎样得到等差数列的差分数组

luogu洛谷P5534 【XR-3】等差数列

走远了吗. 提交于 2019-11-28 13:38:52
luogu洛谷P5534 【XR-3】等差数列 题目 题解 代码 暴力 公式 题目 这里: 【XR-3】等差数列 . 题解 比较水的入门题,暴力循环或者求和公式均可。 代码 暴力 注意long #include<stdio.h> int main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); long d=b-a,s=a; for(int i=1;i<c;++i)s+=d*i+a; printf("%ld",s); return 0; } 公式 #include <bits/stdc++.h> using namespace std; int main() { long long a,b,c; cin>>a>>b>>c; cout<<c*(a*2+(c-1)*(b-a))/2; return 0; } 来源: CSDN 作者: 无心之惩 链接: https://blog.csdn.net/weixin_43752675/article/details/100370575

NOIP模拟 20

坚强是说给别人听的谎言 提交于 2019-11-27 08:18:13
  来自liu_runda的善意         T1 周     究级难题,不可做,咕了。   T2 任      他为什么总强调没环啊?      他为什么总强调没环啊?      他为什么总强调没环啊?     ......     QAQ     因为他总是棵树,所以点的数量减去边的数量就是树的棵数。     越想部分分,越想不出正解。     真是妙极了   T3 飞     好奇为什么自己考场上没发现是让求逆序对     白给的40啊......没状态了          因为数状数组开不下,只能考虑从x的生成方式上突破     首先把逆序对数转化成 添加一个点时下标大于它的点的个数     发现x是a组等差数列的形式,所有数列公差又一定     那么每次贡献的变化是有规律可循的...     后一项贡献=前一项贡献-已经存在的等差数列数     注意判断第一串x,可能不是”完整“的等差数列,其贡献要在x[1]开始之后才减去。          于是只剩下首项的问题了     他的贡献难算。但是已经存在的点已知,可以求没贡献的点,也就是他前边的点。     1e5,树状数组就好了。     注意理解清楚树状数组到底是干什么用的     数列首项不好算,是个辅助工具。     所以只有位置<a的点需要塞到树状数组里     所以第一个x的位置如果>a,就别往里硬塞了。  

python判断等差数列

耗尽温柔 提交于 2019-11-26 23:33:46
import sys n = int(sys.stdin.readline().strip()) s = sys.stdin.readline() s = list(map(int, s.split(' '))) print(n) print(s) for i in range(len(s)-1): for j in range(i+1, len(s)): if s[i] >= s[j]: s[i], s[j] = s[j], s[i] for j in range(1, len(s)-1): if s[j] - s[j-1] == s[j+1] - s[j]: flag = 1 else: flag = 0 if flag == 1: print('Possible') else: print('Impossible')    来源: https://www.cnblogs.com/aixiao07/p/11335295.html

无聊的数列

我只是一个虾纸丫 提交于 2019-11-25 19:46:56
题目描述 维护一个数列{a[i]},支持两种操作: 1、1 L R K D:给出一个长度等于R-L+1的等差数列,首项为K,公差为D,并将它对应加到a[L]~a[R]的每一个数上。即:令a[L]=a[L]+K,a[L+1]=a[L+1]+K+D, a[L+2]=a[L+2]+K+2D……a[R]=a[R]+K+(R-L)D。 2、2 P:询问序列的第P个数的值a[P]。 输入格式 第一行两个整数数n,m,表示数列长度和操作个数。 第二行n个整数,第i个数表示a[i](i=1,2,3…,n)。 接下来的m行,表示m个操作,有两种形式: 1 L R K D 2 P 字母意义见描述(L≤R)。 输出格式 对于每个询问,输出答案,每个答案占一行。 输入样例 5 2 1 2 3 4 5 1 2 4 1 2 2 3  输出样例 6 说明/提示 数据规模: 0≤n,m≤100000 |a[i]|,|K|,|D|≤200 我们考虑,对于一段区间 [ l , r ] [l,r],我们只需要记录它的区间的首相和公差,就能将这个标记下传了 QwQ哇,那可以只使用这个线段树进行一个标记下传了(所以没有up函数) 这里展示一下pushdown的部分 f [ r o o t ] . d f[root].d表示公差, f [ r o o t ] . f i r s t f[root].first表示首相 因为