[Codeforces]CF Global Round 15ABCD

【CF Global Round15】

https://codeforces.com/problemset/problem/1552/A ,把字符串排序好得到\(t[1,\dots,n]\),把\(str[i]\neq t[i]\)的抽出来就行。


https://codeforces.com/problemset/problem/1552/B ,虽然在这里可能会存在\(a<b,b<c\)但是\(a>c\)的情况,但我们依然可以重载小于号,从左到右取max,如果\(x\)符合答案的条件,一定会被取到,同时再check一边是否比别的都要大就行。


https://codeforces.com/problemset/problem/1552/C ,卡了许久,题目有一句话很关键:o point strictly inside the circle belongs to all 3 chords.也就是只要有交叉就会多一个交点,不用管三线共点的情况。于是可以证明,最优的染色方法是把剩下的\(2(n-k)\)个点拎出来重新标号,然后按照第\(i\)个点连接\(i+(n-k)\)来连线(假设原本是\(a-b,c-d\)这样没有交叉的连接,如果换成\(a-c,b-d\)这样有交叉的连法,交点至少不会变少)。


https://codeforces.com/contest/1552/problem/D ,给一个\(a[1,\dots,n]\),问是否存在\(b[1,\dots,n]:\)对所有\(a_i\)存在\(1\leq j,k\leq n:a_i=b_j-b_k\),这题\(n\leq 10\)

\(n\)只有10看着就很乱搞…首先\(b\)的一个差分一定能搞定一个\(a_i\),所以\(n\)个位置至少能解决\(n-1\)\(a_i\),问题就是剩下一个怎么搞定。

如果\(a_i=0\)或者\(a_i=a_j\),就可以少用一个\(b\)的代价,这时候一定是YES,进一步,只要能找到\(a[1,\dots,n]\)的一个子序列\(\pm a_{p_1}\pm a_{p_2}\dots\pm a_{p_k}=0\)就行,当然这只是充分条件,但我们猜他必要,于是\(O(n3^n)\)暴力枚举试着交一发,过了,好那他就是必要条件了(bushi)。

[必要性]假设存在符合条件的\(b\)数组,考虑张\(n\)个点的图,每个点的点权是\(b_i\),接着因为每个\(a_i\)都能写成\(b_{j_i}-b_{k_i}\)的形式,我们连一条\((j_i,k_i)\)的边权为\(a_i\)的边,这样就构成了一个\(n\)个顶点\(n\)条边的图,\(|V|=|E|=n,|V|+|F|-|E|=2\),此时一定有环(此时先不考虑方向),而这个环上:

\(\begin{aligned}(b_{v1}-b_{v2})+(b_{v2}-b_{v3})+\dots+(b_{v_{k-1}}-b_{vk})+(b_{vk}-b_{v1})=0\end{aligned}\)

我们说每条边对应一个\(a_i\),那这个式子就意味着\(a[1,\dots,n]\)的一个子序列\(\pm a_{p1}\pm\dots\pm a_{pk}=0\),也就是我们前面的充分条件。

posted @ 2021-09-03 00:26  yoshinow2001  阅读(52)  评论(0)    收藏  举报