[算进] 蚯蚓 题解

Problem

洛谷P2827 题目地址

Solution

直接用优先队列模拟可以得到不少的分数,时间复杂度 \(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\)。下面通过推式子来证明。

  • 证明 \(l_1>=l_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\)

\[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\]

推到这里不会了这么办?(因为取整的事,怎么提出来啊)我们假设可以将取整符号内的东西拆开来 ()

猜你喜欢

转载自www.cnblogs.com/BaseAI/p/12089601.html