CF341E Candies Game 题解
:::::info[题目基本信息]
考察:构造(
题目简介:
给定非正整数序列
- 选择
x,y\in[1,n] ,使得a_x\le a_y ,同时令a_y\leftarrow a_y-a_x,a_x\leftarrow 2a_x 。
要求一系列操作完成后序列中恰好有两个数非 -1。
数据范围:
-
1\le n\le 1000 -
0\le \sum a_i\le 10^6 ::::: 显然,操作不会使序列中
0 的个数减少,同时也不会使0 的个数一次性减少的个数超过1 ,所以在序列非0 个数小于2 时便无解。
我们先考虑让两个数来回操作的情况,但是这样很快就寄了,比如我们无法通过操作把1,2 两个数中的一个变为0 。
那我们再考虑3 个数内部操作,我们先考虑特殊情况。
钦定操作的三个数为a_x.a_y,a_z ,且a_x\le a_y\le a_z 。
容易发现,在a_x\mid a_y 时,我们可以通过对于k=\dfrac{a_y}{a_x} 二进制下的从低到高的每一位进行分讨(设目前处理到了第i 位): - 当第
i 位为1 时,操作(x,y) 。 - 当第
i 位为0 时,操作(x,z) 。
这时我们就能把
但是在
令
这样我们就有了一种构造方案,现在我们来观察一下复杂度。
容易发现,令
:::::success[证明]
当
当
:::::
这样轮数大概是在
这样构造复杂度大约是在
时间复杂度为
code