Educational Codeforces Round 102 (Rated for Div. 2)
1473A
题意:用序列中两个数相加来替换序列中其他的数,判断能否使得整个序列的数小于等于d。
题解:乱搞题。
代码:A
1473B
题意:根据题目给出概念判断两个字符串是否存在最小公共倍数字串。
题解:求出两个字符串长度的最小公倍数L,将S和T的长度补全到L,判断两个字串是否相等即可。
代码:B
1473C
题意:给出两个数字n和k,其表示长度为2k的序列,其中前n个数为有序自然数1到n,后2*k-n个数每个数都比前一个数小1。题目要求求出一个长度为k的排列p,产生一个长度为2k的序列b,满足b[i]=p[a[i]],且b的字典序最大且逆序数与a相同。
题解:1到n的自然数排列后(n-k)个元素反转即可求出p。
代码:C
1473D
题意:给出一个长度为n的只有+和-的序列,每个+表示将x+1,-表示将x-1,且x初始为0。m次询问,每次询问±序列的一个区间,判断在其中出现了多少个不同的x。
题解:对于一个区间我们可以用O(length)的时间求出其出现的x的种类数为x的最大值和x的最小值之差。经思考发现这种做法可以表示为区间相加的形式,直接上线段树维护区间加和即可解决问题。
代码:D
1473E
题意:给出一张无向带权图,求出1点到其余每个点的特殊最短路。特殊最短路的权值为路径权值和-路径最大边权值+路径最小边权值。
题解:对于每个点可将其拆为四个点p[i][0/1][0/1]表示到i点的路径长度是否减去了一条边是否加上了一条边。不同编号同下标的点正常连边,不同编号不同下标的点根据拆点表示的意义连边。然后跑最短路,最后p[i][1][1]即为答案。
证明:如果当前路径减去的边不是最大或者加上的边不是最小边,则表示路径长度减去最大边或者加上最小边更优,即当前路径不是最短路。
代码:E
1473F
题意:给出n个点,每个点有a和b,从中选取点集,使得b的和最大。选择的点集满足如果选择了i,则必须选择j,j满足j<i且a[j]是a[i]的因子。
题解:选i必选j,求点的贡献和最大,经典的最大权闭合子图问题。源点连边b>0的点,汇点连边b<0的点,容量为该点b的绝对值。其余两点之间根据限制连边,容量INF。最后b正值的和减去最小割即为答案。题目给出空间比较小,需要优化建边,a的值域较小为[1,100],i点向不同的下标最大的a连边即可。
代码:F