qwq

随笔分类 -  Atcoder

摘要:ABC380F. Exchange Game 因为 \(n+m+k\leq 12\),考虑状压 dp,设 \(f(x,s1,s2,s3)\) 表示 先手,后手,桌子上的牌分别是哪一些,这有 \(O(3^n)\) 种状态。 然后只要枚举出哪一张即可,有 \(f(s1,s2,s3)\to f(s2,s1 阅读全文
posted @ 2024-11-16 22:07 adam01 阅读(71) 评论(0) 推荐(0) 编辑
摘要:注意到如果可以构造出所有由 \(\texttt{A}\) 和 \(\texttt{B}\) 组成的字符串,那么在图上游走的路径必须成环,并且的环上的每一个点都必须同时有一个 \(\texttt{A}\) 邻居和 \(\texttt{B}\) 邻居。 于是可以考虑把点拆分为入点和出点,相邻两个点为 \ 阅读全文
posted @ 2024-08-05 19:00 adam01 阅读(10) 评论(0) 推荐(0) 编辑
摘要:A - Sort Left and Right 答案为 0 即已经排序。 考虑答案为 1 的情况:一定是存在一个 \(p\),使得 \(\min_{i=1}^{p}a_i=p\) 且 \(a_p=p\),这时只要选择 \(p\) 即可。 考虑答案为 2 的情况:如果 \(a_1\neq n\oper 阅读全文
posted @ 2024-08-04 23:52 adam01 阅读(104) 评论(0) 推荐(0) 编辑
摘要:如果边数为奇数,一定无解。 如果边数为偶数,一定有解。考虑证明: 我们可以先随便定向,然后给每个点 \(i\) 一个值 \(a_i\in\{0,1\}\),表示出边条数奇偶性。 然后随便考虑图的一颗生成树。 注意到一条边 \((u,v)\) 翻转定向会让 \(a_u\gets 1-a_u,a_v\g 阅读全文
posted @ 2024-08-03 13:27 adam01 阅读(6) 评论(0) 推荐(0) 编辑
摘要:弱化版:CF280C Game on Tree(有向图的限制变成一棵根节点为 1 的外向树) 弱化版解法: 根据期望线性性,\(Ans=\sum_{i=1}^nE(p_i)\)。 其中 \(p_i\) 是 \(i\) 被选到的概率。 因为对于 \(i\) 和 \(i\) 的祖先节点,某个点在这些店里 阅读全文
posted @ 2024-08-03 13:26 adam01 阅读(5) 评论(0) 推荐(0) 编辑
摘要:注意到只要随便 dfs,如果没有可以走的点,说明这个端点满足要求。 因为有两个端点,所以从同一个点开始搜两次,拼在一起就行了。 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e5 + 阅读全文
posted @ 2024-08-03 13:26 adam01 阅读(3) 评论(0) 推荐(0) 编辑
摘要:注意到如果把每一对胜者败者连边,可以得到一颗树: (例子) 但是因为胜者每次只能和一个败者打,所以要用类似多叉转二叉的方法,让有不止一个孩子的节点变成有一个孩子和一个虚点。 如图,原来 \(1\) 有三个儿子 \(2,3,4\),通过转换,变成了上图。 上图可以直接变成对战图(\(x2\to x1\ 阅读全文
posted @ 2024-08-03 13:25 adam01 阅读(6) 评论(0) 推荐(0) 编辑
摘要:注意到第 \(i\) 行和第 \(i+2\) 行被删除的格子的排列顺序相同,格子上的数差了 \(2m\)。 于是处理出第 \(i,i+1\) 行的答案 \(a_i,a_{i+1}\),有值的格子的个数 \(c_i,c_{i+1}\)。 令 \(s(i)=\dfrac{(i-1)i}2\),也就是 \ 阅读全文
posted @ 2024-08-03 11:09 adam01 阅读(3) 评论(0) 推荐(0) 编辑
摘要:考虑贪心。 设字符串 \(S\) 里数字之和为 \(S_d\),X 的个数为 \(S_c\)。 考虑相邻的两个字符串 \(A,B\) 的贡献: 考虑临项交换,这只影响到相邻两个串的相互贡献。 注意到交换 \(A,B\) 只会影响到 \(B_dA_c,A_dB_c\),那么产生的贡献 \(\Delta 阅读全文
posted @ 2024-08-03 11:08 adam01 阅读(5) 评论(0) 推荐(0) 编辑
摘要:注意到,对于一棵树 \(T\) 的任一直径 \(a-b\),对于任意一点 \(u\),离 \(u\) 最远的点一定是 \(a\) 或 \(b\)。 考虑反证:如图,如果存在点 \(c\) 使得 \(dis(u,c)>\max(dis(u,a),dis(u,b))\)。 如图,\(a-b\) 为直径, 阅读全文
posted @ 2024-08-03 11:06 adam01 阅读(5) 评论(0) 推荐(0) 编辑
摘要:输入的图是一颗基环树。 对于 \(x,y\),如果把环上的边去掉,得到的森林里 \(x,y\) 仍然在同一颗树内,那么显然只有一条路。 否则一定要经过环,有两条路。 于是 dfs 或着拓扑排序找环即可。 #include<bits/stdc++.h> using namespace std; typ 阅读全文
posted @ 2024-08-03 11:06 adam01 阅读(4) 评论(0) 推荐(0) 编辑
摘要:对于一种构造,考虑怎么表示。 可以把相邻不同颜色建图连边。 注意到答案不可能小于 \(n-1\),否则图不联通,显然不可能。 考虑什么情况下是 \(n-1\)。图是一棵树。 考虑怎么构造出一棵树。 因为一种颜色出现次数大于等于这个点的度数,可以考虑可以确定叶子。 把剩余度数最小的往最大的连边,如果出 阅读全文
posted @ 2024-08-03 11:03 adam01 阅读(5) 评论(0) 推荐(0) 编辑
摘要:首先考虑 \(n\equiv 0\pmod 3\) 的情况。 非常简单, 然后考虑 \(n\equiv 1\pmod 3\) 的情况。 只要把多出来的第一列第一行填满就行了。还要比原来情况多一个连通块。 然后考虑 \(n\equiv 2\pmod 3\) 的情况。 手玩一下,再往左上角添一点东西就行 阅读全文
posted @ 2024-08-03 11:03 adam01 阅读(3) 评论(0) 推荐(0) 编辑
摘要:考虑每次更新就跑一遍 bfs。 \(O(n^4)\),复杂度不对? 但是注意到 \(dis\) 的最大值也就是 \(n\),每次更新 \(dis\) 至少减一。 所以最大值最多被更新 \(n\) 次,一共更新 \(O(n^3)\) 次,复杂度是对的。 直接暴力。 #include<bits/stdc 阅读全文
posted @ 2024-08-03 11:02 adam01 阅读(8) 评论(0) 推荐(0) 编辑
摘要:因为一条边只能在 \(V_i,V_i+1\) 之间,如果把 \(V_1,V_3,\cdots\) 看作一部分,\(V_2,V_4,\cdots\) 看作一部分,这就是个二分图。 考虑一个二分图怎么“展开”成最多的集合。 考虑答案上界。上界是点对最短路的最大值加一。 如果集合个数超过上界,那么一定存在 阅读全文
posted @ 2024-08-03 11:02 adam01 阅读(8) 评论(0) 推荐(0) 编辑
摘要:这里树的直径 \(l\) 定义为两个有硬币的点的最长距离。 做一次操作后,树的直径一定会变短。 我们发现,如果在直径端点做操作,直径减一。 在非直径端点操作,直径减二。 于是变成了一个威佐夫博弈,但是要注意的是,在直径长度为 0,1,2 的时候,每次都只能让直径减一。 因为直径长度为 1,先手必败, 阅读全文
posted @ 2024-08-03 11:01 adam01 阅读(3) 评论(0) 推荐(0) 编辑
摘要:D 先对 \(a\) 从小到大排序。 将题目转化成找到最小的 \(d\),使得恰好有 \(k\) 个 \(a_i\in [b-d,b+d]\)。 对于每个询问 \(b,k\),考虑二分答案。 设待检查的答案为 \(d\),二分找到最小的 \(p1\) 使得 \(a_{p1}\geq b-d\) 和最 阅读全文
posted @ 2024-07-27 23:04 adam01 阅读(67) 评论(0) 推荐(0) 编辑
摘要:题面 \(O(nd^2)\) 考虑 \(f(i,j,k)\) 表示 dp 到第 \(i\) 维,距离 \(p,q\) 曼哈顿距离 \(j,k\) 的方案数。 考虑朴素转移: 设 \(dis=|p_{i+1}-q_{i+1}|\)。 \[\begin{aligned} f(i+1,j+t,k+dis- 阅读全文
posted @ 2024-07-27 16:46 adam01 阅读(9) 评论(0) 推荐(0) 编辑
摘要:题面 注意到操作只对当前行/列有效,所以只要记录当前所在行和列是否有被操作。 设 \(f(i,j,x,y)\) 表示到了位置 \((i,j)\),第 \(i\) 行是否被操作,第 \(j\) 列是否被操作的最小代价。 转移: 设 \(col = c(i,j) \oplus x \oplus y\)。 阅读全文
posted @ 2024-07-27 16:44 adam01 阅读(3) 评论(0) 推荐(0) 编辑
摘要:题面 把“移动 \(a_n\) 至数列头”称为 rotate,删除一项称为 erase。 因为要求字典序最小,所以可以逐位贪心。 考虑一个数 \(a_i\) 怎么变成第一个数: 使用 \(n-i\) 次 rotate/erase,再 rotate 一次。删除或移动原来的 \(a_{i+1}\sim 阅读全文
posted @ 2024-07-27 16:44 adam01 阅读(3) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题