构造题!
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 分了。考虑优化,我们发现这题有点像排序,那么我们可以直接归并,然后在交换的时候定义一个输出函数输出就可以了。
首先,我们利用 \(1,2,n,n+1\) 来对 \(1\) 进行操作,对于只剩下两个柱子的情况,直接特判。
我们想将所有这个数都移到顶,然后就随便乱搞。
我们通过一些操作有了一个全 \(0\) 列,那么这列顶不用是 \(1\)
我们现在有一个全 \(0\) 列和一个空列为 \(n\) 和 \(n+1\)
我们将
假如 \(t_{1}\) 为 \(1\) 中 \(1\) 的个数,那么 \(n\) 移到 \(n+1\),\(t_{1}\) 次,然后分离 \(1\) 中的 \(1\) 到 \(n\),\(0\) 到 \(n+1\),那么 \(n+1\) 就变成了全 \(0\),\(1\) 变成了空,这样是 \(O(n^{2}m)\)
P3524
?每次找两个点不联通,那么这两个点必定不在一个团中。所以我们删掉这两个点,我们会至少会删除 \(\frac{n}{3}\) 个不在团中的点,至多删除 \(\frac{n}{3}\) 个在团中的点,那么剩下的那个 \(\frac{n}{3}\) 的团就是答案了!
CF1365G
????
一个简单的想法是利用二进制,我们每个数的编号是一个 \(10\) 位的二进制数,然后我们有 \(2\log n\) 个集合,代表这一位是 \(0/1\) 的数的集合的询问答案。那么我们因为是 \(or\),我们的答案就可以合并,所以我们对于每个编号,我们把不是这一位的全部并上,那么最后的并集自然是这个 \(i\) 的补集了。
但是我们对于每位都要询问 \(0\) 和 \(1\),可不可以去掉这个呢?
考虑对编号重新编码,我们搞出一个 \(13\) 位的二进制数,然后这个二进制数必须有 \(6\) 位,那么我们通过组合数可以知道这个编码是可以编完的。有什么好处呢?我们只要询问每一位是 \(0\) 的集合的并就可以了。对于每一个数,如果它重编号编码这一位是 \(1\),那么就给它的答案并上这一位是 \(0\) 的集合,显然正确!
UOJ751
???????
我们加入边,返回联通的点。我们想知道每条边对应的是哪条边。或者我们不用知道所有边,我们只要知道哪些边存在即可。
我们从叶子入手,我们保证我们询问里每条边都出现 \(\frac{lim}{2}\) 次,那么我们对于那些 \(\frac{lim}{2}\) 次成为孤立点的点就是叶子了。先考虑如何对这个询问编号。我们发现可以给询问编号,还是按照组合数编号。我们编一个 \(lim\) 位的二进制数,然后有 \(\frac{lim}{2}\) 个 \(1\)。按照这个思路下去,我们每次可以询问编号这一位是 \(0\) 的所有集合的联通块。然后我们能保证每条边被 \(\frac{lim}{2}\) 个询问包含了。我们询问的组合可以对应到唯一的一条边,然后我们就可以知道哪个是叶子了。然后我们把包含叶子的询问的边从询问里刨掉,那么我们连通块也都要把叶子删掉,然后我们一层一层删就可以知道每个节点的深度了。但是我们还不知道每个点的父亲是什么。
二阶段。我们分析发现,我们找出来有这些叶子的询问,这个叶子一定向上连了一条边,它的父亲连出去的其它边必然在一个询问中消失,所以我们取并即可。
这个很暴力,我们考虑快速维护这个东西。
然而剥了一个叶子后我们并不能立刻知道其父亲:要对 \(\frac{lim}{2}\) 个大集合取交,这是不好做的。——zak
我们剥掉叶子的复杂度是 \(O(n\log n)\) 啊,就是开个桶,如果一个点是孤立点,那么就桶 \(+1\)。我们剥完叶子怎么做呢?那么我们遍历询问,然后找到这个点属于的 \(vector\),然后删掉,如果变成孤立点了,那么桶 \(+1\),然后连边。然后一层一层下去就做完了。
CODE FESTIVAL 2017 Final F
有一个想法,我们进行二分图匹配,每个点匹配 \(K\) 个集合,那么我们只剩了最后一个限制。但是我们这个是提交答案题!考虑构造一点方便的
考虑两个集合的交,我们必定会给一个数贡献上 \(2\)。如果我们 \(k|n\),那么我们把集合分组,一个组里的集合交都是同一个数,剩下都没有交。我们分 \(K\) 组,然后第 \(i\) 组的交是 \(i\),那么我们就搞好了 \(1\sim k\),然后我们把这些数抛掉,那么剩下的集合没有交,然后大小为 \(k-1\)。然后我们发现一点都做不下去。
因为我们每个集合的交为 \(1\),并且 \(i\) 在所有 \(S_{j}\) 中出现了 \(K\) 次。我们观察 \(\sum\limits_{i=1}^{n}\sum\limits_{i=j+1}^{n} |S_{i}\cap S_{j}|=\frac{n*(n-1)}{2}=\frac{nk(k-1)}{2}\),那么 \(n=k^2-k+1\)
手玩,看看对不对。我们贪心一点放,差不多是这么一个策略

