摘要: 传送门 分析 我们设S[i]表示到第i个数为止一共有多少个数在集合Z之中,最终答案就是S[max]-S[min]的最小值。所以我们不难发现对于每一个[ai,bi]都表示S[bi]-S[ai-1]>=ci,而我们又知道0<=S[i]-S[i-1]<=1,所以建图策略便是每一个ai向bi连一条权值为ci 阅读全文
posted @ 2018-08-21 19:33 水题收割者 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 定义:如果一个系统由n个变量和m个约束条件组成,形成m个形如ai-aj≤k的不等式(i,j∈[1,n],k为常数),则称其为差分约束系统。 我们知道差分约束系统是借助于最短路实现的,那我们在知道了定义之后就来看一下如何将几个不等式放到图上。 假设我们有一个不等式a-b<=c,那我们可以将它变为a<= 阅读全文
posted @ 2018-08-21 19:24 水题收割者 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 传送门 分析 通过小学数学我们可以知道对于k个数,我们取它们的中位数x时可以使答案最优。所以我们枚举每一个连续的长度为k的区间,用treap维护,求出所有数都变成x的花费。注意在这里treap还需要记录它的子树的值的和以便最后计算答案的时候使用。具体实现见代码。记得开long long。 代码 阅读全文
posted @ 2018-08-20 17:06 水题收割者 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 传送门 分析 我看到这个题的第一反应使用莫队水过去,于是我考虑建立一棵权值线段树,每一次从里面插入或删除一个数,然后查询,但是复杂度是O(n√nlogn),明显不行。由于这是在一个区间查询数量,所以可以考虑用主席树来维护。建树过程不必说了,查询过程我们是在查询是不是有一个点的值大于k,所以我们每一次 阅读全文
posted @ 2018-08-20 10:52 水题收割者 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 给你一个字符串,求既是它的前缀又是它的后缀的子串个数。 分析 这个题很明显是kmp的nxt数组的应用(为了显得我很厉害不妨假装它是border的应用),因为nxt[i]表示1~i-1的最长的既是前缀又是后缀的子串的长度,所以我们用nxt数组递归求解就行了。 实际挺好理解的,自己写写 阅读全文
posted @ 2018-08-19 15:51 水题收割者 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 有n个木棍,让你选4根使得组成的矩形的周长的平方除以面积最小。 分析 这个题看起来就是一个需要证明的贪心,下面我们来证明一下: 所以我们只需要枚举一边所有的a的可能值,然后b就是比a大的边中最小的,复杂度O(n)。总复杂度O(nlogn)。 代码 阅读全文
posted @ 2018-08-19 09:13 水题收割者 阅读(484) 评论(0) 推荐(0) 编辑
摘要: 传送门 分析 首先我们不难发现交换两棵子树,它们自身的逆序对个数是不变的,改变的只是由一棵子树的x和另一棵子树的y组成的二元组(x,y),所以我们可以考虑使用线段树合并。我们对于每一个叶子节点建一棵权值线段树,然后将他们一一合并,而对于每一个节点是否旋转左右儿子只需要比较这两种情况产生的逆序对个数即 阅读全文
posted @ 2018-08-18 19:18 水题收割者 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 传送门 分析 我们首先要记录一个pre[x]表示上一个颜色和x相同的位置。然后我们枚举所有区间的右端点。我们发现对于每一个新的端点x,会导致pre[pre[x]]+1到pre[x]这一段区间的值减w[col[x]],导致pre[x]+1到x这一段区间的值加w[col[x]]。所以我们只需要维护这些信 阅读全文
posted @ 2018-08-18 09:37 水题收割者 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 定义n-magic为从左往右,偶数位置均为n,奇数位置不为n的一类数。求出[a,b]内所有可被m整除的d-magic个数。 分析 显然是数位dp,我们用dp[i][j][k]表示考虑到第i位,小于还是等于范围,对m取模的余数为k的时候的个数,然后我们枚举所有满足情况的j(i为奇数则 阅读全文
posted @ 2018-08-17 16:36 水题收割者 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 传送门 分析 首先这是一个询问一段区间内的个数的问题,所以我们可以用差分的思想用sum(R)-sum(L-1)。然后我们考虑如何求出sum(n),我们用dp[i][j][k][t]表示考虑到第i位,最后一个数是j,是否已经小于n和是否已经考虑完前导零。至于转移和一般的套路一样,详见代码。注意最后记得 阅读全文
posted @ 2018-08-17 09:43 水题收割者 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 给你一棵树,可以染m种颜色,现定义一种特殊的颜色K,一棵树上最多能有x个特殊颜色。如果一个节点为特殊颜色,那么他相邻的节点的值只能选比K小的颜色,问一共有多少种染色方案。 分析 不难想出这是一个树型dp,用dp[i][j][k]表示考虑第i个点所选的颜色的种类为j,共用了k个特殊颜 阅读全文
posted @ 2018-08-16 21:33 水题收割者 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 有n个人n*m张牌,每个人分m张牌。每个人有一个自己喜欢的数值,如果他的牌中有x张数值等于这个值则他的高兴度为L[x],求怎样分配牌可以使得所有人的总高兴度最大。 分析 我们发现每一个人只有他喜欢的值对他有影响。所以我们统计出喜欢值x的人有多少和有多少值为x的牌,对于每一个x设dp 阅读全文
posted @ 2018-08-16 09:54 水题收割者 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 有n本书,最多k次操作,每次操作可以把一本书拿出来,放到一个位置去,有一个指标较mess度,他是书的高度的段数,连续的书高度一样算一段,现在给你最先开始各个位置上的书的高度,求操作后最小的mess度。 分析 首先我们要注意一个非常非常重要的条件就是书的高度的范围很小。所以我们不由想 阅读全文
posted @ 2018-08-15 20:26 水题收割者 阅读(342) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 有n个带有颜色的方块,没消除一段长度为x的连续的相同颜色的方块可以得到x^2的分数,让你用一种最优的顺序消除所有方块使得得分最多。 分析 首先不难看出这是一个区间dp,于是我们考虑如何设计状态。我们设dp[i][j][k]表示考虑区间[i,j],从j往后有k个方块和第j个颜色是相同 阅读全文
posted @ 2018-08-15 11:11 水题收割者 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 有一个大区间和n个小区间,每个小区间都有一个代价,求最少付出多少代价可以使得小区间完全覆盖大区间。 分析为了方便起见我们先将s变为2,其它的位置都对应更改以便后期处理。我们考虑以t1为第一关键字,t2为第二关键字将所有奶牛排序。用dp[i][j]表示考虑到第i只牛,覆盖到点j最少需 阅读全文
posted @ 2018-08-14 17:43 水题收割者 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 给你一些书的高度和宽度,有一个一列三行书柜,要求放进去书后,三行书柜的高的和乘以书柜的宽度最小。问这个值最小是多少。 分析 我们可以先将所有书按照高度降序排好,这样对于每一层只要放过书高度边不会改变。我们设第一本书放在第一层,用dp[i][j][k]表示考虑到第i个,第二层的厚度为 阅读全文
posted @ 2018-08-14 13:26 水题收割者 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 问讲一个大小为4*n的棋盘用无数1*2的骨牌不重叠覆盖有多少种方案。 分析 我们考虑可以将长为n的棋盘分为两块,一个大小为n-i,另一个大小为i,而为了避免对于不同的i构造出相同的情况,我们必须使长为i的那一半棋盘是一种不可分离的情况,即对于这种情况去掉其中的任意一行均不合法。我们 阅读全文
posted @ 2018-08-14 08:11 水题收割者 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 给你m个机器,n个数,每个机器可以给n个数的某一段排序,求最少使用几个机器,保证可以把这个n个数排好序 分析 我们可以想到dpij表示考虑前i个机器让最大的数到达点j至少需要使用多少个机器,转移为: dp[i][j]=min{dp[i][j],dp[i-1][j'](s[i]<=j 阅读全文
posted @ 2018-08-13 07:59 水题收割者 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 有n个方块,有1,2,3,4四种颜色对其进行染色,求1,2颜色的方块个数均为偶数的方案数对10007取模的值。 分析 我们假设1表示这个颜色个数是奇数,0表示是偶数,所以对于所有状态我们可以分为四种,每种对应一个二元组 ,二元组的第一项表示颜色1,第二项表示颜色2,这四种分别是(1 阅读全文
posted @ 2018-08-12 18:59 水题收割者 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 现在有 n个人,m个党派,第i个人开始想把票投给党派pi,而如果想让他改变他的想法需要花费ci元。你现在是党派1,问你最少花多少钱使得你的党派得票数大于其它任意党派。 分析 我们枚举i,表示除了自己之外的其它任何党派最多得票数不超过i,而我们每次只需要改变一个党派中需要花费的钱最少 阅读全文
posted @ 2018-08-12 15:56 水题收割者 阅读(244) 评论(0) 推荐(1) 编辑
摘要: 看来我还是太菜了,这么一道破题做了那么长时间...... 传送门 分析 我首先想到的是用状压dp来转移每一个人是否放走的状态,但是发现复杂度远远不够。于是我们考虑区间dp,dpij表示i到j区间的所有罪犯全部放走的最小花费,于是我们可以将一个区间(i,j)分为(i,k-1),(k+1,j)和k这个点 阅读全文
posted @ 2018-08-12 11:02 水题收割者 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 给出由1~n组成的序列,每次可将一个区间翻转。问如何从1~n的递增序列变成给出的序列,输出操作次数以及每次操作的区间。最多翻转3次,保证有解,输出任意方案即可。 分析 我们对于每一次翻转只考虑枚举所有可能的点,即我们找出每一段连续区间的两个端点,然后枚举选取这些端点中的哪两个,之后 阅读全文
posted @ 2018-08-09 19:11 水题收割者 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 有编号1~n的星球,在不用的星球间共有m个传送门,任意两个星球间传送门不超过1个,每个传送门需要花费一定的时间,但是在某时刻会在某星球有旅客到达,这时要一定等到没有旅客到达的时候才能出发,问从1走到n最少花费时间是多少。 分析 首先我们先考虑一个贪心策略,如果到达点i的时间有a和b 阅读全文
posted @ 2018-08-08 17:44 水题收割者 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 有2*n个位置,这些位置有的已经填上了数,有的还没有(用?表示),现在让你在还没有填上数的填0~9中的任意数,使得前n个数的乘积等于后n个数的乘积,问有多少种方案。 分析 首先这个题 并没有取模,所以我们要使用高精度。在这个题中我为了加速,将朴素的高精度变成了5个long long 阅读全文
posted @ 2018-08-08 08:53 水题收割者 阅读(332) 评论(0) 推荐(0) 编辑
摘要: 传送门 分析 图1 我们假设我们现在有两个向量(2,3)和(4,2),将他们所能到达的点在几何画板上画出来,再将这些点用红线连起来,在将横坐标相同的点用蓝线连起来便能得到图1,就此我们可以发现可以用绿色的两个向量取代之前的两个向量,并且发现有一个向量可以是(0,B)的形式。在发现这个之后我们现在的任 阅读全文
posted @ 2018-08-07 13:28 水题收割者 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 给你n和m,表示一个n*n的数独已经填完了m行,让你填出剩下几行,要求答案的字典序最小。 分析 看到这道题我首先想到的是记录每行每列使用了哪些数字,然后贪心的来填,但是发现用这种策略会在有些情况下得不到解。于是我们考虑二分图匹配,将左边n个点表示每一行n个位置,右边n个点表示对应的 阅读全文
posted @ 2018-08-06 08:45 水题收割者 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 给定n和一个字符串,求一个新字符串使得这个字符串不存在长度大于等于n的回文子串且在字典序大于原串的情况下最小。 分析 我们知道如果有一个长度为n+2的回文串,那它一定由一个长度为n的回文串构成,所以我们只寻找长度为n和n+1的回文串。我们枚举每个位置的字母使最终字符串满足条件即可, 阅读全文
posted @ 2018-08-03 14:16 水题收割者 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 给定一个数N,现在又一个数x,在1~N之间,现在每次可以猜一个数a,返回gcd(x,a),问说最少猜几次可以确定x。 分析 这个题应该可以算是贪心,但是没人知道这样为啥是对的(雾),我们现在来感性认识一下,我们知道对于任意一个数都可以写p1e1p2e2 ... 的形式,所以我们在每 阅读全文
posted @ 2018-08-02 13:01 水题收割者 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 给你一个数n和长度为n的序列,序列中的每个数均为1或-1,如果一个点j对于任意的k都满足题目中给的式子,则j是一个合法位置,问这样的j有多少个 分析 这道题有两种方法,分别对应代码1和代码2。 方法1 我们发现最终答案实际就是这n个数的和与0去最大值,因为我们不难发现对于任意两个相 阅读全文
posted @ 2018-08-01 10:50 水题收割者 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目大意 给你一个n点m条边的有向图,q次询问,给定s,t,k,求由s到t至少经过k条边的最短路。 分析 我们设dp[i][j][k]为从i到j至少经过k条边的最短路,sp[i][j]意为从i到j只经过一条边的最短路,于是我们可以得到转移方程式:dp[i][k]=Min{dp[i][m][k 阅读全文
posted @ 2018-07-31 08:52 水题收割者 阅读(373) 评论(0) 推荐(1) 编辑