构造题真的是能靠做题练出来的吗,看样子只能见一题学一题了
构造题基本都是将题目里的复杂操作都转化成一些基本的,不变的,简洁的操作,以便代码可以处理每种情况
CF1916D
根本没思路。首先打个表,发现可能可以只用1,6,9,0来构造。一种简单的构造是在平方数后面加两个0,通过打表发现,可以在169中间加0,原因是会成为\(1..6..9..=1..3..^{2}\)。同时我们可以用961进行同样的操作。然后发现刚好有n个数,于是就做完了
CF1912E
根本没思路。首先想转化成不变的,那么想让数反转不变,那么这得是回文数。发现回文数很难操作,于是我们就用个位数去操作。那么如果用个位数操作的话,那么反转这个串后结果也是不变的。于是我们写成\(n=A+0-B\)和\(m=B-0+A\)然而这种情况只适用于n+m为偶的情况。考虑转化。发现只需加一个21,变成\(n=21+A+0-B\)和\(m=B-0+A+12\)然后套用上面做法就可以了。注意代码一定要模块化啊!然后保证了这个情况,那么\(A=(n+m)/2,B=(m-n)/2\)即可。那如何打印一个数呢,我们使用九进制就可以了。但发现样例都没过,哈哈。因为在过程中我们使用到了B和-B但是这并没有括号,哈哈。那我们如何将数翻转过来呢,答案是每个数后面都减0就可以了,翻转过来就是相反数,到这里就昨晚了吧。
CF739A
首先答案的上界就是最短的区间的长度。考虑构造方案去达到这个上界。发现只要填0...ans-1,0,...,ans-1,..即可
CF1495C
唯一在课上想出来的题目qwq,这有*2300吗。我们希望通过一些操作将所有点都串成一棵树。一个比较naive的想法就是搞一个m型的主干,发现如果主干空隙为1的话会有环,考虑空隙为2,那么中间都可以串起来。考虑如何将枝干串起来。如果中间空隙为空,那么随便连,否则选择一个X连上就行,因为保证了不八连通
P7115
感觉70分很简单。首先考虑如何交换两个球,那么需要我们可以首先将两个数拎到顶部,再进行交换,这样是不会破坏原有的序列的。然后如果暴力的话最多是\(2n^{2}m\)为了拿到70分或更高分,我们要一点点贪心。我们找出当前颜色相同最多的柱子,然后将这些柱子上不同颜色的换掉,就可以拿70分了。考虑优化,我们发现这题有点像排序,那么我们可以直接归并,然后在交换的时候定义一个输出函数输出就可以了。