[GCJ2020Qual] Google Code Jam Qualification Round

qual

Vestigium

简单模拟题。

a.cpp

Nesting Depth

简单分治题。

b.cpp

Test Case 1

明显,对于S是01串的情况,由于0不可能在任何的括号中间,最优解只能是每一堆1在一个括号内。

Test Case 2

  • 考虑所有0的位置,它们将字符串S分成了若干个子问题S',这些子问题两两没有交集,可以分开考虑。
  • 对于一个子问题S',最优解显然是在最外面套一对括号。这样,S'中的所有数会减少1。

反复进行以上两个操作即可。

Parenting Partnering Returns

简单贪心题。(排序)

c.cpp

(注意一段时间实际上是一个左闭右开的区间。)

ESAb ATAd

简单交互题。(信息恢复)

策略:(\(B\)为偶数)

  1. 问最左边&右边的5个数。
  2. 若已经翻转了一次,当前已经求得最左边的\(S\)与最右边的镜像\(T\)
    1. \(S_x=T_x\)\(S_y\ne T_y\):询问\(x,y\)即可。
    2. 否则,若\(S=T\),则只需知道是否翻转/取反+翻转。
    3. 否则,若\(S=\overline{T}\),则只需要知道是否翻转/取反。

至少可以得到\(10+8*14=122\)个bit,足够了。

Indicium

较简单构造题。(拉丁方阵)

结论(?):若主对角线已知,且没有一个元素出现次数\(=n-1\),则存在一个合法的拉丁方。

该问题是一个精确覆盖问题,求解可以使用构造/搜索/DLX解决。

posted @ 2021-05-20 21:19  frank3215  阅读(75)  评论(0编辑  收藏  举报