直接用优先队列模拟可以得到不少的分数,时间复杂度 \(O(m \log m),m<=7*10^6\) ,但是并不能通过此题,我们要考虑挖掘一些性质优化时间复杂度。
假设现在有两条蚯蚓,长度分别记为 \(x_1,x_2\),且满足 \(x_1>=x_2\)。
令 \(l_1\) 表示 \(x1\) 切掉后 \(\lfloor px_1 \rfloor\) 这部分(left左边),\(r_1\) 表示切掉后 \(x_1 - \lfloor px_1 \rfloor\) 这部分(right右边),\(l_2,r_2\) 同理。
当然随着时间的推移,\(l_1,r_1\) 也要加上 \(q\)。根据题目意思,如果我们先切 \(x_1\),\(x_2\) 也会加上 \(q\),此时 \(l_2,r_2\) 会有所变化。
准确的说,假设 \(x_1,x_2\) 恰好是根据题意依次要切的两条蚯蚓的长度,那么:
\(l_1=\lfloor px_1 \rfloor + q,r_1=x_1 - \lfloor px_1 \rfloor + q,\)
\(l_2=\lfloor p(x_2+q) \rfloor,r_2=x_2+q-\lfloor p(x_2+q) \rfloor.\)
那么我们猜想 \(l_1>=l_2\),\(r_1>=r_2\)。下面通过推式子来证明。
\[\because l_1=\lfloor px_1 \rfloor + q=\lfloor px_1+q \rfloor,\]
\[l_2=\lfloor p(x_2+q) \rfloor = \lfloor px_2 + pq \rfloor,\]
\[x_1>=x_2,0<p<1,\]
\[\therefore px_2<=px_1,pq<q \]
\[\therefore l_1>l_2\]
(我们还多推导出 \(l_1 ≠ l_2\),qwq)
\[r_1>=r_2 \leftrightarrow r_1-r_2>=0\]
\[r_1-r_2=x_1-\lfloor px_1 \rfloor + q - (x_2+q-\lfloor p(x_2+q) \rfloor)\]
\[=x_1-\lfloor px_1 \rfloor - x_2 + \lfloor p(x_2+q) \rfloor + q - q\]
\[=\lfloor x_1-px_1 \rfloor + \lfloor px_2+pq-x_2 \rfloor\]
\[=\lfloor (1-p)x_1 \rfloor + \lfloor (p-1)x_2 + pq \rfloor\]
推到这里不会了这么办?(因为取整的事,怎么提出来啊)我们假设可以将取整符号内的东西拆开来 ()
原文:https://www.cnblogs.com/BaseAI/p/12089601.html