ABC题解
文章平均质量分 76
issue是fw
19 years old, struggling in life, chasing daydreams.
展开
-
ABC224 F - Problem where +s Separate Digits(维护dp)
f[i]=∑j=1i( f[j−1]+sum(j,i) )f[i]=\sum\limits_{j=1}^i (\ f[j-1]+sum(j,i)\ )f[i]=j=1∑i( f[j−1]+sum(j,i) ) f[i]=∑j=1i−1f[j[+∑j=1isum(j,i)f[i]=\sum\limits_{j=1}^{i-1}f[j[+\sum\limits_{j=1}^i sum(j,i)f[i]=j=1∑i−1f[j[+j=1∑isum(j,i) ...原创 2021-10-26 11:47:11 · 457 阅读 · 0 评论 -
ABC223 G - Vertex Deletion(换根dp)
Link 考虑定义f[i][0/1]f[i][0/1]f[i][0/1]表示子树iii内能匹配的最大数目(状态0/10/10/1表示节点iii是否被使用) fff数组做一遍树形dpdpdp就可以得到.然后考虑换根,也就是当除掉点uuu后整棵树的最大匹配数目 想要得到除去uuu后的最大匹配数分为两部分,一个是uuu子树内,这部分显然就是 ∑(u,v)max{ f[v][0],f[v][1] }\sum\limits_{(u,v)}\max\{\ f[v][0],f[v][1]\ \}(u原创 2021-10-20 14:29:42 · 292 阅读 · 0 评论 -
15th 黑龙江省赛 K. Keeping A Secret(排列组合,思维)
Link 显然需要把深度相同的分开考虑 比如现在考虑深度为iii的节点有kkk个 第jjj个节点需要排在这kkk个节点的前xjx_jxj位置,于是我们先对xjx_jxj排序 先从小的开始考虑,因为它的限制是最小的,模拟以下会发现方案数为 ∏i=2k(min(k,xj)−i+1)\prod\limits_{i=2}^k(\rm min(k,x_j)-i+1)i=2∏k(min(k,xj)−i+1) 现在还需要考虑深度i−1i-1i−1(节点个数为laslaslas)和深度iii层(节点个数为sizsi原创 2021-10-18 16:44:28 · 293 阅读 · 0 评论 -
AtCoder Beginner Contest 222 F - Expensive Expense(换根dp)
LINK 定义g[i]g[i]g[i]表示从iii出发的最长链,f[i]f[i]f[i]表示次长链,初始令g[i]=D[i]g[i]=D[i]g[i]=D[i] 我们先做一遍dfsdfsdfs,可以处理出往子树内延申的链长 现在还要求的是往父亲节点延申的最长链 那么再做一遍换根dpdpdp. 设现在遍历到对于uuu到vvv这条权值www的边(此时uuu已经换根完毕,也就是f,gf,gf,g考虑了往父节点延申的路径) 先考虑若g[u]!=g[v]+wg[u]!=g[v]+wg[u]!=g[v]+w,说明uuu原创 2021-10-12 10:59:25 · 268 阅读 · 0 评论 -
AtCoder Beginner Contest 206(Sponsored by Panasonic) F - Interval Game 2(nim博弈)
LINK 当选择了区间[L,R)[L,R)[L,R)时,若某个区间与[L,R)[L,R)[L,R)相交那就再也不能选了 整个局面相当于分割为两个独立的局面,就是在区间[1,L][1,L][1,L]和区间[R,100][R,100][R,100]的游戏 多个独立的游戏可以用nimnimnim博弈来确定胜负 所以递归一下就可以得到解了 #include <bits/stdc++.h> using namespace std; const int maxn = 109; int n,m,L[maxn]原创 2021-09-17 11:48:47 · 231 阅读 · 0 评论 -
AtCoder Beginner Contest 207E - Mod i(前缀和,dp)
LINK 定义f[i][j]f[i][j]f[i][j]表示前iii个数分成jjj组的方案数 有转移 f[i][j]=∑(sumi−sumq)%j==0f[q][j−1]f[i][j]=\sum\limits_{(sum_i-sum_q)\%j==0}f[q][j-1]f[i][j]=(sumi−sumq)%j==0∑f[q][j−1] 时间复杂度为O(n3)O(n^3)O(n3) 考虑能转移的i,qi,qi,q满足sumi,sumqsum_i,sum_qsumi,sumq在模jjj意义下同余 那原创 2021-09-16 18:29:24 · 263 阅读 · 0 评论 -
AtCoder Beginner Contest 207 F - Tree Patrolling(树上背包)
LINK 定义f[i][j][sta=0/1/2]f[i][j][sta=0/1/2]f[i][j][sta=0/1/2]表示iii的子树中有jjj个节点受到保护 当sta=0sta=0sta=0时,节点iii和他的直接儿子都没有放置保安 当sta=1sta=1sta=1时,不管儿子怎样,反正点iii放置了保安 当sta=2sta=2sta=2时,自己没有放置保安,但至少存在一个直接儿子放置了保安 转移方程就像树上背包那样类似的转移即可 特别的当之前自己的状态为000且儿子的状态为111时,那么自己的状态原创 2021-09-16 16:40:26 · 340 阅读 · 0 评论 -
AtCoder Beginner Contest 209 E - Shiritori(博弈,图)
LINK Takahashi先手(叫做小TTT),Aoki后手(叫做小AAA) 每个人轮流说一个单词,这个单词的前三个字母必须等于上一个单词的后三个字母 现在问当小TTT说出的第一个单词为sis_isi时,能否获得胜利?? 可以O(n2)O(n^2)O(n2)暴力枚举两点间是否有边,但是复杂度太高 考虑每个单词只有前三个字母和后三个字母有用 把前三个字母浓缩成一个点,后三个字母浓缩成一个点 那么单词sis_isi(设长度为lll)就表示能从{s1,s2,s3}\{s_1,s_2,s_3\}{s1,s原创 2021-09-16 12:18:18 · 320 阅读 · 0 评论 -
ABC 209 F - Deforestation(插入dp)
LINK 题意 nnn棵树,砍掉第iii棵树的代价是Hi+Hi−1+Hi+1H_i+H_{i-1}+H_{i+1}Hi+Hi−1+Hi+1,之后HiH_iHi变为000 砍掉这nnn课树有n!n!n!种砍树顺序,问有多少种是最小代价的砍树方案. 怎样砍树是最优的? 现在只考虑第iii棵树和第i+1i+1i+1棵树带来的代价 若第iii棵树先被砍,那么此时代价为Hi+2∗Hi+1H_i+2*H_{i+1}Hi+2∗Hi+1 若第i+1i+1i+1棵树先被砍,那么此时代价为2∗Hi+Hi+12*H原创 2021-09-16 11:09:56 · 378 阅读 · 0 评论 -
AtCoder Beginner Contest 210 D - National Railway(枚举,优化)
LINK 选定节点(i,j)(i,j)(i,j)和(q,w)(q,w)(q,w),假定i<=q&&j<=wi<=q\&\&j<=wi<=q&&j<=w 那么代价为 Ai,j+Aq,w+C∗(q−i+w−j)A_{i,j}+A_{q,w}+C*(q-i+w-j)Ai,j+Aq,w+C∗(q−i+w−j) 其中(i,j)造成的代价为(i,j)造成的代价为(i,j)造成的代价为Ai,j−C∗(i+j)A_{i,j}-C*(i原创 2021-09-15 20:15:41 · 235 阅读 · 0 评论 -
AtCoder Beginner Contest 213G - Connectivity 2(状压dp神仙题)
LINK 题意 给定简单无向图 G=(V,E)G=(V,E)G=(V,E),点的编号从111到∣V∣=n|V|=n∣V∣=n.对于k=2..nk=2..nk=2..n,求 H=(V,E′⊆E)H=(V,E′⊆E)H=(V,E′⊆E) 的个数,使得 111 与 kkk 连通。 n≤17,m<=n∗(n−1)2n≤17,m<=\frac{n*(n-1)}{2}n≤17,m<=2n∗(n−1)。 考虑最后图的状态,点111和点kkk处于同一个连通块,这个连通块到其他点没有边 定义全集U=(1原创 2021-09-15 17:08:37 · 490 阅读 · 0 评论 -
AtCoder Beginner Contest 215 G - Colorful Candies 2(期望,根号复杂度)
LINK 单独考虑每一类颜色糖果的期望即可 比如当选出kkk个糖果时,第iii类糖果有xix_ixi个 那么没有选到这类糖果的概率是∏j=0k−1n−j−xin−j\prod\limits_{j=0}^{k-1}\frac{n-j-x_i}{n-j}j=0∏k−1n−jn−j−xi,选到的概率取个反即可 设共有www类糖果,选出kkk个的期望颜色数就是 ∑i=1w(1−∏j=0k−1n−j−xin−j)\sum\limits_{i=1}^w(1-\prod\limits_{j=0}^{k-1}\fr原创 2021-09-15 13:01:17 · 299 阅读 · 0 评论 -
AtCoder Beginner Contest 205 E - White and Black Balls(卡特兰数变形)
LINK 看到题目非常像卡特兰数,实际上就是 考虑以(0,0)(0,0)(0,0)为起点,选白球相当于往右下走一步,黑球相当于向右上走一步 白球nnn个,黑球mmm个,设x=n−mx=n-mx=n−m 放在坐标轴上,类似这样的一张图 #include<bits/stdc++.h> using namespace std; #define int long long const int mod = 1e9+7; const int maxn = 2e6+10; int n,m,k,fac[max原创 2021-07-08 15:50:59 · 389 阅读 · 0 评论 -
AtCoder Beginner Contest 206 E - Divide Both(容斥)
LINK 不是多么难的一题,但是却写了很久,下次不能再脑溢血了… 题意 求x∈[L,R]&&y∈[L,R]x\in[L,R]\&\&y\in[L,R]x∈[L,R]&&y∈[L,R]的合法(x,y)(x,y)(x,y)对的数量 其中设gcd(x,y)=kgcd(x,y)=kgcd(x,y)=k,满足k!=1&&k!=x&&k!=yk!=1\&\&k!=x\&\&k!=yk!=1&&原创 2021-07-08 13:12:23 · 355 阅读 · 0 评论 -
ABC207 E - Mod i(简单dp的优化)
LINK 感觉这种题非常套路 首先有一个很明显的dpdpdp,尽管它的复杂度高达O(n3)O(n^3)O(n3)无法通过 但我们还是小心翼翼的把它写出来 定义f[i][j]f[i][j]f[i][j]表示前iii个数分为jjj段的合法方案数,记pre[i]pre[i]pre[i]为数组aaa的前缀和数组 f[i][j]=∑f[q][j−1]f[i][j]=\sum\limits f[q][j-1]f[i][j]=∑f[q][j−1] 其中qqq满足pre[i]%j==pre[q]%jpre[i]\%j==p原创 2021-07-08 10:29:00 · 300 阅读 · 0 评论