10 2018 档案
摘要:传送门 观察题目数据,发现 k ≤ 8 ,可能可以从这里入手解决问题 考虑状态压缩 但是我们每次操作都会让一连串的序列改变,而序列的每个状态都是必须要知道的 很麻烦,所以考虑如何把一段区间表示地简单一些 差分,把原序列转化成差分序列,原序列亮为0,暗为1,差分时用上一个数异或下一个数 那么原数列中一
阅读全文
摘要:传送门 对于一个点双联通分量,如果它连接了两个或更多割点 那么不论哪个点GG都有至少一条路通到其他的点双联通分量,所以我们不用考虑 如果它只连接一个割点,如果这个割点GG,那整个块也一起GG,所以要再这个块里建一个出口 如果它没有连接割点,只建一个出口还不够,可能这个出口所在的点GG,所以要两个出口
阅读全文
摘要:传送门 显然的分层图 设 dis [ i ] [ j ] 表示到点 i , 已经建立了 j 条高速公路的最短距离 然后转移每次都分建立高速公路和不建立高速公路两种情况 跑Djikstra
阅读全文
摘要:传送门 直接爆力BFS有80分... 讲一下BFS吧 可以发现在一个局面下我们要知道的只有空格的位置和指定棋子的位置 因为其他的不是不可移动就是普通棋子 然后以空格的位置BFS,一个棋子走到空格其实就相当于空格走到棋子并把棋子挤到原本空格的位置 我们就BFS让空格瞎跑看看跑几步可以把指定棋子带到指定
阅读全文
摘要:传送门 最显然的方法就是线段树 稍微卡一下常就过了 还有另一种方法,差分 但是有一个问题,我们怎么知道是谁使订单无法满足呢 一种直接的想法就是二分 但是复杂度为 O(nlogm) 跟线段树O(mlogn)一样,但是常数小可过此题 重点是讲 O(n+m) 的方法 同样差分,从左到右一个个扫过去 如果出
阅读全文
摘要:传送门 正常会想到字典树 然鹅数据怎么小直接map也能过 然后就写map暴力匹配了 毫无思维难度,毫无代码难度 注意逗号算单词分隔符,如果有句号就算另一句 同一句的单词重复出现只计算一次贡献 再开个map来判重就好了 注意不区分大小写
阅读全文
摘要:传送门 预处理 dis [ i ] [ j ] 表示从第 i 天到第 j 天不改变路线的最短路径 然后就可以愉快地推方程了 设 f [ i ] 表示从第一天到第 i 天的最少花费 那么 f [ j ] = min(f [ j ] , f [ i ] + dis[ i+1 ] [ j ] * (j-i
阅读全文
摘要:传送门 显然DP 发现跑完一段要一直休息到疲劳值为 0 ,所以可以把两个动作和在一起考虑,跑 j 分钟并休息 j 分钟 设 f [ i ] 表示跑到 i 时疲劳度为 0 时最大路程 那么枚举每个 j 进行转移就好了 一段时间的总路程可以用前缀和快速求出 代码简单不解释
阅读全文
摘要:传送门 题目问的是从出发点一直跑到终点的一条链上所有齿轮的速度和 其他的不用考虑 直接搜就好了 注意求的是绝对值之和,不是和的绝对值,所以不用考虑方向问题 注意 N<=1050 数组不要只开1007! 代码简单不注释
阅读全文
摘要:传送门 预处理出每个位置最早被摧毁的时间,在此之前都可以走 直接dfs加个记忆化和最优性剪枝就好了 一定要注意流星的边界,如果波及到负数坐标的位置不要去考虑会RE 一定要考虑流星砸到边界的情况 如 (300,300) 那么(300,301) 和 (301,300) 的位置都会被波及不安全,也要考虑到
阅读全文
摘要:传送门 不平行就是直线斜率不同 枚举所有两点的斜率,对平行坐标轴的线特殊考虑 离散化一下就好了
阅读全文
摘要:传送门 可以考虑DP 设 f [ i ] [ 1/2/3 ] [ 0/1 ] 表示当前考虑到第 i 头牛,打算让当前位置的编号变成 1/2/3,并且打算让整段序列上升/下降 0/1 然后就对每种情况慢慢考虑转移就行了 可以发现第一维可以直接优化掉,然后空间就是 O(1),时间就是 O(n) 太简单就
阅读全文
摘要:传送门 把每体积的干草价值看成一,就变成求最大价值 直接上背包就行了 注意优化常数
阅读全文
摘要:传送门 初始状态是 0,如果有 1 的连接,0 就变 1,如果还有 1 的连接,1 就变 0,如果是 0 的连接就不变 所以就是把答案异或上所有连接,不用考虑顺序,反正最终是一样的
阅读全文
摘要:传送门 十分显然的DP 二分金币数量 然后对二分的金币数量跑DP求最大获利 方程: 设 f [ i ] 表示在第 i 个格子里的最大获利 f [ i ] = max( f [ j ] ) + val [ i ] (pos[ j ]+max(1,m-g) ≤ pos[ i ] && pos[ j ]+
阅读全文
摘要:传送门 考虑一个节点一个节点加入树中,每次计算一下对答案的贡献 只有两个点时树的形态是唯一确定的 三个点时第三个点应该是从边上分叉出来的 那么增加的长度显然为 (dis_bc+dis_ac-dis_ab)/2 第四个点也应该是分叉出来的 但是是从哪分叉的我们还要讨论一下 可以发现,唯一合法的情况当且
阅读全文
摘要:传送门 首先要知道怎样才能确定一头牛的排名 显然,必须知道它跟所有其他牛之间的胜负关系 如果 a 赢 b , b 赢 c , 那么 a 也会赢 c 可以用 floyd 求任意两点间的关系 最后统计一下就好了
阅读全文
摘要:传送门 直接搞肯定不行(题目清清楚楚写了) 所以开始要推结论 设 fa=x , fa+1=y 那么 fa+2=x+y,fa+3=x+2y,fa+4=2x+3y .... 最终可以得到一个通用公式,$f_n = f_{n-a-1}f_a + f_{n-a}
阅读全文
摘要:传送门 DP 设 f [ i ] [ j ] [ k ] 表示已经走了 i 步,向上走了 j 步,向右走了 k 步时能拯救的最多奶牛数(j,k可以为负,表示反向) 设 g [ i ] [ j ] 表示牛向上走 i 步,向右走 j 步后有多少奶牛恰好在草堆上(同样 i , j 可负) 那么 f [ i
阅读全文
摘要:传送门 用倍增的思想 设 A[ i ] 表示A在 i 位置走一步到达的城市以及经过的路程(这里我用结构体存A[ i ]),B同理 设 f [ i ] [ j ] 表示从 i 位置出发,走 2j 轮后到达的城市(一轮即AB各走一次) dis[ i ] [ j ] 表示从 i 位置出发,走 $2^
阅读全文
摘要:传送门 曼哈顿距离好像不好直接算,我们可以把牛的坐标转化一下以方便计算距离 (x,y) --> (x+y,x-y) 那么距离就可以表示成 max(|x1−x2|,|y1−y2|) 自己在草稿纸上算一下就知道了,(因为之后我们会按转
阅读全文
摘要:传送门 如果没有挖井只是联通所有点就是最小生成树 但是有挖井,我们需要转换一下 把挖井操作看成 0 号点连一条边过去 然后还是最小生成树.. 因为是稠密图,所以用 prim 算法来求最小生成树
阅读全文
摘要:传送门 把所有学校的关系构成一个图,显然一个强联通分量的所有学校只要有一个有新软件,其他学校也都会有 考虑缩点,发现入度为 0 的块一定要给,因为没有其他人给它 入度不为 0 的块一定有其他人给,我们只要给 能给它的块 提供软件就可以了 所以就是入度为 0 的块一定给,不为 0 的块一定不用给 子任
阅读全文
摘要:传送门 设 f [ i ] [ j ] [ k ] 为表示从 i 到 j 是否有一条 2k 长度的路径 那么像 Floyd 一样枚举中转点,起点,终点转移就好了: if (f [ a ] [ b ] [ k-1 ] && f [ b ] [ c ] [ k-1 ] ) f [ a ] [ c
阅读全文
摘要:传送门 好久没写Splay了,写一下练手 看到查询第 k 大肯定想到权值线段树平衡树 所以直接上 Splay ,用并查集维护联通 合并直接启发式合并就好了 启发式合并就是把节点少的平衡树每个点都拆下来,一个个插到另一个树上.. 查询第k大只要知道第 k 大的值,就知道编号了,因为每个值都唯一对应一个
阅读全文
摘要:传送门 题目貌似有锅.. 它说输出最少旋转次数,然而应该是最少逆序对数... 考虑一个把子树合并的过程,在子树合并时计算左右子树产生的逆序对数 这样一直合并最后就是答案 所以可以对每个子树建一个权值线段树 然后把权值线段树合并 合并时计算逆序对只要计算跨 mid 的逆序对 如果翻转也只要计算跨 mi
阅读全文
摘要:传送门 经典题 如果把每个环都找一遍绝对时间爆炸 所以我们要换一种思路 看到求最大最小首先考虑二分答案 如果平均权值最小的回路小于我们二分的答案mid会发生什么呢 如果我们把回路的长度减少 mid*回路边数,回路的长度就会变成负数 而把回路减少 mid*边数 其实相当于把回路上的每条边都减少mid
阅读全文
摘要:传送门 显然是DP 但是交换会改变后面的状态,好像很麻烦 我们设 f [ i ] [ j ] [ k ] 表示到了第 i 个字符,j 交换了 j 次,k 交换了 k 次后最多的匹配数 我们每次只考虑当前要改变的字符,而不考虑具体跟谁交换 那么在一个状态中,如果j > k 说明还有 j-k 个 'j'
阅读全文
摘要:传送门 我见过的第二恶心的题,第一是糖果传递... 以下是一堆具体的证明,自己想的,可能考虑不周,不想看也可以直接看结论 首先有一个很显然的贪心,烧开的水要尽量把热量传递出去 所以有一个比较显然的方法:每杯水烧开后都与下一杯水热传递,平衡后再把剩下的温度与更后面一杯水热传递,这样一直下去... 十分
阅读全文
摘要:传送门 经典的莫队 考虑一种颜色对答案的贡献 : 设此颜色的数量为 cnt,那么有 cnt * ( cnt - 1 ) 种方案拿到两只此颜色袜子 设总数为 sum,那么一共有 sum * ( sum-1 ) 种不同的拿袜子方案 只要把所有同色的方案除以总方案就是我们的答案了 那么我们可以同时维护拿到
阅读全文
摘要:传送门 十分显然完成工作的时间和航耗时最长的运输计划有关 所以题目意思就是要求最大值最小 所以可以想到二分 把所有大于mid时间的航线打上标记,显然删边只能在所有这些航线的公共路径上 要如何快速打标记是个问题 二分已经有一个log,所以只能承受O(n)的判断 如果能知道一条边的经过次数,那么就知道这
阅读全文
摘要:传送门 看到数据范围就知道是搜索或状压DP 算了一波复杂度搜索好像过不了极限数据 搞状压 设 f [ i ] 表示所有猪的状态为 i (二进制下1表示死了,0表示没死)时需要的最少发射次数 设 p [ i ] [ j ] 存经过第 i 只猪和第 j 只猪的抛物线经过的猪的状态(可以n2预处理出
阅读全文
摘要:传送门 十分显然的DP 设 f [ i ] [ j ] [ k ] [ 1/0 ] 表示当前考虑到 A 串第 i 位,匹配到 B 串第 j 位,已经划分了 k 分,当前为 选 or 不选 如果 A [ i ] ≠ B [ j ] 那么当前位不能选,则只有一个转移 f [ i ] [ j ] [ k
阅读全文
摘要:传送门 很显然的DP 我们设 f [ i ] [ j ] 表示在位置 i , j 时需要的最少的点击次数 考虑不点击的影响 f [ i ] [ j ] = f [ i-1 ] [ j + y [ i ] ] 如果点击 f [ i ] [ j ] = f [ i-1 ] [ j - x [ i ] ]
阅读全文
摘要:传送门 正解是正交分解,然而我是当成模拟退火的入门题来写的 因为我脸黑,交了17次才过... 模拟退火过程: 初始温度定为一个较大的数 随机跳一段距离和方向,计算程度情况,如果比较稳定就选择它 不然就以一概率选择(跟温度和稳定程度差有关) 然后降低温度,重复上述过程 直到温度很低时退出 得到一组解,
阅读全文
摘要:传送门 n 个关卡有 n-1 个限制 所以这些限制构成一颗树 考虑树形DP 对一颗子树单独考虑 考虑有多少种顺序 设 f [ i ] 表示节点 i 的子树的总方案数 考虑儿子节点如何与父节点合并 发现父子之间有限制条件,所以 f 多加一维 f [ i ] [ j ] 表示节点 i 在子树中排第 j
阅读全文
摘要:传送门 翻译有些不清楚,意思就是骨牌不一定要按从左到右的顺序放,可以左边放一个,右边放一个,再中间放一个 然后每个骨牌都可能往左或往右倒,一旦倒了,倒的一边的所有骨牌都要重新放 然后问你,最小期望放置次数是多少 考虑每个骨牌的影响,设f[i] 表示放i个骨牌的的最小期望放置次数 那
阅读全文
摘要:传送门 期望DP 设 f [ i ] 表示还有 i 个名字没得到,集齐所有名字的期望购买次数 考虑一次购买的影响: 如果得到以前没有的名字 f [ i-1 ] -> f [ i ],如果得到有的名字 f [ i ] -> f [ i ] 那么可以得到 f [ i ] = f [ i-1 ] * (n
阅读全文
摘要:传送门 考虑最上面每个位置的数对答案的贡献 然后就很容易发现: 如果有n层,位置 i 的数对答案的贡献就是C( n-1,i ) 然后就有很显然的贪心做法: 越大的数放越中间,这样它的贡献就会尽可能的大 然后考虑算C( i,j ) 因为n很大,模数很小 所以要用lucas定理求C C(n,m)= C(
阅读全文
摘要:传送门 很神奇的一题 看一眼题目感觉是博弈论? 但是要求具体结果 好像搞不了... 发现题目有限制,保证棋子排列呈阶梯型 好像可以轮廓线DP? 不会.... 然后去看题解了,DFS能过??? emmm.... 因为棋子排列呈阶梯型,所以如果我们暴力枚举所有的状态可以发现合法状态只有不到40万种 然后
阅读全文
摘要:传送门 此题树剖可过 然而可以树上差分为什么要树剖.. 对于一条路径(A,B),只要把 val [ A ] ++ , val [ B ] ++ , val [ LCA(A,B) ] -- , val [ fa[LCA(A,B)] ] -- 那么求每个点的经过次数就求一下子树 val 的和就好了 但是
阅读全文
摘要:传送门 A的第一道黑题... 然而感觉跟 作诗 没什么差别... 分块 记录 sum[ i ] [ j ] 表示从左端点到第 i 块时,数字 j 的出现次数 f [ i ] [ j ] 表示第 i 块到第 j 块的区间里的众数 对两边小段的每个数都计算贡献 设 cnt [ j ] 表示 j 在两边小
阅读全文
摘要:传送门 分块 设sum[ i ] [ j ] 存从左边到第 i 块时,数字 j 的出现次数 f [ i ] [ j ] 存从第 i 块,到第 j 块的一整段的答案 那么最后答案就是一段区间中几块整段的答案加上两边小段的贡献 考虑两边小段的影响,对于每一个出现的数 它可能会使答案增加(使原本大区间中出
阅读全文
摘要:传送门 可以发现图是对称的 所以我们先只考虑下半部分,不包括y=x的点 如果能算出下半部分总和为ans 那么答案就是 ans*2+1(加上y=x的方向有一个同学) 以观察者为原点,建立直角坐标系: 那么下半部分的视线的斜率≥0且<1,ans就是不同的斜率数量 从左到右,从下到上考虑每个点(x,y)
阅读全文
摘要:定理: (以下p均为质数) 1. φ(p)=p-1 3. 如果 i mod p ≠ 0 那么 φ(i*p)=φ(i)*φ(p) 2. 如果 i mod p = 0 那么 φ(i*p)=φ(i)*p 证明(其实只要知道结论就好了,证明可以跳过): 1. 因为p是质数,所以1 到 p的所有数
阅读全文
摘要:传送门 中国剩余定理模板题(关于中国剩余定理,我是在这里学的:传送门) 由题可知: n-ai=k*bi > n-ai ≡ 0 (mod bi) > n≡ai (mod bi) 直接用中国剩余定理解同余方程组就好了 注意一些坑点: 1. ai可能为负 因为 ai 是在模 bi 意义下的,所以可以很容易
阅读全文
摘要:传送门 根据题意可以列出方程: 设走了X步,已经绕了维度线Y圈 那么 nX-mX=LY+(x-y) 稍微转换一下: (n-m)X - LY = x-y 如果设 A=n-m,B=-L,C=x-y 那就变成了AX+BY=C的形式 直接套exgcd就可以得到一组AX+BY=gcd(A,B)的解 根据基本的
阅读全文
摘要:传送门 非常显du然liu的一道题 就是求GCD 因为数据范围... 所以要上压位高精+非递归的辗转相减 关于辗转相减: 如果 A是二的倍数,B是二的倍数 那么GCD(A,B)=2 * GCD(A,B) 如果只有A是二的倍数 那么GCD(A,B)=GCD(A/2,B) 如果只有B是二的倍数 那么GC
阅读全文
摘要:传送门 转换题意后就是问你生成树的方案数 就是裸的矩阵树定理 不会证明,只懂结论: 对于一个无向图 G 定义G的度数矩阵 D[G] 是一个 n*n 的矩阵,并且满足:当 i ≠ j 时,d[i][j] = 0,当 i = j 时,d[i][j]等于 vi 的度数 定义G的邻接矩阵 A[G] 是一个
阅读全文
摘要:传送门 Splay模板题 考虑如何把一颗树翻转 把它的左右儿子翻转,左右儿子的左右儿子翻转...直到每个节点都被翻转 一颗树这样转后可以发现树的中序遍历也刚好左右翻转了 所以可以用Splay维护,维护标记也不难,只要每次向下之前都先传一下标记就可以了 注意此时Splay节点的大小关系是他们在序列的位
阅读全文
摘要:传送门 splay模板 优质讲解 我只是发一个模板... 我太弱了讲不清 注意操作时可能会访问到最小值的前驱或最大值的后继 所以要多加入两个虚节点INF和 -INF防止越界 #include<cstdio> #include<cstring> #include<cmath> #include<alg
阅读全文
摘要:传送门 树剖+动态开点线段树 对每种宗教开一个线段树,用来维护区间和,区间最大值 普通的线段树空间不够,所以要动态开点 因为宗教会改变,所以要有删除操作和插入操作 比如城市1从信仰a变成信仰b,那就把a的线段树上城市1删掉,在b线段树上插入城市1 询问就只要询问与旅行者同宗教的值就好了 怎么实现也不
阅读全文
摘要:传送门 先考虑在一段序列上进行操作如何维护 线段树 记录每个区间的的颜色段数量 但是区间合并时两边可能颜色相同 所以再记录一下每个区间最左和最右的颜色 合并时如果相邻两边颜色相同,那么颜色段数量就要减一 然后考虑在树上操作 直接上树剖,一样用线段树维护就好了 询问时记录一下当前左右两边最上面的颜色
阅读全文
摘要:传送门 非常显然的一道树剖 用线段树维护区间为1区间为0 因为修改只有在根到节点 甚至不用维护深度 因为一开始节点都为0 甚至不用线段树的 build 操作 比模板还简单... 至于询问修改了多少就只要把修改后的数量减去修改前的数量
阅读全文