2017年10月18日
摘要: Problem 一个n m块砖的建筑,一共k天,每天风从两边吹,吹掉砖的概率为p,反之为1 p,求最终建筑没有倒塌的可能性(上层与下层有交集且每一层都有砖) Solution 首先,我们可以预处理出pl[]和pr[]数组,表示k天后左右两边风吹到的位置的可能性 然后我们可以枚举层数,当前这一层的左右 阅读全文
posted @ 2017-10-18 10:51 WizardCowboy 阅读(177) 评论(0) 推荐(0) 编辑
  2017年10月17日
摘要: Problem n个老鼠,m个洞,告诉你他们的一维坐标和m个洞的容量限制,问最小总距离。 Solution 用dp[i][j]表示前i个洞,进了前j个老鼠的最小代价 dp[i][j]=min(dp[i 1][k]+Sum[j] Sum[k])(其中Sum[x]表示前x个老鼠到当前第i个洞的距离总和) 阅读全文
posted @ 2017-10-17 15:27 WizardCowboy 阅读(147) 评论(0) 推荐(0) 编辑
摘要: Problem 有一条长为l的公路(可看为数轴),n盏路灯,每盏路灯有照射区间且互不重叠。 有个人要走过这条公路,他只敢在路灯照射的地方唱歌,固定走p唱完一首歌,歌曲必须连续唱否则就要至少走t才能继续唱。 问最多能唱多少首歌 Solution 贪心:对于一段照射区间要么不唱歌要么能唱多久唱多久 提早 阅读全文
posted @ 2017-10-17 15:15 WizardCowboy 阅读(87) 评论(0) 推荐(0) 编辑
摘要: Problem 给定一个长度为n的数字串,从中选取k个不重叠的子串(可以少选),将每个串求和si 求max|s1 s2| + |s2 s3| + ... + |sk 1 sk|(n include include include include using namespace std; define 阅读全文
posted @ 2017-10-17 14:38 WizardCowboy 阅读(108) 评论(0) 推荐(0) 编辑
摘要: Problem 题目给出一个加密前的字符串长度为p和加密后的字符串长度为s,让你求一个长度为K字典序最小的密钥。 密钥是循环的,第i位为1表示加密前的第i为是有用的否则是没用的。 Solution 首先枚举秘钥中一共有x个1(1 include include include include inc 阅读全文
posted @ 2017-10-17 14:03 WizardCowboy 阅读(153) 评论(0) 推荐(0) 编辑
  2017年10月10日
摘要: Problem 问你一个数的前驱和后继 Solution Treap模板题 Notice 注意输出那个人的编号 Code C++ include include include include include include using namespace std; define sqz main 阅读全文
posted @ 2017-10-10 00:40 WizardCowboy 阅读(131) 评论(0) 推荐(0) 编辑
摘要: Problem 给你一张图,点的权值,边和几个操作: D x: 删除第x条边 Q x y: 询问包含x的联通块中权值第y大的权值 C x y: 将x这个点的权值改为y Solution 一看就要离线处理,把所有操作都倒过来 然后删除操作变为加边操作 Notice 记得: 是改完以后再把点一个一个加入 阅读全文
posted @ 2017-10-10 00:37 WizardCowboy 阅读(136) 评论(0) 推荐(0) 编辑
摘要: Problem 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相同的数,因输出最小的排名) 4. 查询排名为x的数 5. 求x的前驱(前驱定义为小于x,且最大的数) 6. 阅读全文
posted @ 2017-10-10 00:13 WizardCowboy 阅读(142) 评论(0) 推荐(0) 编辑
摘要: Problem 给你n个数A1~An,每次将i插入第Ai位后,最后输出每次插入后这个数列的最长上升子序列 Solution 这道题非常的妙。首先如果新加入的这个数构成了最长上升子序列,由于在它插入之前都是比它小的数,所以就是最后这个序列这个位置的最长上升子序列。 如果不是最长的,只需要和前面那个数插 阅读全文
posted @ 2017-10-10 00:04 WizardCowboy 阅读(162) 评论(0) 推荐(0) 编辑
  2017年10月9日
摘要: Problem 刚开始,每个数一个块。 有两个操作:0 x y 合并x,y所在的块 1 x 查询第x大的块 Solution 用并查集合并时,把原来的大小删去,加上两个块的大小和。 Notice 非旋转Treap一直错。。。 Code 旋转Treap(非旋转Treap总是TLE...) C++ in 阅读全文
posted @ 2017-10-09 23:49 WizardCowboy 阅读(161) 评论(0) 推荐(0) 编辑