04 2019 档案
摘要:"传送门" 感觉这个题是真的神仙啊,思路是真的难想 首先设$f(i)$为$i$个点的无向连通图个数,然后设$g(i)$为$i$个点的图的个数(注意,此处不一定联通) 那么我们考虑枚举$1$号点所在的联通块的大小 显然有 $$ g(n)=\sum_{i=1}^nf(i)\binom{n 1}{i 1}
阅读全文
摘要:"传送门" 首先我们需要知道第二类斯特林数的通项公式 $$ S(n,m)=\frac{1}{m!}\sum_{k=0}^{m}( 1)^k\binom{m}{k}(m k)^n $$ 然后我们就可以将题目给的式子里的第二类斯特林数拆开 $$ f(n)=\sum_{i=0}^{n}\sum_{j=0}
阅读全文
摘要:"传送门" ~~这里提供智障的$O(n^2)$做法~~ 其实是有$O(logn)$做法的,但是我太菜了想不出来 Solution: 首先可以发现生成的序列一定是一个两边向中间单调递减的序列 这样就可以发现我们的删除序列也是一个有两个单调递减的子序列的序列 然后我们就可以设$f[i][j]$为当前确定
阅读全文
摘要:"传送门" 这个是真的简单题,随便手玩一下就可以发现最优策略一定是给$1$加上自环 然后就可以dfs一下看哪些点子树里深度最深的点到当前点的距离会等于$k 1$,然后将当前点连向$1$(当然特判一下父亲节点是不是$1$),就好了 代码: c++ include include include inc
阅读全文
摘要:"传送门" 其实有一个显然的性质嘛:对于每个数,其实只要考虑它最右能被换到的位置就好了 然后设$f[i][j]$表示已经处理完了前$i 1$位,当前还有$j$个$1$可以自由支配(注意这里说的是当前可以自由支配,不是总共可以自由支配的$1$) 代码: c++ include include incl
阅读全文
摘要:"传送门" 这个题只要想到移动机器人和移动出口是等价的就好做了 考虑设$f[i][j][k][t]$为最远向左移动$i$,向右移动$j$,向上移动$k$,向下移动$t$,这个矩形内最多能救的机器人 转移就记录一个前缀和来辅助转移,这样复杂度就在能通过的范围内了 但是转移还是比较麻烦的,还需要考虑当前
阅读全文
摘要:"传送门" 智障爆搜题 可以发现题目给出的式子可以移项 然后就是$rev(N) N=D$ 然后假设$N=a_1 10^{n 1}+a_2 10^{n 2}+...+a_{n}$ 那么$rev(N)=a_n 10^{n 1}+a_{n 1} 10^{n 2}+...+a_{1}$ 就容易得到$\sum
阅读全文
摘要:"传送门" 显然$a b$的情况下才有解 考虑先找出一个诚实的人,然后剩下的都可以在$n$次以内问出来了 发现如果一个人说另一个人是说谎的那么这两个人必有一个是说谎的,由于诚实的人严格多于不诚实的人,我们就可以把他们都丢掉 我们可以考虑维护一个栈,这样找出来的栈顶一定是诚实的人,总次数也在$2n$以
阅读全文
摘要:"传送门" 这个题是真的巧妙 首先一个很巧妙的思路,差分 考虑假如$a_i!=a_{i 1}$,则$b_i=1$,否则$b_i=0$ 这样一来,一个区间的翻转就变成了对于两个数的取反了 然后我们来考虑一下取反的代价(没错这个题我就只想到了这个) 1、假如距离是奇质数,只要1步,显然 2、假如距离是偶
阅读全文
摘要:"传送门" 考虑到一个很显然的事实:水是逃不掉的,一定要接的 所以我们就可以得到一个结论:如果当前的水温比上次低,就混合起来(因为水是逃不掉的),如果高就保留(因为我可以将前面的全部抛弃,只取这个高的) 维护一个单调递增队列,复杂度$O(n)$,然后就做完了,答案就在做的过程中统计就好了 代码: c
阅读全文
摘要:"传送门" 这个题网上有两种做法,一种是树状数组的,还有一种是暴力模拟的,暴力模拟显然不够优美,所以我用的树状数组 显然可以从初状态推到目标状态,我们也可以考虑倒推回去 首先可以容易发现每列的数字是不变的,所以可以把一些奇奇怪怪的情况先处理掉 每次旋转会使矩阵翻转并且每列取反,发现行其实没什么用,可
阅读全文
摘要:"传送门" 按理说想到转化问题之后就不难了吧,可是我还是不会写 一个很容易想到的转化就是差分,将银币数和铜币数都减去金币数,这样就转化为$x+y+z$个钱币选$y$个银币和$z$个铜币的最大数量了 ~~然后我这个菜逼就不会做了~~ 设总钱币数为$n$,银币$x[i]$个,铜币$y[i]$个,就可以按
阅读全文
摘要:"传送门" 好神的状压dp啊 首先考虑一个性质,删掉之后的图一定是个联通图 并且每个点最多只与保留下来的那条路径上的一个点有边相连 然后设状态:$f[s][t]$代表当前联通块的点的状态为$s$和路径结尾的点$t$ 然后考虑转移,要么拓展一个点作为路径,要么挂一个联通块到当前路径结尾的点上 代码:
阅读全文
摘要:"传送门" 还是猜结论呢 然后我们就想我们可以每次去掉尽量多的位数来保证次数最小,假装这是对的,先写一发,A了 考虑如何去掉尽量多的位数,我们可以找到最大的几位的不下降序列,把最后一个 1,后面全部改成9,这样我们就得到了一个每次去掉数字最前的一个不下降序列,然后将最后一位+1的做法 然后发现有一种
阅读全文
摘要:"传送门" 还是看题解的啦 先考虑一个显而易见的结论:A和B二进制下最高的几位相同是没用的(设去掉的那些位之和为sum) 然后我们设$d$为二进制下从高位到低位第一位不相同的,$k$为B从高位到低位第二个不为0的 然后我们分几段来统计答案 首先,$[A,2^d 1+sum]$显然是可以凑出来的 然后
阅读全文
摘要:"传送门" 感觉性质挺好想的,就是二分答案怎么就是想不到呢 考虑先二分出一个值,比他大的设为1,比他小的设为0 然后就可以$O(n)$地推出第一行是0还是1: 1、如果没有两个相邻且相等的,那么中间那个也就是第一行的 2、如果有两个相邻且相等的,那么第一行显然就是离底层最近的那个相邻且相等的 性质就
阅读全文
摘要:"传送门" 乍一看像是一个计算几何,然后想到了BFS,但是苦于无奈$O(n^2)$不会优化 然后以下参考zjq_shadow大佬的思路 显然发现曼哈顿距离很麻烦,除了暴力枚举貌似没什么很好的办法 考虑将坐标轴旋转$45^\circ$,然后就可以将曼哈顿距离转化为切比雪夫距离,坐标为$(x,y)$的点
阅读全文
摘要:"传送门" 考虑到这样一个性质,一个入度为0的点连一条边到一个DAG中,依然是一个DAG 于是设$f(i)$为$i$个点组成的DAG方案数, 那么$n$个节点的DAG中至少有$i$个节点入度为$0$方案数为$f(n i)\binom{n}{i}2^{i(n i)}$ 但是入度为$0$的点数为$0$时
阅读全文
摘要:"传送门" ~~dp套dp的板子题~~ 对于我这种垃圾来说:神仙题 考虑到最长公共子序列的dp做法 $dp[i][j]=max{dp[i 1][j],dp[i][j 1],dp[i 1}[j 1]+(a[i]==b[i])$ 然后发现对于一种状态,我们只需要考虑当前这个字符填的是什么就好了 那么这个
阅读全文
摘要:"传送门" 惯用套路 $$ f(d)=d\sum_{i=1}^{n}\sum_{j=1}^{n}ij[gcd(i,j)==d]\\ $$ 然后简单的莫比乌斯反演一下,得到 $$ f(d)=d^3\sum_{T=1}^{n/d}\mu(T)T^2\sum_{i=1}^{n/Td}\sum_{j=1}^
阅读全文
摘要:"传送门" 简单dp题,容易得到一个结论,填的数字一定单调不降 设$f[i][j]$表示当前是第$i$个,上一次填的数字是$j$ 对于dp转移,如果暴力转移,那么时间复杂度是$O(nk^2)$,无法通过 所以考虑记下前缀min,复杂度就可以优化到$O(nk)$ 代码: c++ include inc
阅读全文
摘要:"传送门" "%%%myy" 考虑30分做法:暴力bfs,$f[i][j]$表示$i$到$j$可以形成回文串 ~~然而为什么我场上只想到了70分做法,完全没想到30分怎么写。。~~ 100分: 考虑缩边,对于每条边分3种情况:标号同为1,标号同为0,标号不同 1、同为1:考虑如果这是个二分图,那么可
阅读全文
摘要:Day 0 说好的9点坐大巴出发貌似因为大雾的原因,变成了高铁,并且咕到了12点,早上就在机房里写了个模板列表,准备当天写完(然而最后只完成了$\frac{1}{3}$) 到长沙后就完全忘却了写模板的事了,然后写模板的事就推到了晚上 然后晚上睡觉前想起来了,忽然感到心里好慌,然后晚上12点爬起来写了
阅读全文
摘要:"传送门" 作为$HNOI2018$最简单的题,这个题确实不算难 虽然我一开始也没想出满分 看了眼题解,考虑到了倒推,这题差不多就没了 当走到叶子节点的时候考虑一下选了多少条公路翻修和多少条铁路翻修 对于非叶子节点就枚举翻修哪条边,转移就好了 一个小插曲: 本来写的记搜,由于看错题了,以为自己写错了
阅读全文
摘要:"传送门" 这真的是个很简单的树形背包,~~因为我都会写~~ 首先设$f[i][j][0/1][0/1]$表示$i$节点的子树内放了$j$个监听器,$i$点上是否放了监听器,$i$是否被监听 接下来推方程(情况有点多,但是确实好想): $son$为$i$节点的子节点集合 1、$i$节点没有被监听也没
阅读全文
摘要:"传送门" 首先设$m$为随从个数,$k$为暗影打击装甲的个数,$p$为剩余生命值,$n$为生命上限 然后考虑每个回合受到伤害,设$A_i$为每个回合被攻击$i$次的概率 $$ A_i=C^{i}_{k} (\frac{1}{m+1})^i (\frac{m}{m+1})^{k i}\\ $$ 然后
阅读全文
摘要:"传送门easy" "传送门hard" ~~切水题的感觉真好~~ 看到数据范围这么小,所以暴力枚举所有的可能,然后用map+vector存下每种值的区间,然后贪心去选 代码: c++ include include include include include include using name
阅读全文
摘要:"传送门" 这居然是个 1800的题,有点无法接受,可能自己$dp$方面确实差了点 考虑按位$dp$,从高位到低位枚举,然后用$dp$去判断是否可行。 然后设$f[i][j]$表示前$i$个分成$j$块能否满足当前枚举的答案 代码: c++ include include include inclu
阅读全文
摘要:"传送门" 感觉自己真的蠢 这题用堆来做 对于每个数都考虑当前时间点强制卖出,所以每次选择堆中最小的去统计答案 这样不一定最优,所以考虑将除了第一个点外的其他点加两次 这样统计答案时,如果堆中找到的是当前点,那么直接去掉,不产生贡献,说明当前点只能买入 否则找到其他点,就视作在当前点卖出,无脑在当前
阅读全文
摘要:"传送门" 已经极其接近的想到过正确做法了,但是没想到标记永久化,所以复杂度炸了 树链剖分,对于线段树每个节点开个堆(一开始用multiset,结果MLE了,想不通为什么) 考虑对于一次请求$u,v$,只有当它的路径上的点坏掉的时候,它才会受到影响,所以除去这条路径上的所有点都应该有这个贡献 代码:
阅读全文