Codeforces - Avito Code Challenge 2018

Portal

A. Antipalindrome

暴力。

B. Businessmen Problems

暴力。

C. Useful Decomposition

居然不是C打头的?!
将一棵树划分成若干条边不相交的路径,使得任意两个路径均有交点。
易知树上的两条路径最多有一个交点。若有三条路径两两相交,则必形成三个交点或一个交点。设路径1与路径2交于\(v_1\),路径1与路径3交于\(v_2\),路径2与路径3交于\(v_3\)。若\(v_1\neq v_2 \neq v_3\),则有路径\(v_1-v_2-v_3\)形成环路,如原图为树矛盾;所以必有\(v_1=v_2=v_3\)。以此类推,原树划分成的所有路径都交于一个点。
那么原树中最多存在一个度数大于三的点\(rt\)\(rt\)就是交点。当\(v\)的度数为\(1\)时输出\((v,rt)\)即可。

D. Bookshelves

将一个\(n(n\leq50)\)个数的序列\(\{a_n\}(a_i\leq2^{50})\)划分成\(m\)段,使得每段的和的按位与和最大。
从高位向低位DP。做到第\(k\)位时,记录\(ans\)表示从最高位到第k-1位能取到的最大值。\(dp[i][j]\)表示在满足最高位到第k-1位依然是\(ans\)的情况下,把前\(i\)个数分成\(j\)份能否让第\(k\)位为\(1\)

\[dp[i][j]=\exists t,dp[t-1][j-1]为真且sum(t,i)\& ans=ans,sum(t,i)在二进制下的第k位为1 \quad(j\leq t \leq i) \]

つづき...

Code

A, B, C, D

posted @ 2018-05-28 08:46  VisJiao  阅读(500)  评论(0编辑  收藏  举报