- 博客(16)
- 收藏
- 关注
原创 Codeforces Round #740 D.Up the Strip(dp + 整除分块 / 因子递推)
D1. Up the Strip (simplified version)D2. Up the Strip思路:D1.dp[i]为从1经过两种操作变为i的方案数。则dp[i]=∑j=1i−1dp[j]dp[i] = \displaystyle\sum_{j=1}^{i - 1} dp[j]dp[i]=j=1∑i−1dp[j] + ∑j=2idp[ij]\displaystyle\sum_{j=2}^{i}dp[\frac{i}{j}]j=2∑idp[ji]前者用前缀和维护,后者显然为整除分
2021-08-27 22:18:15
170
原创 HDU 1540 (线段树维护最长连续子区间 | 树状数组 + 二分)
HDU 1540题意:开始有1~n的完好的村庄,给你三种操作:D x 摧毁第x个村庄R 恢复上一个摧毁的村庄Q x 询问与x(包括自身)连接的完好村庄个数思路:(1)线段树维护连续子区间。每个结点包含lsum和rsum,分别记录当前结点对应的区间 [L, R]的最长前缀连续区间长度和最长后缀连续区间长度。操作D、R对应单点更新,Q为区间查询,重点为线段树的区间合并。(2)树状数组+二分。普通线段树常数太大,在本题中不断进行单点更新和查询,会TLE。树状数组+二分查找,二分寻找与点x连续的最远
2021-08-05 15:07:07
253
原创 Miller-Rabin素数测试算法和PollardRho 算法
一.Miller-Rabin素数测试算法:快速判断一个1e18范围内的数是否为素数,对其进行Miller-Rabin素数测试,可以大概率判断其是否为素数,出错的概率为1/4的k次方,k为测试次数。故当测试次数越多,其出错概率越小。1.基础理论(1)费马小定理:当p为质数,且a与p互质时,有a^(p-1) = 1(mod p)。(2)二次探测定理:如果 p 是一个素数,0 < x < p, 则方程 x^2 =1(mod p) 的解为 x = 1 或 x = p - 1。2.快速乘当测
2021-08-03 21:55:40
344
原创 DZY Loves Sequences (dp)
题目链接题意:给你一个数组,只能改变数组中一个数,找到最长严格递增子列,输出其区间长度。思路:1.dp,对于第i个数,用dp[i][0]保存左边严格递增区间长度(包括i),用dp[i][1]保存右边严格递增区间长度(包括i),若a[i-1] < a[i+1] - 1,则可改变a[i]来合并左右两区间。2.预处理得到数组中所有严格递增子列并保存其起始位置k、b,当两相邻子列(1)其中任意一个子列长度为1,则可以合并。(2)前一个子列起始位置为k1,b1,后一子列起始位置为k2,b2,若a[b
2021-07-06 12:22:26
131
原创 CodeForces - 835C Star sky(二维前缀和)
题目链接题意:坐标系[0,100]×[0,100]有n个星星,亮度为si,每增加一秒,星星亮度+1,当si+1>c时,亮度变为0,给定一定矩阵的左下角、上角的点坐标和时间,求矩阵内星星的亮度和。本来用结构体保存,再按坐标x值从小打大排序;对于左下角的坐标x值,二分查找第一个小于等于的点,再暴力计算在矩阵范围内的点的亮度值,但是n个点中可以有相同坐标的点,就毫无疑问的TLE了。因为x,y值很小,正确做法是计算二维前缀和保存当前亮度的点的个数,每次询问的答案为矩阵范围内不同亮度的个数 * 对应的亮度
2021-05-24 15:38:04
251
原创 2019CCPC湖南全国邀请赛 C - Chika and Friendly Pairs(莫队+离散化+树状数组)
题目链接题意:给你一个序列,m次询问区间 [L,R] 内 i<j且 |ai-aj|<=k的友好对数的个数。思路:莫队+离散化+树状数组将序列元素+k,-k,和原本的值保存在一个数组中,由于序列元素很大,需离散化处理;将询问区间存储,离线状态下用莫队进行查询;不断插入、删除元素,用树状数组(用树状数组保存比较简单)求满足条件的区间元素个数并不断更新元素的个数,逐个求得区间答案。code:#include <algorithm>#include <cmath>
2021-05-19 00:32:47
192
原创 中国剩余定理+模板
中国剩余定理是一种用于求解诸如形式的同余方程组的最小非负整数解x的定理,其中,a1,a2,…,an两两互质。解法:大佬博客令M=a1a2…anMi= M / ai(1<=i<=n)Mi ti=1(mod ai),ti为Mi在模ai下的逆元。因为Mi与ai一定互质,但ai不一定为质数,可以用拓展欧几里得求逆元,不能用费马小定理求。由此构造一个解 x0= b1 M1 t1+ b2 M2 t2+…+bn Mn tn;任意解即为x=x0+k*M,最小正整数解为x%M。模板题:洛谷P
2021-05-01 11:34:23
291
原创 最大得分(三维DP)
题目链接Description你有一个长度为n的a序列,要求你将这个序列分成 k 个部分。要求:每一个部分都非空,部分与部分不能重叠每一个部分都是一串连续下标的数每一个部分的分数等于这个部分的 gcd ,输出一个sum表示这个大小为n的序列,分成k 部分所获得的最大分数。Input第一行包含两个整数,分别是n,k (k <=n <=104,1<= k <= 50),n 表示a 序列的大小,k 表示这个序列应该要被分成的部分数。第二行n 个整数 ai(1<=
2021-04-30 21:10:51
208
1
原创 codeforces1509 C. The Sports Festival(区间dp)
题目链接题意:给与n个数字a1、a2、…、an。di=max(a1,a2,…,ai)−min(a1,a2,…,ai) ,对序列a重新排列,使d1+d2+⋯+dn 得知最小。思路:最容易看成是构造题了,构造了老半天没出来…看了大佬题解,理解了老长时间才明白(蒟蒻)。排序后区间dp,dp[l][r]表示区间[l,r]的和的最小值。对于dp[l][r]可以由两个状态转移来,[l+1,r]到[l,r],[l,r-1]到[l,r],排序后s[j]表示区间最大值,s[i]表示最小值,所以dp[i][j] =
2021-04-26 00:21:47
313
原创 Codeforces Round #381 (Div. 2) A - Alyona and copybooks(思维)
题目链接题意:现有n个本子,现需买k个本子使n+k被4整除。其中有三种方案:(1)花费a购买一个本子(2)花费b购买两个本子(3)花费c购买三个本子最少需要花费多少钱购买k个本子使n+k被4整除。思路:n对4取余,得到最少需要的个数。余数为0时,不需要再购买;余数为1时,最少需要购买3个,可行的方案:(1)花费3a ,得到3个(2)花费a+b,得到3个(3)花费c,得到3个,同样被4整除上面三种包含了所有花费最低的方案,也可以花费b+c,3a+c等,同样n+k被4整除,但花费比上面三
2021-04-25 23:56:32
91
原创 Codeforces Round #716 (Div. 2) C. Product 1 Modulo N(质数性质)
题目链接题意:给定n,从1到n-1中找到最长的子序列,它们的乘积模n为1。输出子序列长度和其中元素。思路:假设得到得乘积为sum,如果模n为1,则sum=kn+1;必然有sum和n互质(如果sum和n有大于1的因子a,则有a * (sum/a)=k * a(n/a)+a * (1/a),显然是不成立的),所以子序列中元素必须与n互质。将1到n-1中所有与n互质的数相乘,得到在模n下的数p。若p=1,则该子序列满足;若p不为1,因为p与n互质(sum=kn+p,因为gcd(k*n+p,n)=1,故gc
2021-04-25 18:30:22
102
原创 2019 ICPC Asia Yinchuan Regional G - Pot!!(线段树)
题目链接思路:单纯的线段树区间修改和区间最值查询,只不过需要建立四个线段树来分别存储。(ind数组存储素数对应线段树的标号,刚开始开了数组长度为5,然后存了素数7对应的线段树下标,即ind[7],找了n年bug…)code:#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <ma
2021-04-21 00:32:12
82
原创 CodeForces - 295A(思维)
题目链接Description:Greg has an array a = a1, a2, …, an and m operations. Each operation looks as: li, ri, di, (1 ≤ li ≤ ri ≤ n). To apply operation i to the array means to increase all array elements with numbers li, li + 1, …, ri by value di.Greg wrote do
2021-04-20 00:43:37
189
原创 Codeforces Round #714 (Div. 2)
A题题目链接题意:找到一个n的全排列,有k个i(1<i<n)使得 ai>ai−1 且ai>ai+1,没有输出-1。思路:找到n为偶数和奇数时,对应的最大的k值,若满足k>=n,则存在数列,然后先确定n-k+1~n的位置,再确定其他元素位置。code:#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include &
2021-04-14 13:14:25
117
原创 2018年湘潭大学程序设计竞赛G题 又见斐波那契(矩阵快速幂)
题目链接题目描述这是一个加强版的斐波那契数列。给定递推式求F(n)的值,由于这个值可能太大,请对109+7取模。输入描述:第一行是一个整数T(1 ≤ T ≤ 1000),表示样例的个数。以后每个样例一行,是一个整数n(1 ≤ n ≤ 1018)。输出描述:每个样例输出一行,一个整数,表示F(n) mod 1000000007。思路:由数据范围知道是矩阵快速幂求解,推出初始矩阵为A=[111111100000001331000121000011000001]\begin{gathe
2021-04-07 18:14:18
138
原创 洛谷p1939矩阵加速(数列)(矩阵快速幂模板题)
洛谷P1939(矩阵快速幂模板题)题目链接题目描述已知一个数列 aa,它满足:求 a数列的第 n 项对 109+7 取余的值。思路:数据范围很大,直接递推肯定TLE,由递推想到矩阵快速幂,解题的关键在于得到目标矩阵和构造初始矩阵。一定要注意矩阵的左乘和和右乘!code#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <i
2021-04-05 23:18:00
213
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人