自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

扩展の灰(Extended Ash/Cooevjnz)

御坂的抱枕,名字就叫灰哦,御坂抱着抱枕这样说道。

  • 博客(29)
  • 资源 (1)
  • 收藏
  • 关注

原创 51Nod1364 最大字典序排列

题目看这里一道比较简单的贪心题容易想到从前到后确定每一位我们可以用一个splay来维护当前未确定的部分的顺序假设当前剩下k次操作机会那么我们可以求出splay中前k+1个元素中的最大元素i,令k减少rank(i),让后将其输出并从splay中删掉最后k=0时,输出splay中剩余元素比题解那个线段树好写多了,主要是不用想,而且splay还挺快的#include<stdio.h>#in...

2018-04-27 22:03:39 277

原创 51Nod1537 分解

题目看这里基于一个思想,如果x=y+1 那么一定有x%M=y+1%M可以发现1+√2和复数有着类似的运算法则,可以用快速幂加取模来计算所以我们考虑用几个不同的模数来判断,如果都有x=y+1,那么就可以认为问题有解#pragma GCC opitmize("O3")#pragma G++ opitmize("O3")#include<stdio.h>#include<stri...

2018-04-27 21:42:02 218

原创 51Nod1353 树

题目看这里题意很简单,大概是有多少种删边方法使得每一块大小不小于k我们设一个树形dp,f[i][j]表示i的子树中,i所在联通块的大小为j的方案数有多少特别的,我们用f[i][0]表示∑f[i][j] (j>=k)那么可以写出以下转移:f[x][i+j]+=f[x][i]*f[v][j] (j>0)f[x][i]=f[x][i]*f[v][0]答案就是f[root][0]#includ...

2018-04-27 21:08:43 310

原创 51Nod1257 背包问题 V3

题目看这里01分数规划入门题这道题有非常经典的错误解法:按照pi/wi排序这样是不能保证答案最大的,反例(本体样例)已经有了那么我们来考虑怎么做首先我们二分这个答案ans让后我们给每个物品i设置一个权值v[i]=p[i]-ans*w[i]所有物品按照v排序,取前k大求和那么如果ans是正确答案,那么显然,这个和S=0如果ans大于正确答案,S如果ans小于正

2018-04-27 20:00:48 231

原创 51Nod1225 余数之和

题目看这里数论好题我们以前在做反演的时候,常常用到一个叫做分块除法的东西具体来说,[n/i]只会有不超过√n种取值那么这题也可以这样做 因为n%i=n-[n/i]*i我们可以对i分块,对于[n/i]取值相同的一起计算,那么每次就是一个等差数列求和,总复杂度O(√n)#include<stdio.h>#include<string.h>#include<algori...

2018-04-27 19:45:24 249

转载 破窗理论

“破窗理论”是法国19世纪经济学家巴斯夏作为批评的靶子而总结出来的,见其著名文章《看得见的与看不见的》,下面是这一段的译文: 你是否见过这位善良的店主——詹姆斯·B·萨姆纳先生生气的样子?当时,他那粗心的儿子不小心砸破了一扇窗户玻璃。如果你置身于这样的场合,你恐怕会看到这样的情景,每个看客,看到这种局面的每个人,都会不约而同地如此这般地安慰这位不幸的店主:“不论发生什么不幸的事,天下总有人会得到好...

2018-04-27 19:37:09 1007

原创 51Nod1215 数组的宽度

题目看这里各种求和最好玩的啦看到题目就应该知道要单独考虑每个元素的贡献那么一个元素i的贡献肯定是a[i]*(l[i]-i)*(i-r[i]),这里l,r分别表示左边和右边第一个比i大的数的位置最大值部分的贡献算完了最小值是类似的考虑怎么求这个l和r,直接上单调栈就可以了(code很难看当时不知道在想什么写成这样)#pragma GCC opitmize("O3")

2018-04-27 17:38:05 252

原创 51Nod1204 Parity

