嚯嚯嚯!补题!
补题: 4题/12题
- 置换群
- 排列组合
- 计算几何
- 线段树
- LIS
- LDS
B. Beautiful Now
for each permutation of digits, the minimum number of swaps equals to n minus the number of disjoint cycles in the permutation. We can solve the problem by enumerating all the n-permutations. That is, for each permutation, we just check if it can be reached within k swaps (because swapping the same digit is permitted) and then update the answer. Time complexity is expected to be O(n!) while algorithms in time complexity O(n!n) may get TLE verdict (but who knows?). In order to achieve the excepted time complexoty, we may need to maintain some information about chains and cycles effciently during the process of searching and backtracking.
考虑下标的置换,可以发现最少的交换次数等于 n 减去置换中循环的数量,所以可以枚举所有的 n 排列解决此题。 对于每个置换, 只需要检查它是否可以在 k 次交换内实现(因为可以交换相同的位置) 并更新答案。 期望时间复杂度是 O(n!), O(n!n)的算法有可能会超时(也可能不超时)。 为了实现期望 复杂度可能需要在搜索和回溯过程中高效维护链和环的信息。
看不懂题解的我,被空调吹傻的我……
置换群?排列组合?
一直以为是贪心呢!(想知道数据啊,感觉也可行呐!不过给的时间就可以告诉我,不是的,但苍天啊,大地啊!给个反例吧!)
第二天,博博过了!
嗯,大概就是通过把每种置换方法都列出来,然后通过每种置换变换为目标的串所需要的次数,如果小于k,则是可以的;对于可以的,进行值的比较更新结果!
|
|
E. Everything Has Changed
Note that the cutting areas do not intersect and the different areas do not affect each other. Just enumerate every cutting area intersecting the disk and then count the lengths of their circumferences covered by each other.
注意切割区域两两不相交, 则不同切割区域不会相互影响。 枚举每个与圆盘相交的切割区域, 计算互相被包含的圆周长度即可。
画个图就ok!
|
|
G. Glad You Came
If there are two operations covering the same interval, we can just keep the maximum one. For each operation(l,r,v),let d be 」log2(r-l+1)」, replace this operation by two operations (l,l+2^d-1,v) and (r-2^d+1,r,v). After that, the length of the interval that each operations covers is a power of 2, which means the lengths are only O(logn) types. The remaining part is just to enumerate operations in length decreasing order and split each operation into two operations of equal length until the length is one. Time complexity is O(m+nlogn) and space complexity is O(nlogn).
如果有两个操作覆盖相同的间隔,我们可以保持最大值。 对于每个操作(l,r,v),令d为对log2(r-l + 1)向下取整,将该操作替换为两个操作(l,l + 2 ^ d-1,v)和(r-2 ^d+ 1,R,v)。 之后,每个操作所覆盖的间隔的长度是2的幂,这意味着长度仅为O(logn)类型。 剩下的部分只是按长度递减顺序枚举操作,并将每个操作分成两个相等长度的操作,直到长度为1。 时间复杂度为O(m + nlogn),空间复杂度为O(nlogn)。
如果有两个操作覆盖相同的区间, 我们可以保留最大的那个。 对于每个操作(l,r,v), 令 d 等于 对log2(r-l + 1)向下取整, 我们可以用两个操作(l,l + 2 ^ d-1,v)和(r-2 ^d+ 1,R,v)替换此操作。 这样做之后, 每个操作所覆盖的区间长度均为 2 的幂, 这意味着长度仅有 O(logn)种。 剩下的只不过是, 按长度递 减的顺序枚举操作,将每个操作分成两个相等长度的操作,直到区间长度为一。这样做的时间复杂度为O(m + nlogn),空间复杂度为O(nlogn)。
这个,线段树有博博会就够了!emmm……我估计永远都不会线段树了!
H. Hills And Valleys
首先dp应该是很明显的,其次我们应该转换思路,因为这里的n是1e5,肯定会炸;所以我们可以从最长不下降的串入手。这个串如果不重复的话,就有C(2,10),然后我们通过原串和此串进行匹配;同时我们需要注意的是,这里的是不下降,所以我们需要对此串进行一些改造,这样可以保证原串是重复的。
dp方程我们的设计思路是
$dp[i][j]=max(dp[i-1][j]+(a[i]==b[j]),dp[i][j-1])$
这里表示若是两个值相等,则可以是对于前面的数字匹配或者是对相同数字又多了一个匹配
然后,0 1 2 3 x y y-1 …… x+1 x y+1……9
这样翻转过来,还是最长不下降串;
所以,我们需要在b串的构造的时候多加端点的两个值
注意,题中还需记录翻转端点,第一次遇到左端点的值和最后一次遇到右端点的值的时候,需要更新值
然后我研究了半个小时的东西,然后发现自己没脑子的开数组,开成dp[maxn][maxn]
,导致出现了linker command failed with exit code 1 (use -v to see invocation)
,看不懂这个东西,然后,开始瞎注释,问题的是,一个数组开那么大没问题,开两个就有问题了,导致我以为是al
这个不可以使用名字(因为百度说的……
|
|
碎碎念
2018.08.11晚
嗝,吃多了!
记录一下,若是有长度为n的序列,如果LIS的长度为L的话,那么LDS的长度为(n/L)向下取整
因为我是小金鱼呀!
2018.08.12 早
早上不想起床了,留了一集小葡萄
唔,疲劳期,倦怠期,还有好多题目没有补
中午照样在赖床,羡慕各位聚聚和舍长爸爸
充满无限的活力
2018.08.12 晚
没有报名百度之星,好无聊啊
也不能提交,继续补题啊
好想穿上美美的小裙子,梳上丸子头,出门拍上美美的照片啊!
于是拍了一段小短片,感觉像是一个广告,顺便,马卡龙好评!
郁闷,我又胖了,一定是坐太久了!
感觉我已经进入暴躁期了,喜怒无常,无所事事
给博客增加了置顶的功能!
转载请注明出处,谢谢。
愿 我是你的小太阳