Atcoder DISCO 2020 qual 解题报告 [待填坑]
Atcoder DISCO 2020 qual 解题报告 [待填坑]
A, B
太水了, 掠过。
C
题意
在一个\(H*W\)的矩形内, 有\(K\)个关键点,要把整个大矩形分成\(K\)个子矩形,每个子矩形中有恰好一个关键点,并且这\(K\)个子矩形要 恰好 覆盖整个矩形。 输出一种可能方案。
题解
对于有关键点的每一行(假设这一行有\(x\)个关键点), 那么显而易见这一行被切成了\(x+1\)段。 把最后一段分给最后一个关键点。
而对于每一列,同理也会被有关键点的那些行分成\(x\)段,处理方案也与上述方案同理。
这道题还是比较简单, 花了25分钟想+写。 比较慢。
D
题意
对于一个数(\(10^{15}\)位左右,输入经过压缩), 可以对其进行下列操作:
将原数两位相邻数位取出,加起来之后放到原来位置中。
例子: 2315 取出"3, 1"->245; 4778取出"7, 8"->4715; 7562取出"7, 5"->1262.
问最少操作多少次可以把原数变成只有一位。
题解
这道题的最少非常误导人。
手动模拟几个数后(我花了10分钟...TAT)可以发现不管怎样操作, 把原数变成只有一位的操作次数都是一样的。。。(手动大哭)
证明如下:
令sod
为一个数所有位之和, digits
为一个数的位数。
可以发现对一个数,不管取哪两个数位进行操作(设其为d1, d2
,都只可能是下列两种情况之一:
if(d1+d2 > 9) sod -= 9;
else digits--;
所以操作次数永远等于 (sod-1)/9 + digits - 1
.
6分钟写完。
突出了”守恒思想“的重要性。
E
惨惨。。。考试差一点就做出来了。。。😭😭😭😭😭
题意(经过重述)
有一个长度为\(2*N\)的数列(\(N\)为奇数),\(a_n\in \{-1, 1\}\), 其中正好n个1, n个-1.
每次可以挑n个数\(a_{s_1}, a_{s_2}, \cdots a_{s_n}(s_n\in[1, 2*N])\) 询问 \(\sum_i a_{s_i}\) 大于0还是小于0, 大于0返回1, 小于0返回-1.
\(N \leq 99\) , 询问次数不可超过\(210\)次。
题解
读题要仔细。。。花了15~20分钟才陆续读清楚题意。。。。还问了考试官方(丢脸.jpg
首先容易发现一个性质:
若是挑出n个数\(s_1\), 询问结果为\(q_1\), 再挑出n个数\(s_1\), 询问结果为\(q_2\)。
若\(s_1\)和\(s_2\)只有一个数不同,且\(q_1\neq q_2\), 那么\(\displaystyle\sum _{i\in {s_1\cap s_2} }a_i = 0\)
我们通过这个性质来做这道题。
显然挑出[1,n] 询问和挑出[n+1, 2n]询问结果肯定不同。
设询问区间[l, l+n-1]
的结果是res(l)
那么必然存在\(x\in[1, n)\) , 使得 res(x) != res(x+1)
考试时我的做法需要询问\(n\) 次。但是正解只询问\(\log n\)次。
因为这个x
可以二分。
Q: 看上去明明不能二分的?
A: 因为是要找一个任意的\(x\), 所以
res(x)
无需满足单调性。
二分mid. 若是res(mid) == res(1)
, 那么在区间[mid, r)
中必然有满足要求的x
。这就够了。
挺有意思的一道题。充分利用了介值定理的思想。
而且这个\(210\)次询问次数用心险恶啊。。。。让我以为是2*n
次询问,没想到是\(2*n+\log n\)次询问。。。
F
难题。 没想出来。题解也没出来。 坑之后再填