题目看这里+一看求和就知道是要先用前缀和的让后看到类似相等和不相等的条件,可以考虑并查集当然这道题由于变量的值一定是0,1所以关系只有不等号也有反传递性,可以直接拆点来做如果s[i]=s[j]那么我们就将i,j所在的并查集合并,将i'和j'所在的并查集合并否则我们将i'和j合并,i和j'合并当一次合并之后发现i和i'在同一个集合里时,直接输出退出#pragma GC

2018-04-27 17:29:45 241

原创 51Nod1158 全是1的最大子矩阵

题目看这里想到了NOIP普及组当年那道题做法非常显然,O(n^2)枚举矩形的上下边界,让后用一个dp+前缀和就搞定了f[i]表示以第j列作为结尾的最大子矩形的宽,那么如果第i列在[l,r]的范围都是1,那么f[i]=f[i+1],否则f[i]=0答案就是max{(r-l+1)*f[i]}#pragma GCC opitmize("O3")#pragma G++ opitm

2018-04-27 17:19:44 293

原创 51Nod1120 机器人走方格 V3

题目看这里一个数学题,答案就是卡特兰数*2求卡特兰数要用到组合数求法f[n]=C(2n-2,n-1)/n由于模数较小,可以Lucas定理直接做,但是这样是有问题的因为n不一定和模数互质,但是还是A了,数据比较水#pragma GCC opitmize("O3")#pragma G++ opitmize("O3")#include#include#include#def

2018-04-27 17:10:46 305

原创 51Nod1084 矩阵取数问题 V2

