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

难题。 没想出来。题解也没出来。 坑之后再填

我的代码

https://atcoder.jp/contests/ddcc2020-qual/submissions/me?f.Task=&f.Language=&f.Status=AC&f.User=shleodai

posted @ 2019-11-24 00:06  懿路智行  阅读(234)  评论(0编辑  收藏  举报