08 2019 档案
摘要:传送门 注意题目要求的字典序最小是指下标最小 容易想到 dp,但是发现正着做不好搞,考虑反过来搞 原本正着做是求最长上升子序列,反过来就变成求最长下降子序列 然后我们就可以求出以每个位置为起点的上升子序列的最大长度 然后直接贪心从前往后枚举即可,复杂度 O(nm) 维护最长下降子序列我是用树
阅读全文
摘要:传送门 第一个问题直接二分答案 然后第二个问题直接在二分出的答案下跑一遍 dp,设 f[i][j] 表示当前已经切了 i 次考虑完前 j 个位置并且强制切 j,j+1 时的方案数 那么有转移 f[i][j]=∑j−1k=Lf[i−1][k],发现随着 j
阅读全文
摘要:传送门 首先考虑两个圆覆盖的情况,我们可以求出圆心与交点连线 A 的极角 具体就是求出两圆心连线 B 极角加上余弦定理加反余弦求出 A,B 之间夹角 ,然后覆盖了多少就可以得出 但是多个圆覆盖会重复算,所以离线枚举后面的圆,然后把覆盖的区间按极角排序做一遍类似线段覆盖的操作就行了 区间覆
阅读全文
摘要:传送门 我是弟弟 把操作离线,然后维护带权并查集,从小边到大边一个个合并,每次合并的时候计算贡献 显然方案数为左边块大小乘右边块大小 我好菜啊
阅读全文
摘要:传送门 我是弟弟 首先 n=1 时一定有解,然后不要天真的以为每三个一循环 如果没有 aa,bb,cc 这样的话,n>1 时也可以当成 n=1 来解,像 n=1 一样,变成每 n 个输出一种字符即可 如果有 aa,bb,cc 这样的话就更一定有解了 枚举排列的时候直接 $
阅读全文
摘要:传送门 看题目就想到 dp,想不出来就去想贪心... 考虑按右端点排序,一个个修,如果在修某个建筑 i 时发现来不及了,说明前 i 个建筑最多只能修 i−1 个 那么我们把前 i 个中耗时最长的那个放弃,这样省下的时间最多 然后用优先队列维护一下就行
阅读全文
摘要:传送门 怎么好像没什么人写 dp ...? 设 f[i][j][k][0/1] 表示当前处理完前 1 到 i 的数,上一位开始的顺子有 j 个,当前位开始的顺子有 k 个,是否已经有雀头,的情况下能不能胡 因为连续三个顺子其实等价于三个刻字,所以我们只要考虑顺子小于 3
阅读全文
摘要:传送门 好巧妙的题啊... 首先因为 a+b+c=1,所以我们忽略 c,只要确定出 a,b 即可 考虑构建平面直角坐标系,横坐标为 a,纵坐标为 b,那么一种原料或者合金 v1=(a1,b1) 就可以看成平面上的一个向量 而如果某两种原料 v1,v2 可以构成一
阅读全文
摘要:传送门 一眼 Burnside dp 首先置换内部有独立的循环,置换的循环节长度为那些独立循环的 lcm 考虑某个循环节长度 L 怎么得到,显然把 L 质因数分解,∏mi=1pkii 那么最优情况下独立循环的循环节为 pkii,好像挺显
阅读全文
摘要:传送门 一看 n 这么小,搜就完事了... 因为最后每块小蛋糕面积固定,所以每次切完面积都必须是小蛋糕面积的倍数 那么最多只有第一次有 10 个位置,之后越来越少,复杂度很低 然后注意不要乱剪枝...,每次切不一定只切长的边,枚举位置时因为左右两边是对称的所以只要枚举一半
阅读全文
摘要:传送门 显然的 Anti−SG ,直接套上结论就行 当然也可以略证一下 1.如果石头堆都只有一个石头,那么堆数为偶数时先手必胜 2.如果某堆有多个石头,那么总 SG 不为 0 时先手必胜 考虑只要一堆有多个石头时,先手可以拿到只剩一个或者全部拿完,然后就变成 1. 的情况并且
阅读全文
摘要:传送门 因为每个豆子都是互相独立的,所以各看成一个子博弈 他们之间的状态只和位置有关,因为每次操作都会多出一个豆子,相当于多一个子博弈 那就是 multi−SG 模型了,数据很小,考虑直接求出每个状态的 SG 值 根据 multi−SG 的理论,设 SG[i] 表示第 i 个位置
阅读全文
摘要:传送门 考虑 dp,设 f[i][j][k] 表示考虑了前 i 种面值的钱,Alice 现在有共 j 元,Bob 现在共有 k 元时,的最少交换次数 那么 Cynthia 的状态可以由总和减去 Alice 和 Bob 的状态得到 然后枚举每一种钱,枚举初末此种
阅读全文
摘要:传送门 看到题目,啥,高维球体? 确定球心?模拟退火,爬山走起 emm,直接解方程就好了 首先方程有二次项,但是发现给了 n+1 个方程 所以随便拿一个出来和其他 n 个方程减一下,就把 x2 给消掉了 然后就可以高斯消元了 化完以后方程的形式大概就是 $\sum_{i=1}^{n}p
阅读全文
摘要:传送门 发现 A 不大,又允许较大的误差,考虑乱搞 考虑求出每个位置的答案,因为有 1e5 个位置,所以每个位置差不多可以计算 100 次贡献 所以把每个可以贡献的位置尽量均匀分成 100 个块,同一个块内答案一起算 本来一个位置的贡献是 m[i]m[j]/(i−j) ,那现在一
阅读全文
摘要:传送门 确定排名看一眼就想到 floyd 传递闭包,然后因为 n 比较大所以要 bitset 优化 要求最少次数?然后就想到二分,然后就自闭了 结果网上做法都默认一个个比较就是最优解的吗?随便吧,题目应该是有错的...
阅读全文
摘要:传送门 好像是挺显然的网络流... 源点向每个 food 连流量为 1 的边,drink 向汇点连流量为 1 的边 每个牛拆成两个点 i,n+i 之间流量为 1,对应的 food 连向 i,n+i 连向对应的 drink 然后最大流
阅读全文
摘要:传送门 看一眼感觉不太可做,推推性质 发现因为回文串去掉左右还是回文的,所以为了构成回文添加一个字符其实等价于删除另一边对应的字符 那么删除字符的代价就直接和添加字符的代价取最小值 然后考虑 dp,设 f[l][r] 表示当前 [l,r] 的区间内删除若干字符后成为回文串的最小代价,因为
阅读全文
摘要:传送门 直接枚举显然是不行的,考虑减少枚举 显然第一头牛一定要被打到,所以合法位置一定在第一头牛的八个方向 因为牛多位置少,所以枚举能打到第一头牛的所有位置,在枚举那个位置能打到的牛的数量,如果全都可以打到就记入答案
阅读全文
摘要:传送门 一眼完全背包统计方案数,有啥好说的...
阅读全文
摘要:传送门 一眼贪心,先把每头牛的忍受范围变成区间 对于每个防晒霜,肯定优先给,能给的,区间右端点最小的 因为右端点大的之后还有更多机会,然后搞一个 set 什么的乱维护一下就行 改了半天原来是要开 multiset 啊
阅读全文
摘要:传送门 边数不大,可以把点离散化,然后点数就只有 200 考虑 dp,设 f[k][i][j] 表示走了 k 步,从 i 到 j 的最小路程,发现转移可以倍增优化 f[k][i][j]=min(f[k/2][i][j],f[k/2][i][l]+f[k/2][l][j])
阅读全文
摘要:传送门 显然 dp,首先设 f[i][j] 表示当前考虑到第 i 个电线杆,高度为 j 时的最小代价 那么有转移 f[i][j]=f[i−1][k]+cost+C(j−k),其中 j>=k,cost 为把电线杆 i 增高到 j 的代价,i,j 固定时为常数 对
阅读全文
摘要:传送门 把状态看成 01,把序列状态差分,那么每次一个区间翻转即为差分序列两边翻转,最终状态就是差分值全为 0 对于每个差分值不为 0 的位置,我们一定要把它翻转,而差分值为 0 的位置一定不能翻转,从左到右扫一遍贪心翻转就行 枚举所有 K 即可
阅读全文
摘要:传送门 A. XORinacci 手玩三四项发现序列就是 a,b,a xor b,a,b,...,直接输出即可 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath>
阅读全文
摘要:传送门 看上去无从下手,把式子写出来冷静一下: 对于区间 [i,j] ,要满足要求的条件为: sum[i][1]−sum[j−1][1]=sum[i][2]−sum[j−1][2] sum[i][1]−sum[j−1][1]=sum[i][3]−sum[j−1][3] ... $sum[
阅读全文
摘要:传送门 看一眼感觉 dp,发现状态没法维护 考虑贪心,然后就想了两个错的贪心... 正解好神啊 首先如果权值最大的点能够一步染色那么肯定要染它 意思就是,一旦父节点被染色那么它就要接着被染色 那么把它们父子两合并成一个新的点,其他节点根据原来的边也连上来 考虑新的点的权值要怎么搞,现在既然这个节
阅读全文
摘要:传送门 考虑 dp ,发现之前的 −1 可能会产生贡献不好处理 贪心一下发现每个位置填的数必须单调不减,所以就不用考虑之前填的数 设 f[i][j] 表示当前考虑到第 i 个位置,填的数为 j 时的最小代价 那么有 $f[i][j]=f[pre][k]+val[i][j],k<=
阅读全文
摘要:学到后面数学越来越多了,感觉好难啊,开个博客专门记录一下数学相关的东西 因为反正也没人看,所以主要还是给自己看的 一些符号: 数论函数的卷积:∗,h=f∗g 则 h(n)=∑d|nf(d)g(nd) ϵ 叫单位元,对
阅读全文
摘要:传送门 考虑一个非根非叶子节点如何无限大,显然只要任意两个儿子权值不同即可 考虑到根节点不会变,所以只要对根节点每一个儿子子树分别处理,如果子树内任意一个节点有两个权值不同的儿子直接输出 +inf 考虑剩下的情况,子树如果是一颗普通树结构的话,那么每个节点都必须满足 $val[fa]+val[s
阅读全文
摘要:传送门 显然的 2−sat 问题,甚至不用输出方案 每种菜不是汉式就是满式,分成两个节点 i,n+i 分别表示满式和汉式 对于限制 mi,mj,如果 i 为汉式则 j 一定要为满式,如果 j 为汉式 i 一定为满式 所以连边 (n+i,j),(n+j,i) 其他情
阅读全文
摘要:A. There Are Two Types Of Burgers 题意: 给一些面包,鸡肉,牛肉,你可以做成鸡肉汉堡或者牛肉汉堡并卖掉 一个鸡肉汉堡需要两个面包和一个鸡肉,牛肉汉堡需要两个面包和一个牛肉 求能得到的最多的钱 直接贪心,哪个比较贵就选哪个做,剩下的材料再做另一个 #include<i
阅读全文
摘要:传送门 纪念第一个自己写出的黑题... 看一眼就是分数规划,二分答案先套上,二分一个 mid ,把所有边权减 mid 然后就变成求树上边数在 [L,R] 范围内的最长链 看到树,看到求链,再看看时间限制,点分治是没得跑了... 关键是考虑具体怎么点分治 每到一个分治节点 x 就考虑所
阅读全文
摘要:传送门 发现保持自信和做其他事情互不干扰,可以直接做一次 dp 求出最多能空出几天来怼大佬 然后就变成给你若干天,是否能怼死大佬,考虑求出所有的 天数和输出的嘲讽值集合,因为天数不多,嘲讽值增长很快 所以直接 BFS + map 去重就行了 不怼大佬或者只怼一次的情况容易计算,现在问题是
阅读全文
摘要:传送门 显然考虑 dp ,发现从右往左和从左往右是一样的,所以只考虑一边就行 发现对于切的左右端点,选择的 s0 一定要为左右端点的贝壳大小,不然这个端点不产生贡献还不如分开来单个贡献 所以设 f[i] 表示当前把 1 到 i 的都切了,产生的最大贡献,设 c[i] 表示位置
阅读全文
摘要:传送门 注意到 a,b 不大 考虑对每一个 a∗2b 的 b 分别背包 设 f[i][j] 表示只考虑 b=i 的物品时,容量为 j=∑a 的最大价值 这个就是普通的 01 背包 考虑把 f[i][j] 之间合并起来,为了得到容量为 W 时的答案,我们
阅读全文
摘要:传送门 这一题很容易想到网络流 一开始傻逼地模拟整个图每一个时间的情况,显然会爆炸 发现我们只要考虑起点到门之间的距离,不用每一步只走一格 所以直接 BFS 预处理距离然后二分答案,网络流判断即可 注意到了门就不能走了,所以门不能连边出去 总的来说挺傻逼的一题...但是我就是没想到... 某位不
阅读全文
摘要:传送门 首先可以把时间区间离散化 然后求出 cnt[l][r] 表示完全在时间 [l,r] 之内的活动数量 设 f[i][j] 表示当前考虑到时间 i,第一个会场活动数量为 j 时,另一个会场的最大活动数量 这个转移直接枚举上一个时间分界线 k, $f[i][j]=max(f
阅读全文
摘要:传送门 设 f[i] 表示题目要求的 p 那么有 f[i]=max(f[j]+√|i−j|),考虑去掉绝对值 f[i]=max(a[j]+√i−j),j<=i,f[i]=max(a[j]+√j−i),i<j
阅读全文
摘要:传送门 显然有 dp,设 fi 为 i 的 lqp 拆分的权值和,考虑枚举拆分的最后一个数,不妨设 f0=1 那么有 fi=∑ij=1fi−jFj ,Fi 表示斐波那契数列的第 i 项 变一下就是 $f_i=\sum_{j=0
阅读全文
摘要:传送门· 对于询问 (a,b) ,感觉一维很不好维护,考虑把询问看成平面上的一个点,坐标为 (a,b) 每个坐标 (x,y) 的值表示到当前 x 和 y 联通的时间和 考虑一个修改的贡献,它其实就是把左边一段区间 [l,x] 和右边一段区间 [x+1,r] 联通或断开 放
阅读全文
摘要:传送门 考虑如果能确定每个鞋子最终交换到的位置,那么答案容易算出 具体地,如果原位置为 i 的鞋子要交换到 pos[i] 那么最终答案就是 pos 的逆序对数量 如果不懂可以先去写 NOIP2013火柴排队 我的题解也有关于这个的证明 考虑怎么确定最优的方案,容易想到每个鞋子都找离它最近
阅读全文
摘要:传送门 感觉题意不太清楚 可能我英语不行 每层只能有一头牛 考虑对于任意一个方案,其中某个相邻位置 i,i+1,如果把它们交换会产生的贡献 其他位置显然没有影响,这两个位置交换前为 max(W−p[i+1],W+w[i+1]−p[i]),交换后 $max(W-p[i],W+w[i]-p[i+
阅读全文
摘要:传送门 考虑任意一个运送顺序,对于第 i 头牛和第 j=i+1 头牛,把它们的顺序交换会如何 首先其他牛的代价仍然不变 改变的代价为 2t[i]∗v[j]−2t[j]∗v[i],如果左边式子小于 0,我们就把这两头牛交换,一直交换最终代价就是最小的 所以直接按 t[i]/v[i]
阅读全文
摘要:传送门 考虑任意一个排队方案,对于其中某两个相邻位置 i>0,j=i+1,如果交换更优 那么有 max(A/r[i],Al[i]/r[j])>max(A/r[j],Al[j]/r[i]),其中 A=∏i−1k=0l[k],l[0] 是国王左手的数 因为 $A/r[
阅读全文
摘要:传送门 显然有一个想法,把 A,B 从小到大一一对应,这样距离最小,证明的话好像挺显然的 设 Ai<Ai+1 ,Bi<Bi+1,那么如果 Ai 对应 Bi,Ai+1 对应 Bi+1 距离为 $(A_i-B_i)^2+(A_{i+1}-B
阅读全文
摘要:传送门 rqy 的题解好神啊.... 设 fn 表示 n 个点的二叉树个数,gn 表示所有 fn 颗二叉树的叶子节点总数 那么答案就是 gn/fn,首先 fn 显然就是 Catalan 数列 打表可以发现 gn=nfn−1,证明很神 因为一个
阅读全文
摘要:传送门 子任务 4 告诉我们可以离线搞带权并查集 从大到小枚举询问,从大到小连边 如果没有修改操作就可以过了 但是有修改,考虑最暴力的暴力,搞可撤销并查集 同样先离线,从大到小处理询问时,按原边权从大到小枚举到一条边时,如果他一直都没有修改,那么直接加入并查集 如果有修改那先不要加,枚举所有修改
阅读全文
摘要:传送门 显然考虑 dp,发现时间只和当前位置和攻击次数有关,设 F[i][j][k] 表示当前位置为 i,j ,攻击了 k 次得到的最大分数 初始 f[1][1][k] 为位置 1,1 能打到的前 k 大位置的分数和 每次移动都会多一行或多一列目标可以选择,攻击时显然优先
阅读全文
摘要:传送门 一看就是田忌赛马搞搞贪心 考虑如何求最优方案 1.考虑当前队伍最强的人,如果他比敌方最强的强,那么有于他一定会得两分,所以直接找到敌方最强的得到两分就好,也可以为后面减少压力 2.考虑一下当前队伍中最菜的人,如果他比对方队伍中最菜的强,那么就让他们比,得到两分,因为敌方最菜的一定会白
阅读全文
摘要:传送门 首先求出缩一个点 x 的贡献,就是缩 x 的父亲的贡献加上 x 的子树多减少的深度 假设此时缩父亲的贡献已经考虑过了,那么 x 的子树多减少的深度就是子树的节点数 注意此时要满足 x 不是根节点或根节点的儿子,不然缩和没缩是一样的 设这个贡献为 sum[x] 然后把所
阅读全文
摘要:传送门 考虑求出最小的循环节 G 使得 t,t+G 得到的数对是一样的 由 y \equiv t \mod B ,得到 G 一定是 B 的倍数,设 zB=G,则 t,t+zB 结果相同 代入 $x \equiv (t+\left \lfloor \frac{t}{B} \
阅读全文
摘要:传送门 首先能想到 n^2 的做法 枚举所有两点,看看是否有边相连,如果没有说明它们一定要在同一集合,用并查集维护一下就行 注意到如果没有边这个条件,其实就相当于问补图有边 所以题意可以转化为,求补图的每个联通块大小 求联通块可以想到 bfs,代码大概长这样: 但是这样枚举点还是 $O(n^
阅读全文
摘要:传送门 挺显然的 dp ,然鹅一开始想的是 dfs 乱剪剪枝搞了 70 分... 设 f[i][j] 表示切了 i 次,当前切的位置为 j 的最小误差 那么转移显然枚举上一个切的位置 k \in [0,j) ,有 $f[i][j]=min(f[i][j],f[i-1][k
阅读全文
摘要:传送门 哈希 dfs 枚举所有节点,进入时哈希值加一个左括号,把所有儿子哈希值加入,退出时加一个右括号 因为儿子的顺序可以任意,所以要把儿子哈希值 sort 以后再顺序加入 因为根节点不确定,所以枚举所有节点作为根都算一遍哈希值 比较的时候同样把所有根的哈希值排序后顺序比较,只要有一个不同就
阅读全文
摘要:传送门 这题看一眼就很不可做 考虑对于任意一个最终状态,对于一条边的贡献分成三种情况 如果此边连接的两点属于 A,那么对 A 的贡献就是边权 w,即对答案的贡献为 +w 如果两点都属于 B,对 B 的贡献就是边权 w,对答案的贡献为 -w 如果两点属于两人,那么对答案
阅读全文
摘要:A. Hotelier 题意:有十个位置初始为 0,三种操作,找到左边第一个空位,变成 1,找到右边第一个空位,变成 1,把某个位置变成 0 直接模拟.. #include<iostream> #include<cstdio> #include<algorithm> #include
阅读全文
摘要:传送门 如果不考虑不重叠的限制的话,num[i] 是很容易求的: 对于限制,考虑每个点都暴力跳 fail,直到跳到合法为止 但是这种做法可以被卡到 n^2(aaaaaaaaaa... 这样的数据) 考虑 KMP 时怎么维护 fail 的,搞一个指针 j,指向当前上一个位置
阅读全文
摘要:传送门 感觉正着做不太好搞,考虑倒过来搞 容易想到贪心,每一层都贪心地选最小的宽度,然后发现 WA 了... 因为一开始多选一点有时可以让下一层宽度更小 然后有一个神奇的结论,最高的方案一定有一种是底层最窄的方案 证明: 考虑把所有块按顺序排成一排并分成几段,每一段都表示一层,假设如图是一种底层
阅读全文
摘要:传送门 可以想到 dp,设 f[i][j] 表示当前等级为 i,时间为 j 的最大滑雪次数 显然上课不会上让自己等级降低的课,所以第一维 i 满足无后效性 然后直接枚举 i,j,对于每个时间 j ,考虑选择滑雪,因为划不同的坡得到的价值都是 1,所以直接取当前能划的时
阅读全文
摘要:传送门 显然可以考虑 dp 设 f[i] 表示当前到了时间 i,从初始到 i 的时间都安排好打扫了 把所有牛按照区间 l,r 双关键字排序 这样枚举到一头牛 x 时,在 x.l 之前的牛都考虑完了(x.l 是牛 x 的左区间) 然后枚举 [x.l-1,x.r]
阅读全文
摘要:传送门 从左到右扫一遍,考虑什么时候会和之前形成同一幢房子从而不用统计 显然是当前的高度和之前某个点高度相同,并且它们之间没有更矮的建筑 考虑用一个单调栈维护一个单调上升的房子轮廓,然后对于扫到的每一个高度,看看栈里有没有相同的高度就行了 但是我比较傻逼,没想到,所以用 set 去维护单调栈就可
阅读全文
摘要:传送门 可以直接完全背包,复杂度 O(n \log n) 考虑另一种比较神仙的做法 设 f[i] 表示相加为 i 的方案数 考虑某个方案中加的最小的数 当 i 为奇数时,显然加的最小的数一定为 1,则 f[i]=f[i-1] 当 i 为偶数时,把加的最小的数分为 1
阅读全文
摘要:传送门 考虑一个玩家的路径 (x,y) 对路径上的一个节点 u 的贡献 设 lca=LCA(x,y) ,当 u 在链 x,lca 上时,路径会产生 1 的贡献当且仅当 dep[x]-dep[u]=w[u] 其中 dep[i] 表示节点 i 的深度,w[i] 就
阅读全文
摘要:传送门 搜索,剪枝 首先可以二分答案迭代加深,假设要买 p 台 那么肯定卖价格最小的 p 台 再来个 A* ,设搜到当前情况时,有 waste 的钱一定要被浪费(其实就是某些学校剩下的钱连最便宜的都买不起) 设最便宜的 p 台电脑总价值为 sum ,所有学校的总钱数为 S
阅读全文
摘要:传送门 直接 dfs 会 T 飞,BFS 又会爆空间 考虑迭代加深搜索,枚举走的最大步数, dfs 时如果步数大于枚举的步数就返回 然后再加个估价函数 diff,表示当前状态与最终状态差的格子数,如果就算每一步都能减少一个不同且最后一步能减少两个不同都无法在限定步数内到达 那么就
阅读全文
摘要:A. Drinks Choosing 有 n 个人,每个人各有一种最喜欢的饮料,但是买饮料的时候只能同一种的两个两个买(两个一对) 学校只打算卖 \left \lceil \frac{n}{2} \right \rceil 对 这意味着有些学生喝不到最喜欢的饮料,求最多有多少学生能喝的最喜欢
阅读全文
摘要:传送门 看到这个式子就感觉很有意思 左边就是求一次函数 y=\left \lfloor \frac{q}{p} \right \rfloor x 在 x \in [0,(p-1)/2] 时函数图像下方的整点数量 右边就是求一次函数 $y=\left \lfloor \frac{p}{q} \
阅读全文
摘要:传送门 看到组合数在模 2 意义下的乘积,考虑用 lucas 定理把组合数拆开 lucas 告诉我们,C(n,m) 在模 k 意义下的值,相当于 n,m 在 k 进制下每一位的组合数分别相乘的积在模 k 意义下的值 就是若 n=\sum_{i=0}a[i]k^i,
阅读全文