题目看这里一个经典的dp题,典型的错误思想就是做两遍我们考虑直接做,f[i][j][x][y]表示第一次取道i,j这个位置,第二次到了x,y这个位置考虑这个i,j和x,y分别是从哪里转移过来,就可以得到方程f[i][j][x][y]=max(f[i-1][j][x-1][y],f[i][j-1][x-1][y],f[i-1][j][x][y-1],f[i][j-1][x][y-1]

2018-04-27 17:03:02 323

原创 51Nod1294 修改数组

题目看这里一个非常好的结论题发现题目要求要严格递增而且要求要正整数,所以直接做LIS不行我们令原序列s变为s[i]-i那么如果s[i]-i是一个负数,肯定不符合题意答案加一去掉所有负数以后,就可以对s做一个LIS了,这里LIS可以是严格非降的就可以了#include#include#include#define inf 0x7f7f7f7fusing names

2018-04-27 16:16:29 264

原创 51nod1122 机器人走方格V4

题目看这里看一看知道可以dp设f[i][s1][s2][s3][s4]表示走了i步,每个机器人分别在哪个格子里用矩阵优化但是发现状态数过于巨大,会TLE考虑设f[i][j][k]表示走了i步,从j格子走到k格子的方案数那么显然f[i]=T^i 其中T是全1矩阵减掉单位矩阵那么可以快速幂求出f接下来枚举4的全排列g,表示第i个机器人走到g[i]答案就是∑∏f[i]

2018-04-27 11:49:53 267

原创 多项式相关模板#1

一个模板,功能大概就是加减,乘法,求逆和除法,后面(可能)会加上exp,ln,多点求值,插值,取模#pragma GCC optimize("O3")#pragma G++ optimize("O3")#include#include#include#define N 280010#define M 998244353#define LL long longusing na

2018-04-23 16:30:06 187

原创 51Nod1514 美妙的序列

题目看这里需要开一个新的分类了,生成函数相关这道题确实非常的入门分析得知,不合法方案就是存在一个i那么设f[n]表示n的答案,可以得到f[n]=n!-∑f[i]*(n-i)!  (i移项得到∑f[i]*(n-i)!=n! (i发现可以生成函数设F(x)=∑f[i]*x^i, G(x)=∑i!*x^i (i=1..∞)根据上面那条式子得到F(x)*G(x)=G(x)-

2018-04-23 16:10:09 424

原创 Jzoj5674 香槟

有一棵 n 个节点的树,初始时所有节点都为空。Alan 和 Bob 在树上玩游戏,双方轮流进行,Alan先手。每轮中,Alan 可以选择一个空节点 x,在 x 上放一个波澜哥;Bob 每轮可以选择一个空节点 y,将 y 节点以及所有与 y 相邻的节点上都放置一个面筋哥。可能存在节点既有波澜哥,又有面筋哥。当所有节点非空时,游戏结束。由于面筋哥比较得劲,Alan 和 Bob 认为如果一个节点上有

2018-04-20 21:43:27 388

原创 Jzoj5669 排列

有 n 个数 x1 ~xn 。你需要找出它们的一个排列,满足 m 个条件,每个条件形如 x_a 必须在x_b之前。在此基础上,你要最大化这个排列的最大子段和。神题,这里先orz一下当场切掉的神犇wjw看下数据范围,n构图方式,每个点拆开成a[i],b[i]如果x[i]>0,那么S->a[i],b[i]->T连权值为x[i]的边否则,a[i]->b[i]权值为-x[i]的边对

2018-04-20 21:29:29 240

原创 Jzoj5665 奥立卡的诗

终于又遇到SAM的题了好好玩,而且就这道题让我弄清楚了广义SAM和Trie上SAM的区别其实两者是没有多少区别的,不过Trie上SAM可以更快关于Trie上SAM,是用bfs的方法来构建的,相比起广义SAM用dfs建少了一个深度之和的部分但是如果原题给的就是Trie那么就只能用bfs了,因为dfs会被卡成O(n^2) (考虑一个扫把)回到本题,简化一下式子发现这道题求的是不同子串的

2018-04-20 21:18:25 274

原创 Jzoj5644 凫趋雀跃

经典套路容斥题直接dp做是O(TxTyRk)的可以60分满分做法又要用到经典的容斥法我们设f[i][x][y]表示走i步,走到x,y的方案(不考虑不合法向量)设g[i][x]表示走了i步不合法的向量,走到了(x,x)的方案数二项式反演得Answer=∑(-1)^i*C(R,i)*g[i][x]*f[R-i][Tx-x][Ty-x] 考虑f如何计算,因为x,y两维是独立的

2018-04-20 21:06:31 296 1

原创 Jzoj5661 药香沁鼻

有依赖关系的树形背包,算是又积累了一种做法一个经典的做法就是设f[x][j]表示在x子树内,容量为j的最大获利那么转移可以写成 f[x][j]=max{f[x][j],f[x][j-k]+f[v][k]} v是x的子树我们在dp时记录背包的剩余空间,就可以得到80分一个更好的优化就是用dfs序,复杂度直接下降为O(nm)当然最快的做法还是直接在树上做,我们还是设f[x][j]表

2018-04-20 20:56:36 297

原创 Jzoj5662 尺树寸泓

平衡树的问题,很容易想到中序遍历那么我们给每一个节点记录一下中序遍历中它子树所在的区间,一次旋转显然只会改变两个节点的值对于询问我们用线段树区间求积就可以了#pragma GCC optimize("O3")#pragma G++ optimize("O3")#include#include#include#define N 200010#define M 100000

2018-04-20 20:49:30 254

原创 Jzoj3351 神牛养成计划2

前文再续,书接上回,话说神牛yxr成功培育出神牛细胞,可最终培育出来的生物体却让他大失所望……后来,他从某GD女神 牛处知道,原来他培育的细胞发生了基因突变,原先决定神牛特征的基因序列都被破坏了,神牛yxr很生气,但他知道基因突变有低频性,说不定还有一些优秀基因没有突变,那么他就可以用限制性核酸内切酶把它们切出来,然后再构建基因表达载体什么的,后面的你懂的。神牛yxr现在知道了N个细胞的D

2018-04-20 20:40:03 253

原创 Jzoj5622 table

p一道非常有意思的题目如果将第一行看做一个多项式,那么每过一行就是乘上了一个(a+bx)那么我们可以求出(a+bx)^p的逆,让后就可以求出第一行当然也可以有简单做法首先如果推下式子,很容易知道第p行到第x行的转移 (x>p)f[x][y]=∑f[p][y-i]*a^(x-p-i)*b^i*C(x-p,i) (0那么我们考虑一下怎么用第p行推出p行上面的东西我们可以

2018-04-20 20:31:00 261

原创 Jzoj5608 Subset

这道题非常有意思首先我们可以发现,对于一个合法的三元组我们可以找到一个大小小于3的下标集合S与之对应那么我们就来考虑找到所有合法的这样的S当|S|=1时,显然都是成立的当|S|=2时,我们只需要保证s中两个元素i,j不满足a[i]考虑计算不满足的方案,可以用cdq分治+fenwick完成当|S|=3时,我们直接计算比较困难,我们考虑两种不合法的情况1.存在一个元素x满足

2018-04-20 20:16:45 277

原创 Jzoj5600 Arg

给出一个长度为 m 的序列 A, 请你求出有多少种 1...n 的排列, 满足 A 是它的一个 LIS.dp套dp好题!我们先要考虑怎么搞一个状态出来考虑做lis的两种方法:1.设f[i]表示做到i的最长子序列长度2.设f[i]表示长度为i的上升子序列最后那个数最小是多少第一种方式不好设状态,我们考虑第二种显然,如果知道f里有哪些数字,就可以还原f那么我们设一个状态

2018-04-17 22:06:19 213

原创 Jzoj5603 xiz

给定字符串 S 和 T。串A和串B匹配的定义改为:存在一个字符的映射,使得A应用这个映射之后等于B,且这个映射必须为一个排列。A=121, B=313,当映射为{1->3, 2->1, 3->2}时A'=B,可以匹配A=212, B=313,当映射为{1->1, 2->3, 3->2}时A'=B,可以匹配A=232, B=313,当映射为{1->2, 2->3, 3->1}时A'=

2018-04-17 21:50:27 302

原创 Jzoj5605 Zkb

给定一个长度为 n 的正整数序列 a 1 ...a n . 现在有 m 次操作, 分为两种:• 1 l r t: 将区间 [l,r] 降序排序 (t = 0) 或升序排序 (t = 1)• 2 l r: 询问区间 [l,r] 内元素之积的十进制下最高位雅礼集训的题目,当时因为空间开小了爆零了先考虑一下询问,我们发现并不好直接做,所以可以对原数取log10,最后询问区间和的小数部分即可让后现在问题就...

2018-04-17 20:17:32 320 2

原创 Jzoj5619 重围

贪心的题目,但是其实并不是特别好想我们要先将所有怪物分成两类,一类是带有正收益的,一类是带有负收益的,显然应该先击杀第一类对于第一类怪物,如果我们当前能力值足够击杀一直怪物那么我们应该立刻击杀,所以可以按照Ai来排序对于第二类怪物,如果我们最后可以将这些怪物全部击杀,那么剩下的魂力值是肯定的,记为C'那么将这个过程倒过来,我们可以视为每次消耗Bi的魂力,让后恢复Ai点魂力,这就变成

2018-04-17 20:09:21 147

原创 Jzoj5636 Power

近期没有写过博客感觉要死了->重返jz深造一道区间查询的问题,因为模数不是质数,我们考虑利用指数循环节这个东西:x^k=x^(k%phi(M)+phi(M))%M 这里要求k>=phi(M)那么可以写成Ans[l,r]%M=x^(Ans[l+1,r]%phi(M))%M由于phi的迭代会在logn次收敛为1,所以我们可以直接递归来做先用线性筛筛出10^7以内的phi值,大过这个的就分解...

2018-04-17 19:59:10 269

E文本加密器

自己做的一个有趣的东西,可以将一段文字加密 目前暂不支持中文和非文本文件(目前主要就是加密code) 具体描述参照:https://blog.csdn.net/JacaJava/article/details/81807314

2018-08-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除