摘要: 给出两个长度为n的序列。这两个序列的数字可以连边当且仅当它们不同,权值为它们的绝对值,求出这个二分图的最小权值完全匹配。没有输出-1. n<=1e5.用KM会TLE+MLE. 如果连边没有限制的话,将两个序列排序一下显然就得到最优解了。 考虑限制。则需要将排序后一些项交换。可以证明最优解最多交换距离 阅读全文
posted @ 2017-04-25 20:56 free-loop 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 用堆模拟题目中的操作即可。 # include <cstdio> # include <cstring> # include <cstdlib> # include <iostream> # include <vector> # include <queue> # include <stack> # 阅读全文
posted @ 2017-04-25 20:10 free-loop 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 把一对石子堆看出一个子游戏。打出子游戏的sg表找规律。。 这个规律我是一定找不出来的。。。 对于i,j,如果 (i-1)%pow(2,k+1) < pow(2,k) (j-1)%pow(2,k+1) < pow(2,k) 那么最小的k值就是sg值。 # include <cstdio> # incl 阅读全文
posted @ 2017-04-25 18:38 free-loop 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 很有意思的一道题啊。 求两个序列的最大公共子序列。保证每个序列中含有1-n各5个。 如果直接LCS显然是TLE的。该题与普通的LCS不同的是每个序列中含有1-n各5个。 考虑LCS的经典DP方程。dp[i][j]=dp[i-1][j-1]+1.(a[i]==b[j])。 dp[i][j]=max(d 阅读全文
posted @ 2017-04-25 16:23 free-loop 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 求能被理解的最长前缀。 很显然的dp。令dp[i]=true,表示前缀i能理解。否则不能理解。那么dp[i+len]=dp[i]=true,当s[len]能匹配str[i,i+len]. 由于模式串长度为10.且匹配过程可以用字典树加速。 所以复杂度就是O(10*m*len). # include 阅读全文
posted @ 2017-04-25 15:21 free-loop 阅读(186) 评论(0) 推荐(0) 编辑