E 跟 H 还没切所以没写。。。
《关于整个队伍不想写题一起去打球这件事》
A
纯签到。
B
也是纯签到,难以理解为什么一血要11min?
不要什么都想着数据结构,可以直接用点亮的行数列数来算,对角线处理一下就行了。
C
签到。
推推式子就行了~~~实在懒也可以高斯消元。
D
纯签到。
E
给出一个数列 (left{a_n ight}) ,每次可以选出其中一对相邻的数,将它们删去并插入它们差的绝对值。求最小的剩余的数。
数据范围只有 (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 imes D = B imes C) ,又要它们和它们的差尽量小。
那么这就可以用几个相邻的数积的形式表示的吧!
令 (m) 为下界,即 (lceil n-3 sqrt n ceil) ,
我们找到一个最小的 (u) 使得 (u imes (u+1) ge m) ,再找到一个最小的 (v) 使得 ((u+1) imes 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 ight]) ,复杂度应该跟值域有关。
然后我们发现最终的序列是升序的,所以如果不走降序就只会有值域步。
因为操作一定是从后往前的,我们考虑从 (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 题做法假了,最后出现的是乱序。
但是我们这样做了之后栈的样子其实是相当于由我们(划分方式)决定的了,那我们根据得出的乱序和期望的顺序写出映射,然后把划分方式改一改可过。