标签:media edit 表示 case short car 题意 生成 进制
ABC咕咕咕
题意:给一个数字串,问最多能选出几个不相交的子串使得它们组成的 \(10\) 进制数都是 \(3\) 的倍数。
\(|s| \leq 2\times 10^5\)
题解:
\(dp_{i,j}\) 表示第 \(i\) 为,数字和 \(\%3\) 为 \(j\),最多选出几个子串。
\(O(|s|)\)
题意:给一个序列 \(a_1 \cdots a_n\),求有几个子区间的中位数是 \(m\)。(长度为偶数的中位数算小的)
题解:
首先原序列的元素并没有意义,只有和 \(m\) 的大小关系有意义,把 \(=m\) 的标成 \(0\),\(<m\) 的标成 \(-1\),\(>m\) 的标成 \(1\)。
假设一个集合里面有 \(x\) 个数 \(=0\),则只有这个集合里面所有元素的和 \(\in [-x,x+1]\) 才合法。
考虑容斥,先算和 \(<-x\) 的子区间个数。
如果插入一个 \(-1\) 相当于给和 \(-1\),插入一个 \(1\) 相当于给和 \(+1\),插入一个 \(0\) 相当于给 \(x-1\)。
要看 \(-x\) 跟和的大小关系,就考虑和 \(-(-x)\) 的值。
把 \(-1\) 标成 \(-1\),\(1,0\) 标成 \(+1\)。
问题就变成了求和 \(< 0\) 的子区间个数,把前缀和求出来,用树状数组维护每个前缀有几个比它大的即可。
和 \(\leq x+1\) 的子区间个数方法类似,不过把 \(0\) 标成 \(-1\),不详细说了。
\(O(n\log n)\)
题意:有一个 \(n\) 个点 \(m\) 条边的无权无向图,求出 \(k\) 颗生成树,使得从 \(1\) 到它们的距离跟原图上一样。
\(n,m\leq 2\times 10^5\),\(k\times m \leq 10^6\)
题解:
对于每个 \(dis=x>0\) 的点,选出恰好一条边,连 \(dis=x-1\) 的点即可。
证:
首先对于每个 \(dis=x>0\) 的点,必能选出一条边使得那个点 \(dis=x-1\) ,否则原图上最短路不是 \(x\)。
其次这样选一定是一棵树,因为有 \(n-1\) 条边且不可能出现环。
然后不存在一条边连的两个点 \(dis\) 相等,否则要不然不连通要不然 \(dis\) 不合法。
所以说有且只有这种选法。(证明的好像不太严格)
\(O(n+m\times k)\)
Codeforces Round #496 (Div. 3)
标签:media edit 表示 case short car 题意 生成 进制
原文地址:https://www.cnblogs.com/wangziji/p/13649246.html