中大校赛2021题解

link

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 题做法假了,最后出现的是乱序。

但是我们这样做了之后栈的样子其实是相当于由我们(划分方式)决定的了,那我们根据得出的乱序和期望的顺序写出映射,然后把划分方式改一改可过。

posted @ 2021-10-20 09:33  Kelvin2005  阅读(39)  评论(0编辑  收藏  举报