中大校赛2021题解
E 跟 H 还没切所以没写。。。
《关于整个队伍不想写题一起去打球这件事》
A
纯签到。
B
也是纯签到,难以理解为什么一血要11min?
不要什么都想着数据结构,可以直接用点亮的行数列数来算,对角线处理一下就行了。
C
签到。
推推式子就行了~~~实在懒也可以高斯消元。
D
纯签到。
E
给出一个数列 \(\left\{a_n\right\}\) ,每次可以选出其中一对相邻的数,将它们删去并插入它们差的绝对值。求最小的剩余的数。
数据范围只有 \(n \le 8\) , \(T \le 10^3\),暴力即可。
F
是 E 的加强,数列变成 \(1\) 到 \(n\) 的排列,同时要求求出删数顺序, \(n \le 10^5\) , \(T \le 10^3\) 。
打表发现,答案只有 \(0\) 或 \(1\) ,
考虑给每个数一开始就确定符号,从大到小每 \(4\) 个数一组 $+,-,-,+ $, 此时每组的和必定是 \(0\) ,然后发现最小几个不完整也是满足的。
每次取相邻两个异号的操作即可。因为我们的和是 \(0\) 或 \(1\) ,所以必能找到两个这样的数,并且最后一定只剩一个数。
这个做法大概是由最后的结果来推符号确定,取差绝对值不影响最后的符号。
I
嗯。。。不是我做出来的。。。
还是队友强想到了构造。
考虑下界实际上更为重要吧(
我们要 \(A \times D = B \times C\) ,又要它们和它们的差尽量小。
那么这就可以用几个相邻的数积的形式表示的吧!
令 \(m\) 为下界,即 \(\lceil n-3 \sqrt n \rceil\) ,
我们找到一个最小的 \(u\) 使得 \(u \times (u+1) \ge m\) ,再找到一个最小的 \(v\) 使得 \((u+1) \times v \ge m\) ,
那么 \(AD=BD=v(v+1)(u+1)(u+2)\) 的构造是可以满足条件的。
J
神仙队友做神必题
为什么会有这种题啊啊啊啊啊啊啊
先是考虑平方的限制要满足,在序列中每隔一段距离放一个 \(k\) ,一共 \(fk\) 个,以满足条件,\(k\) 和 \(fk\) 是我们自取的值。
两个 \(k\) 之间就分治,在区间中央放一个区间大小的值即可。
人肉二分?差不多。
如果立方和太大就减小 \(k\) ,增大 \(fk\) ;如果和太大就增大 \(k\) ,减小 \(fk\) 。
最终试出来是 \(k=9980\) , \(fk=100\) 时可行。
K
发现值域只有 \(\left[1,16\right]\) ,复杂度应该跟值域有关。
然后我们发现最终的序列是升序的,所以如果不走降序就只会有值域步。
因为操作一定是从后往前的,我们考虑从 \(R\) 走到 \(L\) ,设 \(f_{i,j}\) 表示在 \(i\) 这个点要得到 \(j\) 最近能跳到哪里。
从 \(i-1\) 或 \(f_{i,j-1}-1\) 转移过来。
然后由于可能有两个 \(16\) 合成 \(17\) ,所以值域要开到 \(17\) (反正我是尽量开大,实际上不会有两个 \(17\) 合并所以已经足够)。
G/H
来来来口胡一下再写
G 是很显然直接每次取中位数分到另外两个栈,递归做。
H 主要是限制了换栈的次数不超过 \(20\) 次,那么我们尝试优化 G 的做法。
我们发现有许多次拆分是只拆了栈的一部分的,这时就会浪费换栈次数。
那么我们每次都把一个栈拆空即可。
update:
好吧好吧我的问题,H 题做法假了,最后出现的是乱序。
但是我们这样做了之后栈的样子其实是相当于由我们(划分方式)决定的了,那我们根据得出的乱序和期望的顺序写出映射,然后把划分方式改一改可过。