01 2018 档案
摘要:传送门 直接暴力分块,然后在每一个块内排序。 查询时可以在每一个块内二分。
阅读全文
摘要:传送门 f[i][j]表示第一个机器耗时j,第二个机器耗时f[i][j] 第一维可以滚掉
阅读全文
摘要:传送门 f[i][j]表示位数为i,第i位为j的windy数的个数 先预处理出f数组。 求的时候先算没有前导0的答案,再算位数和给定的数相同的答案。
阅读全文
摘要:传送门 注意到只能在两边加人,有一种区间dp的感觉。 f[i][j][0/1]表示已经搞完区间[i,j]且上次搞的是左/右的方案数 那么他只能从f[i+1][j]或f[i][j-1]的某种状态得到,随便yy以下就知道状态转移方程了
阅读全文
摘要:传送门 贪心,很像田忌赛马那样,但是因为有平局加一分导致那样的贪心不好处理。 先将两个数组从小到大排序。 比较a最大和b最大,如果a比b大,那么直接赢掉 否则 比较a最小和b最小,如果a比b大,那么直接赢掉 否则 比较a最小和b最大,如果相等,那么平局,否则就输掉
阅读全文
摘要:传送门 一开始想的是区间线段树套权值线段树,结果好像不能实现。 然后题解是权值线段树套区间线段树。 区间线段树上标记永久化就省去了pushdown的操作减少常数。 标记永久化的话。。yy不出来就看代码吧。 然后注意开long long
阅读全文
摘要:传送门 看到这个题的第一反应是离散化+线段树乱搞。。 eeeeeeeeeeee感觉数据结构学傻了,其实直接存下来,sort一遍,n/2的位置的就是答案 当然前提是空间够的话 1m的空间连数组都开不下 于是有了一个很巧妙的思路,吼吧,直接给链接 http://blog.csdn.net/suncong
阅读全文
摘要:传送门 首先如果起点终点都在同一侧可以直接处理,如果需要过桥答案再加1 对于k等于1的情况 桥的坐标为x的话,a和b为起点和终点坐标 ans=\sum_{1}^{n} abs(a_{i}-x)+abs(b_{i}-x) 起点和终点显然可以合并 那么 $ans=\sum_{1}^{n} abs(a
阅读全文
摘要:传送门 题目中的几个操作,直接splay搞一下即可: 没了
阅读全文
摘要:传送门 两个multiset 一个记录相邻元素的差,一个放所有的元素 2个数组 val[i]记录第i个的值,last[i]记录第i个最后插入的数的值 然后乱搞
阅读全文
摘要:传送门 原本的想法是把所有的串不管是名字还是询问都连起来,记录一下询问串在sa数组中的位置 对于每个询问可以在sa数组中二分出左右边界,第一问用莫队,第二问差分乱搞。 结果发现我差分的思路想错了,先写了一个暴力,二分出左右边界之后直接从l枚举到r,想试试正确性,就交了一遍,结果过了。。。。 因为是暴
阅读全文
摘要:传送门 很容易想到,题目中的相同是指差分数组相同。 那么可以把差分数组连起来,中间加上一个没有出现过的且字典序小的数 双指针移动,用st表维护height数组中的最小值。 当然用单调队列应该也可以且更快。
阅读全文
摘要:传送门 显然树上第k大直接主席树 如果连边的话,我们重构小的那一棵,连到另一棵上。 说起来简单,调了我一晚上。 总的来说3个错误: 1.离散化写错位置写到了后面 2."="写成了"==" 3.加双向边时加成了单向边 3个错误3个小时。。。
阅读全文
摘要:传送门 简直就是模板题啊!
阅读全文
摘要:传送门 考虑贪心,控制某一维为1,另两位最大是最优的,也就是一次选一个厚度为1的面 那么对于每个点,可以有3种面是可以选到它的 然后gg 考虑二维的状态,一个平面,有些点,一次选一行或一列最优 那么每一个点i,j可以被行i和列j选中,将i->j连接一条边,每一条边就代表一个点 选取最少的点覆盖所有边
阅读全文
摘要:传送门 根据公式xjb推一下,然后就可以连边。 考虑到字典序最小,和匈牙利算法的实现过程,要倒序匹配。
阅读全文
摘要:传送门 每一行的1和每一列的1不管怎么换还是在同一行和同一列 目标状态中有n个1是不同行且不同列的 那么就是能否找出n个不同行不同列的1 就是每一行选一个不同列的1 如果矩阵中位置i,j为1,那么点i到点j连一条边 跑匈牙利即可
阅读全文
摘要:传送门 我们将每一个属性和物品连边,然后枚举从小到大属性跑匈牙利,直到找不到连边
阅读全文
摘要:传送门 f[i][j] 表示第i天,手中股票数为j的最优解 初始化 f[i][0]=0 0<=i<=n 4种方式转移 可以将 f[i-w-1][k]+k*as 和 f[i-w-1][k]+k*bs 放到单调队列中
阅读全文
摘要:传送门 需要n*m的算法,考虑单调队列 可以预处理出来 a[i][j]表示以i,j为右下角的绿化带+花坛的和 b[i][j]表示以i,j为右下角的花坛的和 那么我们可以单调队列跑出来在A-C-1,B-D-1的矩阵中的b[i][j]的最小值 枚举i,j,用取a[i][j]-ans[i-1][j-1]的
阅读全文
摘要:传送门 设球心的坐标为未知量 用最后一个点来表示球面到球心的距离,那么它和前n个式子相等 移项乱搞 最后高斯消元
阅读全文
摘要:传送门 好难的网络流啊,建图真的超难。 如果不告诉我是网络流的话,我估计就会写dfs了。 使用费用流解决本题,设点 p[i][j] 的参与交换的次数上限为 v[i][j] ,以下为建图方式: 将一个点分成三个点,分别为入点,原点和出点。 如果开始的图上该位置有棋子,那么从S到该点的原点连一条
阅读全文
摘要:传送门 网络流的建图真的好难! 将一个点拆分成多个点的思想还需要加强。 题解 代码和题解中的图略不一样。
阅读全文
摘要:传送门 结论:这是最大权闭合图的模型 因为可能A保护B,B保护A,出现环。 所以由植物A向植物A保护的植物连边,然后拓扑排序,将环去掉。 然后将拓扑排序的边反向连,建立最大权闭合图的模型。 跑最大流(最小割),用正权边之和-最小割即为答案
阅读全文
摘要:传送门 dp[i][0]表示节点i到子树中的所有点的距离之和 dp[i][1]表示节点i到子树中最近距离的点的距离 dp[i][2]表示节点i到子树中最远距离的点的距离 建好虚树后dp即可。 因为对于虚树掌握的还不是很熟,有些细节还是要注意。 虚树中可能会加入一些lca节点,这些节点在d
阅读全文
摘要:传送门 明显虚树。 别的题解里都是这样说的。 先不考虑虚树,假设只有一组询问,该如何dp? f[u]表示把子树u中所有的有资源的节点都切掉的最优解 如果节点u需要切掉了话,f[u]=val[u] 否则如果u的子树中有需要切除的点的话,$f[u] = min(val[u], \sum\limits
阅读全文
摘要:传送门 显然是一棵树。 又显然一段一段地增加比较优。 我们可以dfs,并且尽量把每一个节点所有子树中所有节点的时间增加到一样。
阅读全文
摘要:传送门 为了搞这个题又是学行列式,又是学基尔霍夫矩阵。 矩阵树定理 本题题解 无耻地直接发链接,反正我也是抄的题解。。
阅读全文
摘要:传送门 考虑每一段对答案的贡献 用每一段的左端点来表示当前这一段,那么区间就变成了[1,n-1] 如果询问区间[l,r],其中一个点的位置为x,则它对答案的贡献为(x-l)*(r-x)*s[x](s[x]为这一段的权值) 化简后得x*s[x]*(l+r-1)-s[x]*(l*r-r)-x*x*s[x
阅读全文
摘要:传送门 不会莫比乌斯反演,不会递推。 但是我会看题解。 先将区间[L,H]变成(L-1,H],这样方便处理 然后求这个区间内gcd为k的方案数 就是求区间((L-1)/k,H/k]中gcd为1的方案数 有个重要的性质:如果有一些不相同的数,最大的为a,最小的为b,任意选取其中的一些数,则他们的gcd
阅读全文
摘要:传送门 gtm的数位dp! 看到好多题解,都是记忆化搜索,好像非常方便啊,但是我还是用递推好了,毕竟还是有些类似数位dp的题用递推的思路,记忆化做不了,现在多培养一下思路 首先这道题, 只看长度大于等于2的回文串,那么只需要看aa和aba两种即可,再长的话肯定会包括这两种情况。 定义状态:f[i][
阅读全文
摘要:传送门 如果能够根据题意看出这是一个堆的话,那么就有些思路了。。 首先堆顶必须是最小元素,然后左右儿子可以预处理出来都有多少个数, 把剩余的数任意分配给两个儿子,用排列组合即可 dp(now) = dp(now << 1) * dp(now << 1 | 1) * C(sum[now] - 1, s
阅读全文
摘要:传送门 重新学习数位DP。。 有一个思路,枚举全排列,然后看看比当前数小的有多少个 当然肯定是不行的啦 但是我们可以用排列组合的知识求出全排列的个数 考虑数位dp 套用数位dp的方法,枚举每一位,然后后面的数用排列组合求出方案数。 具体还是看代码吧。。说起来真不好说。。
阅读全文