10 2017 档案
[CodeChef-CAPTCITI]Snakes capturing the Mongoose Cities
摘要:Problem 每个点都可以选择降落士兵,然后当一个点的子节点被攻占的数量超过读入中的限制后,这个城市也被占领。 每个点降落士兵都有一定的代价,问把这一个图全部攻占的最小代价。 Solution 这显然和儿子有关还与父亲有关 我们假设f[x]表示x在父亲之前被攻占,g[x]表示x再父亲之后被攻占 显 阅读全文
posted @ 2017-10-30 20:42 WizardCowboy 阅读(113) 评论(0) 推荐(0)
[BZOJ2427]软件安装
摘要:Problem 每个软件都要安装某些软件才能安装,而且都有体积和价值,求安装的价值最大值 Solution 对于每个环,我们可以知道必须全部一起取或者不取,因此我们先用Tarjan缩点 然后我们用一个树形DP就可以解决了 Notice 注意这颗树是如果一个节点没取,后面就都不能取了 Code 阅读全文
posted @ 2017-10-30 20:17 WizardCowboy 阅读(157) 评论(0) 推荐(0)
[Codeforces771E]Bear and Rectangle Strips
摘要:Problem 给你一个2 n的矩阵,要求你用补充叠的矩阵去框,要求每个矩阵框中的数之和为0,问最多可以用几个矩阵。 Solution 首先预处理出一个点到离它最近的一段和为0的区间的左端点 然后到这往前用记忆化搜索的方式DP就可以了 Notice 注意要记忆化 Code 阅读全文
posted @ 2017-10-30 20:02 WizardCowboy 阅读(257) 评论(0) 推荐(0)
[HDU6146]Pokémon GO
摘要:Problem 有一个2 n的方格矩阵 在一个格子上可以往旁边8个方向走(如果有格子),求有多少方案把2 n走完 Solution 我们用Fi表示从一个角出发走遍所有格子回到这一列另外一点的方案数 显然,F1 = 1,Fn = 2 Fn 1 = 2^(n 1) 我们再用Gi表示从一个角出发,走遍所有 阅读全文
posted @ 2017-10-30 16:10 WizardCowboy 阅读(119) 评论(0) 推荐(0)
[ZH模拟赛20171029T2]Cruise
摘要:Problem 给你n个点的坐标和权值,然后一个点最多可以经过1次,最后要回到原点,求这条路径中包含的点的权值和除以路径长度的最大值。 Solution 我们可以很明显的得知,这条路径是个凸包(否则不但包含的点少了,路径也长了) 我们可以二分答案,然后用一个dp来验证答案: 所以我们用f[i]表示枚 阅读全文
posted @ 2017-10-30 13:41 WizardCowboy 阅读(114) 评论(0) 推荐(0)
[ZH模拟赛20171029T1]Cards
摘要:Problem 每张牌有两个数字,你可以选择使用哪个数字,然后你还可以任意排序,求一个加一个减后的最小值。 Solution 显然,我们可以先全部加上,然后再选择n/2个改为减去。 因此我们对每张牌取最小值先加上,然后把两个数字的和放入数组中进行排序,最后减去大的那n/2个就好了。 Notice 没 阅读全文
posted @ 2017-10-30 12:57 WizardCowboy 阅读(80) 评论(0) 推荐(0)
[BZOJ1406]密码箱
摘要:Problem 给你1个数n,求出0 ≤ x include include include include include using namespace std; define sqz main define ll long long define reg register int define 阅读全文
posted @ 2017-10-26 16:14 WizardCowboy 阅读(128) 评论(0) 推荐(0)
[BZOJ1045]糖果传递
摘要:Problem 有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。 求使每个人糖果数相同的最小代价。 Solution 我们假设第i为同学给了第i+1为同学Xi个糖果(n的后一位为1) 所以ans = X1 + X2 + X3 + ······ + X 阅读全文
posted @ 2017-10-26 16:08 WizardCowboy 阅读(171) 评论(0) 推荐(0)
[Codeforces613E]Puzzle Lover
摘要:Problem 给你2 n的格子,每个格子有一个字母,从任意一点出发,不重复的经过上下左右,生成要求的字符串。问有几种不同的走法。 Solution 分三段,左U型、中间、右U型。 分别枚举左边和右边的长度,中间一段用Dp来解决。 Dp[i][j][k],i,j,k表示当前在(i,j)位置,枚举到第 阅读全文
posted @ 2017-10-26 10:29 WizardCowboy 阅读(205) 评论(0) 推荐(0)
[Codeforces778E]Selling Numbers
摘要:Problem 给一个由问号和数字组成的数字串A(问号表示任一数字)。 再给定n个数字Bi,和0~9的数字的价值。 F(x)表示x各个位数上的价值和。问A为何值时,sum(F(Bi+A))的值最大为多少。 1 ≤ A,Bi include include include include using 阅读全文
posted @ 2017-10-26 07:56 WizardCowboy 阅读(128) 评论(0) 推荐(0)
[Codeforces477D]Dreamoon and Binary
摘要:Problem 给定一个字符串数的二进制表示(不含前导0)s(长度不超过5000), 对于一个数n(初值为0),可以进行以下两种操作: 1.将n的二进制表示(无前导0)写到已经写的串的后面. 2.n加上1. 问组成s的不同方法数以及最少用多少次操作能组成串s. Solution 对于第一问: 用f[ 阅读全文
posted @ 2017-10-19 20:56 WizardCowboy 阅读(248) 评论(0) 推荐(0)
[Codeforces440D]Berland Federalization
摘要:Problem 给你一棵树,最少删掉哪些边,能使得余下的至少有1个大小刚好为k的残树。 1 ≤ k ≤ n ≤ 400 Solution 用f[i][j]表示以i为根有j个节点的最少删边数量 因为此题要输出删除的边 v[i][j]表示以i为根删掉j个节点需要删去的边对应的(点u,该u点还需要删去的边 阅读全文
posted @ 2017-10-18 23:35 WizardCowboy 阅读(206) 评论(0) 推荐(0)
[Codeforces441E]Valera and Number
摘要:Problem 给定一个数x,有p%的概率乘2,有1 p%的概率加1,问操作k次,其二进制数下末尾零的个数的期望。 Solution 每次操作只会影响到最后的8位 我们用dp[i][j]表示i个操作后,后面的操作还需要加j 对于+1的操作:dp[i][j 1]+=dp[i 1][j] (1 p) 对 阅读全文
posted @ 2017-10-18 20:46 WizardCowboy 阅读(161) 评论(0) 推荐(0)
[Codeforces708E]Student's Camp
摘要:Problem 一个n m块砖的建筑,一共k天,每天风从两边吹,吹掉砖的概率为p,反之为1 p,求最终建筑没有倒塌的可能性(上层与下层有交集且每一层都有砖) Solution 首先,我们可以预处理出pl[]和pr[]数组,表示k天后左右两边风吹到的位置的可能性 然后我们可以枚举层数,当前这一层的左右 阅读全文
posted @ 2017-10-18 10:51 WizardCowboy 阅读(183) 评论(0) 推荐(0)
[Codeforces797F]Mice and Holes
摘要: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 阅读(155) 评论(0) 推荐(0)
[Codeforces721E]Road to Home
摘要:Problem 有一条长为l的公路(可看为数轴),n盏路灯,每盏路灯有照射区间且互不重叠。 有个人要走过这条公路,他只敢在路灯照射的地方唱歌,固定走p唱完一首歌,歌曲必须连续唱否则就要至少走t才能继续唱。 问最多能唱多少首歌 Solution 贪心:对于一段照射区间要么不唱歌要么能唱多久唱多久 提早 阅读全文
posted @ 2017-10-17 15:15 WizardCowboy 阅读(92) 评论(0) 推荐(0)
[Codeforces513E2]Subarray Cuts
摘要: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 阅读(115) 评论(0) 推荐(0)
[CodeForces332E]Binary Key
摘要:Problem 题目给出一个加密前的字符串长度为p和加密后的字符串长度为s,让你求一个长度为K字典序最小的密钥。 密钥是循环的,第i位为1表示加密前的第i为是有用的否则是没用的。 Solution 首先枚举秘钥中一共有x个1(1 include include include include inc 阅读全文
posted @ 2017-10-17 14:03 WizardCowboy 阅读(169) 评论(0) 推荐(0)
[HDU4585]Shaolin
摘要: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 阅读(141) 评论(0) 推荐(0)
[HDU3726]Graph and Queries
摘要:Problem 给你一张图,点的权值,边和几个操作: D x: 删除第x条边 Q x y: 询问包含x的联通块中权值第y大的权值 C x y: 将x这个点的权值改为y Solution 一看就要离线处理,把所有操作都倒过来 然后删除操作变为加边操作 Notice 记得: 是改完以后再把点一个一个加入 阅读全文
posted @ 2017-10-10 00:37 WizardCowboy 阅读(144) 评论(0) 推荐(0)
[BZOJ3224]普通平衡树
摘要:Problem 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相同的数,因输出最小的排名) 4. 查询排名为x的数 5. 求x的前驱(前驱定义为小于x,且最大的数) 6. 阅读全文
posted @ 2017-10-10 00:13 WizardCowboy 阅读(150) 评论(0) 推荐(0)
[BZOJ3173]最长上升子序列
摘要:Problem 给你n个数A1~An,每次将i插入第Ai位后,最后输出每次插入后这个数列的最长上升子序列 Solution 这道题非常的妙。首先如果新加入的这个数构成了最长上升子序列,由于在它插入之前都是比它小的数,所以就是最后这个序列这个位置的最长上升子序列。 如果不是最长的,只需要和前面那个数插 阅读全文
posted @ 2017-10-10 00:04 WizardCowboy 阅读(178) 评论(0) 推荐(0)
[POJ2985]The k-th Largest Group
摘要: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 阅读(171) 评论(0) 推荐(0)
[POJ2761]Feed the dogs
摘要:Problem 查询区间第k大,但保证区间不互相包含(可以相交) Solution 只需要对每个区间左端点进行排序,那它们的右端点必定单调递增,不然会出现区间包含的情况。 所以我们暴力对下一个区间加上这个区间没有的点,删去下个区间没有的点。 因为每个点最多被加入,删除1次,所以时间复杂度为O(nlo 阅读全文
posted @ 2017-10-09 23:41 WizardCowboy 阅读(159) 评论(0) 推荐(0)
[POJ1442]Black Box
摘要:Problem 有添加操作和询问操作,每次询问输出第i大的数。 Solution Treap标准模板题 Notice 非旋转的真心难打。 Code 非旋转Treap C++ include include include include include using namespace std; de 阅读全文
posted @ 2017-10-09 23:29 WizardCowboy 阅读(126) 评论(0) 推荐(0)
[HDU3487]Play with Chain
摘要:Problem 有n个数,为1~n。有两种操作: Cut x y z: 把x到y的区间切割下来后,放到改变后的序列的z位后 Flip x y: 把x到y的区间翻转 Solution splay模板题 Notice 注意0 Code C++ include include include includ 阅读全文
posted @ 2017-10-06 13:09 WizardCowboy 阅读(186) 评论(0) 推荐(0)
[HDU3436]Queue-jumpers
摘要:Problem 有一个数列,从1排列到n,然后有Q个操作 1. Top x:将第x个数放到序列的最前面 2. Query x:询问x这个数在第几位 3. Rank x:询问第x位数是什么 Solution n非常的大,需要离散化:读入的Query操作和Top操作需要离散化 然后每当处理一个数时,用二 阅读全文
posted @ 2017-10-06 12:54 WizardCowboy 阅读(176) 评论(0) 推荐(0)
[HDU2475]Box
摘要:Problem 先告诉你每个盒子在哪个盒子的内部 接下来有M个操作: 可以把一个盒子及里面的盒子移到另外一个盒子的内部 或者询问你某个盒子最外面的盒子是哪个 Solution 首先可以建成一个图,然后先dfs一遍,用dfs序加入多棵splay 然后移动操作就是区间切割,询问操作就是这棵splay中最 阅读全文
posted @ 2017-10-06 12:44 WizardCowboy 阅读(176) 评论(0) 推荐(0)
[HDU1890]RoboticSort
摘要:Problem 每次找到最小值,然后把它和它前面的数翻转,然后找第二小数······ 然后输出这些数的下标。 Solution 用splay维护,每次找到最小值,然后翻转前面区间。 Notice 细节操作巨烦无比。 Code C++ include include include include i 阅读全文
posted @ 2017-10-05 12:44 WizardCowboy 阅读(145) 评论(2) 推荐(0)
[BZOJ1500]维修数列
摘要:Problem Solution Splay模板题 要记录从左往右的最大和,从右往左的最大和,整个区间内的最大和 Notice 注意0的大坑。 Code 阅读全文
posted @ 2017-10-05 12:32 WizardCowboy 阅读(288) 评论(0) 推荐(0)
[POJ3580]SuperMemo
摘要:Problem ADD x y D: x到y每个数加上D REVERSE x y: 翻转x到y这个区间 REVOLVE x y T: x到y区间往后旋转T位 INSERT x P: 在第x个数后插入P DELETE x: 删除第x个数 MIN x y: 求x到y的区间最小值 Solution spl 阅读全文
posted @ 2017-10-05 12:29 WizardCowboy 阅读(140) 评论(0) 推荐(0)
[POJ3481]Double Queue
摘要:Problem 0 结束操作 1 K P 将一个数K以优先级P加入 2 取出优先级最高的那个数 3 取出优先级最低的那个数 Solution Splay模板题 Notice 是输出数而不是输出优先级。 Code C++ include include include include include 阅读全文
posted @ 2017-10-05 12:24 WizardCowboy 阅读(163) 评论(0) 推荐(0)