究极下饭,赛时做出 AB,B 死活想不出来一个多小时才 AC
A
直接给横着的分一半,竖着的分一半,然后 xjb 填就行了
B
考虑先问出这个数的最高位。
当满足 (x<a) 时,若 (2x \% a>x \% a),那么有 (2x < a),否则 (2x>a)。
然后确定最高位以后逐位确定即可,具体地,每次问 (ans-1) 和 (ans+2^i-1)。
C
有关图的构造,一般要想到生成树;有关两个条件满足其一的,一般是在最坏情况下发现一些性质。
考虑一颗生成树,如果深度 (geq frac{n}{k}),那么直接输出,否则通过抽屉原理,可以保证叶子个数 (>k)。
然后可以对于每个叶子都能找到一个不同的环。
因为是生成树,所以叶子多余的两个边一定是返祖的,并且这两个边可以保证至少有一个满足要求的环。
同时因为深度 (leq frac{n}{k}) ,所以总长度是 (leq n) 的。
想到生成树的话思路还是很顺的。
D
逐步缩小数据范围的思想还是很震撼的。
质因子个数 (m leq 12)
考虑把每个数只留下公因数的因子,然后把数相同的只留下代价最便宜的 (m) 个,不同的数个数 (N leq 12000)。
直接暴力复杂度 (O(N3^mm^2)),无法通过。
然后继续优化,考虑在枚举补集进行转移的时候,可能作为这个集合转移的也只有最便宜的 (m) 个,处理出这 (m) 个复杂度为 (2^mN)。
最后转移的时候对于每个数只更新这个数被选中的转移,这样每种状态枚举子集的次数只有 (m) 次,复杂度 (O(3^mm^2))。