CF1498 解题报告

A. GCD Sum

\(gcdSum(n)=gcd(n,Sum(n))\)\(Sum(n)\) 定义为 \(n\) 的各位数字之和,每次给出一个 \(n\) ,找出一个 \(x\) 满足 \(gcdSum(n+x)>1\)

$t\le 10^4 , n\le 10^{18} $ 。

考场上有点蒙,根据直觉满足条件的会有很多,直接打了个暴力向后枚举是否满足条件。

赛后看了题解发现是如果是三的倍数则一定满足条件,所以最多枚举三个。

code

B. Box Fitting

给出 \(n\) 个长度为 \(2\) 的幂次,宽为 \(1\) 的距形,要你求对于一个长为 \(W\) 的距形,满足可以放入这 \(n\) 个距形,宽最小是多少。

\(n\le 10^5 , W\le 10^9\)

看到 \(2\) 的幂次,就直接上贪心,每次能放就放,显然是对的。

这个憨憨在考场上写 set ,结果因为不熟悉 std 的使用边翻别人博客边写代码,成功花了大量时间。

code

C. Planar Reflections

有依次 \(n\) 个平面,一开始会从左边飞来一个大小为 \(m\) 的点,对于一个大小为 \(x\) 一旦碰到一个平面就会分裂出一个大小为 \(x-1\) 的点反向飞行,如果 \(x\)\(1\) 则不会分裂,问最后有几个点。

n,m\le 1000$ 。

这题我做了挺久的,果然是 dp 不太熟练(

显然按大小依次 dp ,可以发现,对于同一个大小的点,飞的方向是相同的,然后 \(dp_{i,j}\) 代表经过第 \(j\) 个平面的大小为 \(i\) 的点有多少个,对于 \(i>1\) ,显然对应着分裂到 \(i+1\) 的点的个数。

\(m-i\) 为偶数时都是从左往右飞,显然有 \(dp_{i,j}=\sum\limits_{k=1}^j dp_{i+1,j}\) ,这个可以前缀和优化。

\(m-i\) 为奇数是翻过来的,这个做法似乎吊打了官方题解

code

D. Bananas in a Microwave

一开始你有一个数字 \(X=0\) ,依次有 \(n\) 次操作,给出 \(opt,x',y\) ,设 \(x=\frac{x'}{10^5}\)\(opt\)\(1\) 时可以选择一个 \(k(0\le k\le y)\) ,将你的数字做 \(k\)\(X=\left\lceil X+x\right\rceil\) ,若为 \(2\) 则是乘。

问对于每个数字,要达到这个数字的最后一次 \(k\) 不为 \(0\) 的操作最小多少。

\(n\le 100 , y\le m\le 10^5\)

考场上犯傻,成功将题目看成了求最短路,也就是 \(n\) 次操作的 \(k\) 之和最小,然后浪费了至少半个小时想这题,最后弃掉了。

实际上这题相当简单,直接暴力 \(bfs\) 就是 \(\mathcal{O(nm)}\) 的了,对于上一次操作完后可以到达的操作的数都大力从小往大枚举操作数,一旦碰到了已经可达的就停止,由于每个数字最多被搞一次,所以复杂度是正确的。

然而赛后订题我用了奇怪的 dp 。

code

对于我看错的题,我只会 \(\mathcal{O(nm\log m)}\) 的屑做法,有没有大佬教我线性啊。

大概就是,对于每次操作,对每个点向一次操作后的连边,可以发现是个内向树森林,然后 dp 的转移相当于是子树内距离它深度为 \(x(x\le y)\) 的点的 dp 值加 \(x\)\(\min\) ,这个显然可以线段树合并维护。

F. Christmas Game

Alice 和 Bob 在一棵 \(n\) 个点的树上玩游戏,第 \(i\) 个节点上有 \(a_i\) 个石子,每轮可以选择一个深度至少为 \(k\) 的节点并移动任意多石子到其 \(k\) 级祖先处,对每个结点询问如果将其作为根谁会赢。

\(n\le 10^5 , k\le 20 , a_i\le 10^9\)

我差点以为我要掉 rating 了,毕竟在 D 花了大把时间,然后我想起来我做完 A 的时候有两个人交了 F ,然后就来看 F 了(雾

事实证明 F 是 sb 题,成功上分/cy

这是一道显然的树上阶梯博弈。

首先,对于 \(de_u \mod k=i\) 的节点可以分在一个游戏中,总的 \(SG\) 值就是这 \(k\) 个游戏的 \(SG\) 值的异或和。

对于每个游戏,可以发现需要移动偶数次才会结束的点是毫无用处的,因为一旦移动到奇数位,对手可以再次移动到偶数位,将移动到偶数看做删除,就变为了奇数位上的 \(Nim\) 游戏了,那么 \(SG\) 就应该是奇数位上的 \(a_i\) 的异或和。

\(dp_{u,i,j}\) 为以 \(u\) 为根, \(de_v\mod k =i\) 且, \(\left\lfloor\frac{de_v}{k}\right\rfloor \mod 2 =j\)\(a_v\) 的异或和 ,然后换根 dp 即可,复杂度 \(\mathcal{O(nk)}\)

code

E. Two Houses

给出一个 \(n\) 个点的竞赛图,给出每个点的入度,每次你可以询问 \(x\) 是否可以达到 \(y\) ,你要找出一个点对 \((X,Y)\) ,满足互相可达且入度之差的绝对值最大,注意当交互库的回答为 YES 时就不能再询问了。

\(n\le 500\)

切了 F 回去又想了好久的 D ,中途还去英语打卡(

然后回来看 E ,花了几分钟就过了(

虽然这个屑对竞赛图不太清楚,但是通过直觉可以想到暴力枚举入度的差然后询问任意两个点,入度大的问入度小的,返回 YES 就是答案。

证明可以去看竞赛图的基础知识(

code

看到注释就知道我是乱写的了

有不用询问的 \(\mathcal{O(n)}\) 做法,有兴趣的可以去看看。

posted @ 2021-04-01 11:14  Dabuliuzp  阅读(160)  评论(0编辑  收藏  举报
/* */ 返回顶端