我们首先把 \([1-k]\) 放在第一张纸,这是没关系的,因为任何一种方案都可以经过重排映射到这种方案。然后我们继续放,我们把 \(4,5\) 放在第二张纸,\(6,7\) 放在第 \(3\) 张纸。这也是没关系的,因为我们所有的合法方案一定可以映射到这个情况。
然后我们现在的问题就是 \(n-k\) 张纸和 \(n-k\) 个数,每张纸放 \(k-1\) 个数,每个数在 \(k-1\) 张纸上面出现要求每张纸上面互不相同,然后任意会有 \(k-1\) 组,然后组内没有交,组间交为1。
我们有 \(\frac{n-k}{k-1}\) 组数,每组有 \(k-1\) 个数。我们记第 \(i\) 组的第 \(j\) 个数为 \(a_{i,j}\)

上面的 \(m=k\),因为每组要放 \(k\) 个数,懒
我们发现我们第一组肯定是这么排,因为后面都可以映射到这种情况,然后我们发现 \(a_{2,1}\) 就不能放第一列了,那么 \(a_{2,1}\) 就会从第二列开始放,然后剩下继续。然后我们的 \(a_{3,1}\) 就不能放第一列和第二列, 我们这里就把放的情况看作一个排列,我们的排列不能有一个重复,并且全都要是错排。然后初始有一个\({1\rightarrow n}\)的排列。这个限制怎么这么严?但是我们发现我们上面的构造方法好像是对的。

看看题解,我们按列考虑,假设我们这个是按列的第 \(i\) 组的第 \(j\) 列,那么我们这列的第 \(t\) 个数就填我们最初那个 \(k-1\) 列 \(k-1\) 行的矩阵(虚线框)的第 \(t\) 列的数。然后为了保证不重,我们要错开,也就是说我们第一组第 \(i\) 行取的都是第 \(i+0*j\) 列的数,那么第二组第 \(i\) 行取的都是第 \(i+1*j\) 列的数。那么对于 \((i,j)\) 代表第 \(i\) 组第 \(j\) 列,第 \(t\) 行放的数就是前面虚线框 \(j\) 行第 \(t+i*j\) 列的数。非常难理解!详细说,也就是我们在同一组内,我们每向右移动一列,我们选的数就会向下 \(i\) 行。我们每向下一行,我们的选的数就会向右 \(1\) 列。那么我们考虑 \((i_{1},j_{1})\) 和 \(i_{2},j_{2}\) 哪行是相同的。首先可以列出 \((i_{1},j_{1})\) 上的点的表达式 \([i_{1}][t_{1}][j_{1}]=[(j_{1}+t_{1}*i_{1})\%(k-1)][t_{1}]\) 嗯,差不多这个形式,不影响我们推导。那么这就是让这个二元组相同
发现这个是 exgcd 的形式
分类讨论
- \(i_{1}=i_{2}\) 那么成立当且仅当 \(j_{1}=j_{2}\) 显然不成立
- 否则 \(t=\frac{j_{2}-j_{1}}{i_{1}-i_{2}}\) 注意到 \(i_{1}-i_{2}<k-1\) 且 \(j_{2}-j_{1}<k-1\),为了有逆元且逆元唯一,那么我们的 \(k-1\) 就要是质数
然后就做完了!
QOJ8130
感觉很小清新啊。我们按照 \(dfn\) 排序之后就是一个区间的 \(-1\le sum\le 1\) 然后我们有 \(n\) 个这样的性质。那么我们把这么多询问都离线下来,然后考虑连边?考虑这些询问的限制。我们先从最低的开始不断往上合并,不合法就反转一颗子树但是这样只能处理一颗树。考虑拓展,貌似拓展不了。
但是连边的思路依然值得借鉴。如果一个子树里有两个没有赋颜色的点,那么我们连边代表这两个点颜色不同。然后对两棵树都做一遍。这种方式不成立当且仅当存在奇环。考虑怎么连出奇环,肯定是两个树的环连在一起,那么我们的边一定是属于第一颗树和属于第二棵树交替,那么这样一定是偶环了。然后就做完了

浙公网安备 33010602011771号