用户工具

站点工具


2020-2021:teams:acm_life_from_zero:8.1-8.7

这是本文档旧的修订版!


2020/08/01-2020/08/07周报

团队训练

李元恺

题目

CF1383DE

比赛

AtCoder Beginner Contest 174(atcoder) pros:6/6/6 rk:536

姜维翰

比赛

cf edu 92(码农专场.jpg)

袁熙

专题

没有专题

比赛

没有比赛

题目

补题(板子) 牛客第五场B
链接
题意;给边带权的树,可以连边或删边,要求始终连通且形成的环异或和=0,求最后图的最小权值和
思路:对原图的树,可以把边权用所连点的权值异或和来表示,转化成异或最小生成树
类似的模板题:链接

本周推荐

李元恺

Codeforces Round 659 1E

标签:dp

题意:有一个01串S,长度为n,每次可以选相邻两个数,将这两个数替换为他们的或运算值,求n-1次操作内能够得到多少个不同的串(mod1e9+7)。

思路:考虑对于每个合法结果,一定存在一个最小的i使得我们可以通过操作s[1-i]得到这个字符串。令f[i]表示最短匹配为s[1-i]的串数,分别考虑这样的串下一个填0和填1进行转移。

 设原串为p,则
 填1:p+1的最短匹配一定是s[i]向后找的第一个1
 填0:若p的最短匹配是s[1-i],则s[1-i]的末尾0数一定和p相等,因此若s[i+1]是0,则最短匹配的位置是i+1,否则设s[1-i]末尾0数为k,最短匹配是i后面第一个连续k+1个0。

这样就可以O(n)计算f[1-n],注意并不是所有f[i]都可以作为答案,因为后缀0数不能超过s串的后缀0数

comment:这周做的最有意思的题,推荐给大家

袁熙

CF1372F 题目链接

标签:构造 交互

题意:一个长为$n$,不降的序列,由$k$个不同的数组成,每次可以询问$l,r$中的众数(数量相同取更小值),要求在$4k$次询问内确定原序列

思路:考虑如果已知某个数在某个位置$p$,和这个数的总出现次数$f$。那么可以用两次询问$(p,p+f-1),(p-f+1,p)$得到这个数的结果.那么如果能使所有数都出现在查询结果中,就能知道整个序列。
要想构造出上述的查询,我们可以从$(1,n)$开始,用当前区间的最高频率$f$为间隔,每次确认$f,2f,..$这些点的数值,这些数值两两不等,且$(1,n)$查询得到的众数一定在这些数值中。接下来递归地对两边的区间进行询问。这样对于每个数,找到它的一个出现位置+确定它的出现区间+递归时确定它作为众数的区间,共4k次询问。

comment:做法比较多的构造题

姜维翰

CF1292C

tag:dp

题意:给一棵n个点的树,要求给每条边选择一个0到n-2的数,不可以重复,mex(u,v)表示点u到点v经过的数的mex,求最大化所有点对的mex和,n=3000

解法:可以看到,树上存在一条链,链上包含[0,l]上的所有值,答案只和这个链的位置和链上数的摆法有关 我们还可以通过贪心,看出链应该是这个样子的:10,8,6,4,2,0,1,3,5,7,9 于是链的摆法就确定了

那么我们就f[u][v]来表示链为u到v时的答案

在算答案的时候要把mex求和转化成对mex大于某个值的点对的计数

这样就可以n方的时间内完成了

comment:很独特的一道dp题,答案计数方法的转换也很经典

2020-2021/teams/acm_life_from_zero/8.1-8.7.1596783114.txt.gz · 最后更改: 2020/08/07 14:51 由 lak