随笔分类 - trick
摘要:abc227F 依次钦定x为路径上的第k大的数,然后dp即可。 #include<cstdio> #include<algorithm> #include<cstring> #include<map> #include<queue> #include<bitset> #include<cmath>
阅读全文
摘要:[PA2009] Cakes 题目描述 一个有 \(n\) 个点 \(m\) 条边的无向图,每个点有一个点权 \(a\)。 对于任意一个三元环 \((i,j,k)(i<j<k)\),它的贡献为 \(\max (a_i,a_j,a_k)\)。 求所有三元环的贡献和。 我们可以给无向边定向,具体的做法是
阅读全文
摘要:F - Teleporter Setting 题意: 给出n个顶点和一些边,其中一些边两个端点确定,另一些边只有一个端点确定,对于每个i,令其为所有这些不确定的边的另一个端点,问1到n的最短距离是多少。 建立一个虚点,然后f,g分别表示1,n到x的最短距离, 分别计算两种经过i的情况,以及可能不经过
阅读全文
摘要:E - Ring MST 有i种操作,第i种操作为选择一个数x,然后在x和(x+a[i])%N之间连边,代价为c[i],问是否能够让图联通,如果可以最小生成树的边权和是多少。 首先按照克鲁斯卡尔算法,我们肯定是按照边权从小到大连。 考虑前i种操作都操作完后的连通块个数。 若u,v在同一联通块, 则
阅读全文
摘要:数的范围是在k进制下的n位数 一个数是lucky的当且仅当在k进制下,存在一个数位上的数,等于其他数位上的数在模k意义下的和。 利用减法原理 假设一个数的数位和为s,如果存在一个数,那么有 s-x%k=x%k -> s%k=2x%k 那么我们找到这样的x,就是说在计算和为s的方案数是不能使用这些x
阅读全文
摘要:abc132F - Small Products 容易想到暴力dp,f[i][j]表示到第i个位置,且i位置上填的是j的方案数。 虽然N非常大,但是如果我们考虑按\(\frac{n}{k}\)的值分块,那么就只有根号级别的数量 \(f[i][j]\)表示在到第i个位置,且第i个位置选了第j个块中的数
阅读全文
摘要:abc335F - Hop Sugoroku 首先容易想到\(O(n^2)\)的dp 考虑优化,对于一个i,只会对满足\(i+a[i]*x=j\)的j有贡献。 也就是j%a[i]=i%a[i] 那么我们可以延迟转移,用cnt[a[i]][i%a[i]],来记录贡献, 然后我们数组不可能开那么大,所以
阅读全文
摘要:https://atcoder.jp/contests/arc168/tasks/arc168_b 不会博弈,但是会乱搞 首先直接判断-1的情况 然后我们直接考察最大值能不能取到 假设存在一个数ai \(a_1\oplus a_2 ...\oplus(a_i-x)\oplus...a_n\)=max
阅读全文
摘要:https://codeforces.com/contest/1864/problem/D 结论很好猜,直接从上到下做就行 我们可以维护差分数组,表示对下面的影响,逐行往下推就行,当然+和-要分开,因为一个是往前推,一个往后推。 时间复杂度\(O(n^2)\) #include<cstdio> #i
阅读全文
摘要:https://codeforces.com/contest/1864/problem/C 思维越来越僵化了 假如\(n=2^k\),直接每次/2就行。 否则,我们可以考虑如何转化成上面的情况 令\(n=2^k x\),那么我们显然可以转移到\(n=2^k (x-1)\),因为x是奇数,所以2的次幂
阅读全文
摘要:https://atcoder.jp/contests/abc280/tasks/abc280_f 对于每一个连通块单独处理,首先判断是否全为0环,可以用bfs判断。 从一个点出发计算其他点到它的最短距离,如果存在一个不唯一,说明存在非零环。 然后计算距离的时候直接-d[x]+d[y]即可 #inc
阅读全文
摘要:https://codeforces.com/contest/1325/problem/D 有一个非常经典的结论 a+b=(a^b)+2(a&b) 这个题就可以往上面靠,首先我们观察一下,对于两个数的情况,如果(v-u) mod 2=1,必然无解,试着将它扩展一下,也是对的,因为最低一位没有进位。
阅读全文
摘要:https://codeforces.com/problemset/problem/1415/D 从高位到低位考虑,需要注意的是我们的最后一个数可能是有后面的数异或来的,需要记录异或了几次(下面会说) 如果当前这一位全都为0,直接下一位 如果当前这一位出现了至少4个1,那么答案为1。 如果只有一个1
阅读全文
摘要:https://codeforces.com/problemset/problem/1446/C 断断续续想了挺久的,还发现看错题了。 首先一个显然的结论是不会成环,证明显然。 突破口在于从高位往低位考虑,我们按照最高一位的值分成两类,一类是这一位为0,另一类为1,那么显然在我们不进行任何操作的时候
阅读全文
摘要:cf797e 还是暴力,将不同的询问根据k分开,然后bfs,建出一棵树,然后dfs。 时间复杂度:O(能过) 稍微口胡分析一下 大概是 \(min(1,q[1])*n/1 +min(2.q[2])*n/2+min(3,q[3])*n/3+.....\) qi表示第k=i的询问个数 因为每一种k它最多
阅读全文
摘要:cf1582F2 对于每种数可以维护一个列表v[x],表示到当前位置,最后一个数小于等于x,能够取到的值,对于当前的数ai,我们可以用v[ai]中的值x与ai异或,来更新v[ai+1],v[ai+2]后面的值。 然后就是有两个优化,每次我们更新完后,都对v[a[i]]清空,因为只有两个相同数之间的数
阅读全文
摘要:cf1322BPresent 首先拆位是显然的,对于两个数a[i],a[j],除了考虑当前位上的数,我们还要考虑是否会产生进位,我们可以利用基数排序+双指针,因为我们每次都是将低位的排好序了,所以我们可以用双指针计算进位,然后分类计算一下,当前为为1的情况即可。 #include<cstdio> #
阅读全文
摘要:cf1709E. XOR Tree 贪心是显然的,关键是如何合并两棵子树的信息,可以采用启发式合并。 #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<map> #include<vecto
阅读全文
摘要:cf1834E 首先可以估计一下答案的量级,因为小于答案的质数都要必须要出现,5e6以内的质数大概就是3e5,所以答案不超过5e6。 我们维护以i右端点的lcm的值,这些值的数量不会太多,因为每次增长都至少×2,所以是log级别。 每次新加的时候记得更新和去重即可。 #include<cstdio>
阅读全文
摘要:F. Unique Occurrences 假如我们删除所有权值为x的边,那么所有权值为x的边对答案的贡献就是 \(\sum sz[u]*sz[v]\) sz表示两个联通块的大小,且(u,v)的边权为x 我们可以用可撤销并查集来进行处理,简单来说就是将一条边的存在时间看作区间,然后挂到线段树上,然后
阅读全文

浙公网安备 33010602011771号