09 2023 档案
摘要:F - Find 4-cycle 显然就是在一个集合中枚举两个点,然后看在另一个集合中是否存在两个点与这个集合中的两个点都相连。 假设x是v1中的一个点,设它的两条出边是(x,a),(x,b),那么记录下f[a][b]=x,根据鸽巢原理,这样做是n^2的 #include<cstdio> #incl
阅读全文
摘要:G - 222 如果知道阶的相关知识,那么就是道板题。 一个显然的结论是k最多只能有一个2的因子,同时不能有5的因子,直接特判即可 那么剩余的情况我们可以保证(9p,10)=1,根据欧拉定理,在这种情况下一定有解。 那么问题转化为求最小的正整数x使得
阅读全文
摘要:赛后四题 B题直接枚举不存在的元素即可 C题的trick有点像之前abc的某道题,对于奇数位置它一定可以贡献,对于偶数位置,如果它有数选了,那么它就能够贡献。 表示到前i个且至少选了一个的最大答案。 #include<cstdio> #include<algorithm> #incl
阅读全文
摘要:D - Bracket Score 2 看了题解之后发现自己是弱智 如果能够猜到答案就是前n大-前n小,那么这题就解决了,直接用一个栈模拟匹配即可。 #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #inc
阅读全文
摘要:E - Complete Binary Tree 首先我们只考虑x子树中的答案,非常明显,一定是一个连续的区间,那么我们只需要找到两个端点即可,左端点一直往左走即可,但是右端点要注意,如果走不了,如果左端点存在,说明n就是我们的右端点。 处理完子树之后往上跳即可,因为树高只有60 #include<
阅读全文
摘要:F - typewriter 直接容斥即可,每次选出它们的并集。 #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<queue> #define fo(i,a,b) for (int (i)
阅读全文
摘要:P4782 【模板】2-SAT 问题 就是给关系进行连边,然后判断是否存在矛盾 输出方案的时候,就是在拓扑图上沿着反边走,但实际上tarjan求强连通分量已经排好序了 编号小的scc就是在拓扑序中排在后面的强连通分量 #include<cstdio> #include<algorithm> #inc
阅读全文
摘要:一个简单的询问 显然这个询问并不简单 如果做过莫比乌斯反演入门题problem b就会想到利用容斥将询问拆成四个 那么我们现在的问题变成如何求 [1,l] [1,r] 两个区间之间的答案,那么也是直接用莫队即可,只是维护的是两个区间的右端点,和原来的莫队有一些不一样,但是大体相同。 #include
阅读全文
摘要:经典的莫队+值域分块 虽然直接用莫队+树状数组也是能过的 贴个板子 #include<algorithm> #include<cstdio> #include<cstring> #include<vector> #include<queue> #include<map> #include<cmath
阅读全文
摘要:F - +1-1x2 做过好几道类似的题了,跟之前杭电的一道题很像。 反正就是在一个y的位置上下抖一抖再除2就行。 #include<algorithm> #include<cstdio> #include<cstring> #include<vector> #include<queue> #inc
阅读全文
摘要:F - Components 一眼经典的树上背包 表示在x的子树中有s个连通块,选不选x的方案数 那么转移的话就是按照背包的转移即可 然后隐约记得这个是 的 但是一直TLE,后面发现是有一个地方写法有问题,应该在计算完当前子树后再更新的size,这样
阅读全文
摘要:依然是四题,但是感觉太久没打,好像变得迟钝了。 B题大概就是令 C的话直接暴力维护每种颜色的第一个位置就行,反正只有50个 D的话刚开始没什么想法,构造题什么的真的不会啊 打表之后发现,对于k,在cost为0的情况下,最多能造出长度为\(
阅读全文
摘要:F - Manhattan Cafe 暴力dp是显然的,f[s1][s2] 假设a,b是第i维中p,q两个向量分别对应的数。 那么分类讨论一下 不妨设 a<c<b \[=\sum f[i-1][s1+
阅读全文
摘要:F - Operations on a Matrix 初看起来感觉不是很好搞,主要是有赋值操作,我们需要知道的是最近一次在这个行上的赋值操作以及之间的贡献 那么我们离线处理,每个3操作都往前找一个最近的同行2操作,然后两个做差就能得到中间的和。 #include<algorithm> #includ
阅读全文
摘要:E - Just one 怎么感觉大家都这么懂啊。 结论就是基环森林才有解 证明的话大概是这样 首先不是同一个连通块的话则互不相干,分开讨论即可。 如果一个点的度为1,那么它的出边唯一确定,那么我们可以删去这些点,删去的同时会造成一些新的点度为1,不断扩展即可,同时注意判断无解情况,有点类似于拓扑排
阅读全文
摘要:E - Subsequence Path 第一眼看过去感觉又是什么魔改BFS的样子,但是感觉不好弄 但是往dp上想就很容易 表示走到i的最小代价,按着给出的序列顺序转移即可,转移是O(1)的。 代码非常简单 #include<cstdio> #include<algorithm> #
阅读全文
摘要:F - Integer Division 挺有意思的一道题, 贪心的做法就是排序之后,逐个加入,如果不能被之前的表示则加入 题解证明的话大概是这样 考虑第i个数选不选 首先加入前面选的数,如果能够表示当前的数,则必然不选 否则前面的数不能表示当前的数,假如我们不选 假设最后得到一个合法
阅读全文
摘要:[abc317f](https://atcoder.jp/contests/abc317/tasks/abc317_f) 一看就是数位dp,但之前还想错了,今天课上突然想到 之前想的是怎样构造保证能够整除 但实际上将余数也设计到状态中就行 其他就是基本的数位dp ```cpp #include #i
阅读全文
摘要:[abc295e](https://atcoder.jp/contests/abc295/tasks/abc295_e) 这题主要是一个小trick 那么后面这个就很好算了 ```cpp #includ
阅读全文
摘要:稳定发挥4题 A题文件输出没去掉WA了一发 B题特殊情况没判到,WA了好几发,中间还交到D题去了 C题简单判断一下无解,然后组合数求一下就行 D题其实也挺简单的,考虑严格夹在两条竖线之间的点(不包括边界),如果它们不是在同一水平线上,则必然大于Manhattan距离,而且两个点对之间要么是x方向走多
阅读全文
摘要:今天的D题有点惊险了,属于是,还剩9分钟搞出来。 B题开始猜到了结论,只要在最大值和最小值之间都是可以的,证明的话,可以先考虑从数量大的开始填,然后反证法一下(口胡) C题选择attack肯定是尽量跟,dragon的defence越接近越好 如果有相等就直接选,否则就选前面的或者后面的 本来写的是b
阅读全文