思路讲解
1 | ll t=binpow(2,tmp,mod),tt=binpow(2,mod-2,mod),tttt=binpow(4,mod-2,mod); |
AC代码
https://ac.nowcoder.com/acm/contest/view-submission?submissionId=78289781
1 | // Problem: Another Day of Sun |
1 | ll t=binpow(2,tmp,mod),tt=binpow(2,mod-2,mod),tttt=binpow(4,mod-2,mod); |
https://ac.nowcoder.com/acm/contest/view-submission?submissionId=78289781
1 | // Problem: Another Day of Sun |
1 | // 随着钱数的增加,进行的二操作总是在增加的 |
https://www.codechef.com/viewsolution/1173480410
1 | // Problem: Game (Hard) |
可以看提交链接
https://www.codechef.com/viewsolution/1173432221
1 | // Problem: String Deletions |
给定 r 和 s,任何长度至少为(r − 1)(s − 1) + 1 的互异实数序列都包含长度为 r 的单调递增子序列或长度为 s 的单调递减子序列。
L=(r−1)∗(s−1)+1=2∗2+1=5
我们来分解一下这个定义:
子序列 (Subsequence):从原序列中,按照原来的顺序,拿掉零个或多个元素后,剩下的元素组成的序列。例如,在序列 {3, 1, 4, 5, 2} 中,{1, 4, 2} 就是一个子序列。
单调递增 (Monotonically Increasing):序列中的每个数都比它前面的数要大。例如 {2, 5, 8, 10}。
单调递减 (Monotonically Decreasing):序列中的每个数都比它前面的数要小。例如 {9, 6, 3, 1}。
所以,这个定理告诉你,只要你的序列足够长,你就一定能从中找到一个特定长度的、要么是持续上升、要么是持续下降的子序列。
https://ac.nowcoder.com/acm/contest/view-submission?submissionId=78240193
1 | // Problem: 无聊的子序列 |
那么,我们发现这道题目的难点在于怎么让这个不平衡度单调下降的同时,让这个切割代价最小。
那么,我个人认为,这个不平衡度的单调下降不难,因为这个是只和前一个状态有关系,转移的时候校验一下就行。
现在的难点就是在于这个状态定义。
然后我看了一下,其实我想的没什么太大问题,就是把这个第几次砍给干掉就行。状态定义就是 dp[l][r]。
不难发现,其会形成类似于区间树的样子。
然后难点就来到了状态转移。
如果不用考虑不平衡度的单调下降,那么这个状态转移就简单了,就是 P1880 [NOI1995] 石子合并 。但是显然没有说那么简单。
1 | // 如果我们解决不了到底谁更优,是较大的imbalance,还是较小的代价 |
1 |