ACM
sjtsjt709
这个作者很懒,什么都没留下…
展开
-
【Codeforces 801E】 Vulnerable Kerbals 【gcd+dag+最长路】
题意:给出m和n个在[0,m)的数字,要求构造一个最长的序列满足1.序列中的数位[0,m)2.序列的前缀积对m取模后不能重复3.序列的前缀积对m取模后不能与n个数字相同题解:考虑前缀积为x,下一个数取a,x*a%m=y,则gcd(y,m)必然是gcd(x,m)的倍数,那么我们构造出序列后的前缀积取模序列是一个递增序列,且后面数必然是前面数的倍数构造一个以前缀积取模后的值为点的图,把可以取的前缀积积...原创 2017-05-09 19:30:25 · 563 阅读 · 0 评论 -
【Codeforces 743D】 Chloe and pleasant prizes【树形dp】
题意:给你一棵带有点权的树,让你求最大的两个不想交的子树的点权和题解:树形dp,dp[u]记录u的子树中权值最大的子树的sum值(包括它本身)具体的状态转移方程很好理解最主要就是没做过类似题目,可能比较难以想到#include<set>#include<map>#include<cmath>#include<stack>#include<...原创 2016-12-15 01:55:15 · 780 阅读 · 0 评论 -
【Codeforces 731E】 Funny Game【dp】
题意:有一串长度为m数列,两个人轮流从左边开始拿数字,每次可以拿k(2-m)个数字,然后这人会获得相当于这k个数之和的score,然后这k个数变成一个数,也即他们的和在数列的最左边,两个是都想最大化自己和他人的差距,也即是的score(自己的)-score(对面的)最大,然后游戏当只剩下一个数的时候停止题解:这个和之前的一题很像http://blog.csdn.net/sjtsjt709/arti...原创 2016-12-15 22:17:24 · 270 阅读 · 0 评论 -
【HDU 5221】 Occupation 【树链剖分+线段树】
题意: 给你一棵树,每个节点有个点权 有三种操作: 1.把u到v的路径全部标记为1 2.把x标记为0 3.把x的子树标记为1 让你输出每次操作后的标记为1的点权和题解: 点权和可以用线段树(线段树维护树链剖分之后重新分配id之后的权值)维护,操作1用树链剖分对线段树一段一段的更新,操作2直接线段树更新,操作3可以在树链剖分之...原创 2016-12-17 00:47:04 · 337 阅读 · 0 评论 -
【BUAA 610】前前前世【前缀和计数】
题目:给出一棵无穷节点的二叉树,根为1,对于节点i,他的两个子节点为2i和2i+1,求(x,y)满足x是y的父节点的父节点的父节点,并且x%k=1&&y%k=1的对数题解:x%k=1,y=8x+d(0<=d<8) => (8+d)%k=1用cnt[d]表示满足条件的d的个数由上式可知k>=15时,无解用f[k][i][j]表示长度为2^i且起点%k=j的区...原创 2016-12-20 21:39:00 · 258 阅读 · 0 评论 -
【HDU 4718】 The LCIS on the Tree 【树链剖分+线段树合并】
题意:给你一棵带点权的树,问树上两点间的LCIS(最长持续严格上升序列)题解:树链剖分+线段树合并 不会线段树合并可以先做3308 因为是要从u到v的LCIS这里是有个方向关系的 需要维护从下往上的,也需要从上往下的 所以我建了两颗线段树 #include<set>#include<map>#...原创 2016-12-21 21:20:50 · 373 阅读 · 0 评论 -
【HDU 5988】 Coding Contest 【费用流】
题意:给你一张图n个点m条边,每个点有s个人,但只能容纳b个人,然后如果第一个经过一条边,不会有任何事情发生,下面经过这条边的人都有p的概率损坏这条边,问你使每个点的人小于等于容量的最小损坏概率是多少题解:最小损坏概率=最大不损坏概率也就是说(1-p1)*(1-p2)..然后乘法可以用取对数的形式换成加法,就可以用费用流写了1.原点向每个i连一条容量为si,代价为0的边2.每个i向汇点连一条容量为...原创 2016-12-23 10:54:37 · 293 阅读 · 0 评论 -
【HDU 4441】 Queue Sequence 【Splay】
题意: 给你一个初始为空的序列,让你支持以下操作1.插入+x,-x到位置p,其中x是序列中没出现过的最小正整数,其中插入后+x在位置p,-x的位置是左边负数的个数和+x左边正数的个数一样且最靠右的位置2.删除+x,-x 保证+x,-x在序列中存在3.询问+x,-x之间的数之和题解:这题是做的几个splay题目里面比较烦的一个,所以写个博客记录下首先插入操作是最烦的,求序列中没出现过的最小正整数用一...原创 2017-01-31 19:42:13 · 271 阅读 · 0 评论 -
【团体程序设计天梯赛-练习集L3-015】球队“食物链”【状压dp+路径记录】
题意: 找一个环,满足相邻的前一个胜过后一个,输出答案序列,如果有多个答案,输出字典序最小的方案题解: 首先,如果有答案的话,方案中1肯定是在第一个(因为答案是个环 最多有20个点,状压dp很好想到,这是最简单的了差不多,dp[s][i]代表以i为结尾的状态s能否被达到,把dp[1][1]初始化为1 难点是路径的记录,我是这样处理的,在记录正向边的时候,用pre[i]记录那...原创 2017-03-28 18:14:47 · 447 阅读 · 0 评论 -
【Codeforces 789D】 Weird journey 【欧拉路计数】
题意:给你一张n个点m条边的图,问你经过其中m-2条边两次,剩下2条边一次的方案数有几种,如果剩下两条边的集合一样算同一种题解:把题意转换成,我们挑选两条边,把其他的边都变成两条,这样就变成了一笔画问题(欧拉路径是否存在),我们欧拉路径存在的充要条件是奇点个数是0或2,。然后下面需要进行分类讨论,我们把边分成普通变和自环(u=v)两类。1.选取两条不相邻普通边,图中存在4个奇点,不满足欧拉路径条件...原创 2017-03-30 20:32:11 · 685 阅读 · 0 评论 -
【HDU 3663】 Power Stations 【精确覆盖】
题意:有n个村庄,每个村庄有个发电机,村庄之间有路,如果一个村庄开了发电机,那么和该村庄有边直接相连的就可以获得能量(他自己当然也有),并且一个村庄不能获得太多能量,也就是说在且只在一个发电机的供电范围内,然后每个村庄的发电机有一个能工作的时间区间,让你做一个规划,使得每个村庄每天都有且只有一个能量供应题解:这个题目的构图思路比较难想,但一个村庄每次只被覆盖一次是很容易想到可以用dlx算法来实现精...原创 2017-01-31 20:00:09 · 249 阅读 · 0 评论 -
【POJ 2989】 All Friends【Born_Kerbosch求极大团个数】
Born_Kerbosh算法个人感觉主要是判重精妙,最大团就是暴搜,谁都会,但求极大团个数的时候需要判重,自己想的时候怎么也想不出来怎么判,后来搜题解搜到了这个算法,发现网上关于这个算法的中文讲解几乎没有。。于是生硬的wiki上面的解释读了下来,附上链接https://en.wikipedia.org/wiki/Bron%E2%80%93Kerbosch_algorithm#CITEREFJohn...原创 2017-01-31 21:03:08 · 1499 阅读 · 0 评论 -
【HDU 4858】 项目管理 【图的分治】
题解:共有m条边 设k=sqrt(m) 若一个点的度(即与之有边连接点的个数)小于k成为轻点,剩下的(大于等于k)称为重点对点i来说degree[i]记录点的度重点的个数 <=2*m/sqrt(m)=2*sqrt(m)对于一个点i,A[i]记录这个点的值对于重点i,sum[i]记录其答案,对于轻点i,sum[i]无任何作用,轻点的答案通过对所有与轻点相连的点的值求和直接得到题目可分为三个过程...原创 2017-01-31 21:37:26 · 281 阅读 · 0 评论 -
【HDU 5584】 LCM Walk 【递推】
题意:一个坐标系,每次可以从(x,y)走到(x,y+lcm(x,y))或者(x+lcm(x,y),y),给你一个坐标点(n,m),问有多少个点为起点可以到达该点题解:因为每次可以在x,y坐标中加上lcm,所以当前x,y中较小的哪一个肯定是x'或y'.(x,y) 设gcd(x,y)=f x=m1f y=m2f那么下一个点的坐标为(m1f+m1m2f+m2f)或者(m2f,m1m2f+m1f)如果只走...原创 2017-02-05 17:23:11 · 275 阅读 · 0 评论 -
【Codeforces 766E】 Mahmoud and a xor trip 【二进制计数】
题意:给你一棵树,树上的每个点都有个权值,问每个点到下标比他大的路径权值异或和题解:数据范围1e5,如果小一点可以预处理前缀暴力做这题可以计算二进制每一位对答案的贡献,因为权值范围1e6,计算2^0----2^20就好了计数的时候用cnt[u][0]记录以u为根异或值为0的路径数量,cnt[u][1]记录异或值为1的数量统计部分有点类似树分治主要还是拆位了想到了就很简单了#include<s...原创 2017-02-08 15:07:21 · 563 阅读 · 0 评论 -
【Codeforces 739E】 Gosha is hunting【费用流】
题意: 小明有a个神奇宝贝球,b个超级神奇宝贝球,现在有n只神奇宝贝,A球B球分别有p1i,p2i的概率抓到i神奇宝贝,一个神奇宝贝被一种球只能抓一次,问抓到神奇宝贝个数的期望是多少题解: 看官方题解看不太懂,无意间看到了wkc的代码,一下子看懂了 费用流可做 A=n+1,B=n+2 vs向A连(a,0) vs向B连(b,0) A向i连(1,p1i) ...原创 2016-12-06 19:10:35 · 574 阅读 · 0 评论 -
【Codeforces 736C】 Ostap and Tree【树形DP】
题意:问对一棵树染色,初始无色,要求距每个点最近的染色点的距离不超过k题解:之前比赛的时候看见这题就懵了,当时以为是排列组合的结论题(……)看了题解没怎么看明白,之后看了别人的blog,看见了比题解更优的n*k^2的解法,也挺好理解的dp[i][j]记录i的子树中当前特征黑点距离i的距离为j的方案数(这里说的很不清楚,下面会解释什么是特征黑点首先我们知道如果只考虑一棵子树,如果这棵子树自身黑点已经...原创 2016-12-02 19:08:51 · 765 阅读 · 0 评论 -
【Codeforces 792E】 Colored Balls 【分块思想】
题意:有n堆物品,问你如果要把每堆物品都分成若干集合,且所有集合大小差距不超过1,最少需要分成多少堆题解:因为1<a[i]<1e9,所以我们可以分块,枚举集合的大小i[1,sqrt(mx)],我们对每个集合判断能否把这个集合分成若干集合,其中每个集合的大小为i或i+1,如果全都可以,分成尽量少的集合,然后我们枚举把第一堆物品分成的集合的个数i[1,a[1]],所以我们得到一个sz a[...原创 2017-03-31 21:16:16 · 522 阅读 · 0 评论 -
【Codeforces 789E】 The Great Mixing 【数学推导+bfs】
题意:有k个数,是1/1000的倍数,问能否选取任意个数,每个数也能选任意次,使他们的均值为n/1000题解:假设选了m个数 (s1+s2+...sm)/1000/m=n/1000,化简后得到(s1-n)+(s2-n)+....+(sm-n)=0,原题转化成从k个数中选m个数使他们的和为0,且选出来的数的和的范围必然是在[-1000,1000],这样用bfs来写,就可以得到最少需要选几个数,O(2...原创 2017-03-30 23:13:37 · 710 阅读 · 0 评论 -
【Codeforces 715C&716E】Digit Tree【树分治】
题意:给你一棵树,每条边有一个权值[0,9],让你找出所有点对(u,v)使得u到v路径组成的数能被m整除(像字符串一样组成)题解:很明显可以看出树分治,如果之前没有接触过树分治建议先做下poj1741(可以参考国家队论文写的很详细)然后来说这题的思路,对这棵树进行点分治,每次分治算经过根节点的满足条件的点对数有几个,每次分治时在dfs时记录下每个节点的d1(从该节点到根组成的数),d2(从根到该节...原创 2016-10-04 16:35:58 · 1303 阅读 · 0 评论 -
【Codeforces 718C&719E】Sasha and Array【线段树成段更新+矩阵快速幂】
题意:给你一个数列,有两种操作1 l r x 给[l,r]区间上的数加上x, 2 l r 询问[l,r]区间fibonacci数列的和(f[l]+f[l+1]+……f[r])题解:这样的区间加和区间询问很容易想到线段树成段更新,关键是怎么存储信息,我们都知道fibonacci数列可以用矩阵快速幂递推,基础矩阵是a[0][0]=1,a[0][1]=1,a[1][0]=1,a[1][1]=0,a[0]...原创 2016-10-04 16:57:48 · 610 阅读 · 0 评论 -
【Codeforces 724D】 Dense Subsequence【贪心】
题意:给你一个字符串,让你从中选出一串字符,使得这串字符的sort后字典序最小,选字符的要求是如果上一个选的是i 那么[i+1,i+m]中至少选一个,[1,m]中必须选一个题解:贪心,先判断只由'a'-c的字符组成该字符串是否可行,如果可行,那么我们肯定是拿'a'越多越好,拿‘b’……c-1也是越多越好(aaabbXX肯定比aaabXXX字典序小),也就c字符需要特判一下,因为c字符不是越多越好,...原创 2016-10-09 08:48:48 · 834 阅读 · 0 评论 -
【Codeforces 713B&714D】 Searching Rectangles【贪心】
题意:n*n的平面上有两个矩形,让你找出矩形的位置,每次你可以输出(x1,y1,x2,y2),然后oj会返回0,1或2,表示这个坐标范围内有几个矩形题解:每次直接二分每个矩形顶点的坐标,处理一些小细节就好,时间复杂度O(nlogn)#include<set>#include<map>#include<cmath>#include<stack>...原创 2016-10-09 13:11:28 · 342 阅读 · 0 评论 -
【HDU 5945】 Fxx and game 【单调队列优化dp】
题意:http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=730&pid=1002 中文不解释。。题解:比赛的时候multiset写了一发过了初测就没细想了,没想到出题人卡了log看到题解单调队列,很好写的一个dp首先我们很容易得到状态转移方程dp[i]=(dp[k*i],dp[i+l])+1{1<=...原创 2016-10-30 00:05:38 · 314 阅读 · 0 评论 -
【HDU 5933】 ArcSoft's Office Rearrangement 【贪心】
题意:有n堆石子 有两种操作 1合并相邻两堆 2把一堆分成两堆(大小任意和为一堆的大小) 问将这n堆石子分成等量的k堆 最多需要多少次操作题解:首先,所有堆石子之和必须是k的整数倍然后,贪心的去想,如果一个石子堆不是k的整数倍,那么他必须要和别的石子合并之后才能形成k的整数倍所以我们每次从前往后求和,到和为k的整数倍停止,然后将合并后的石子分成目标大小 这里最少分的次数为(能分成的堆数-1)次上...原创 2016-10-30 09:55:54 · 247 阅读 · 0 评论 -
【HDU 5952】Counting Cliques 【最大团思想+搜索】
题意: 让你找大小为s的完全子图有几个题解: 一开始直接想到极大团+组合数,去重去不了 后来写了发爆搜直接过了 就是和最大团写法一样维护一个vset,vset中每个点都和当前已选择点有边连接,然后扩展就行了#include<set>#include<map>#include<cmath>#include<stack>...原创 2016-10-30 20:25:46 · 400 阅读 · 0 评论 -
【Codeforces 733D】 Kostya the Sculptor【贪心】
题意:给你n个长方形,让你找出2个或1个长方体,使得他们拼接成的长方体的内接圆半径最大(两个矩形拼接的条件是他们有一个面完全相同)题解:很容易想到一个长方体的内接圆半径是由他的最短的那条边决定的,设长方体的边长从大到小分别为a,b,c,只有用a*b这个面和别的长方体拼接,才有可能使得拼接后的长方体内接圆半径更大于是,根据上述我们读入的时候将长方体边长排序然后sort 以a为第一关键字 以b为第二关...原创 2016-11-01 09:41:42 · 392 阅读 · 0 评论 -
【Codeforces 733C】 Epidemic in Monstropolis 【贪心】
题意:有n个怪物排成一列,如果一个怪物的体重严格大于和他相邻的怪物,那么可以吃掉那个怪物,之后怪物的体重变成两者之和,然后让你找出一种方案使得a序列可以变成b序列题解:因为怪物只能吃相邻的,如果前缀和不能满足a[1]+a[2]+a[x]=b[1],a[x+1]+……+a[y]=b[2],…… 那么就肯定不行然后我们来看一段序列满足什么条件才能合并成一个b(该区间和为b)条件是:该序列中元素不完全一...原创 2016-11-01 09:50:23 · 665 阅读 · 0 评论 -
【Codeforces 733F】 Drivers Dissatisfaction 【MST+bianry lifting】
题意: 给出一个图,每条边都有权值w和c,w为边长,c为使边长-1的钱,你拥有一定数目的钱,要你求该图的最小生成树题解: 参考了cf官方题解的写法。 (首先我们要知道,如果我们知道哪几条边是被选中,那么肯定是找一个c最小的边,然后一直减 先是不考虑用钱换距离,单纯用kruskal裸着求一遍mst 然后我们对所有边,考虑将该条边作为要减的那条边加入到mst中...原创 2016-11-06 23:28:52 · 338 阅读 · 0 评论 -
【Codeforces 733E】 Sleep in Class 【模拟】
题解:有一个UD序列,每个点按照当前的UD来走,如果走过一次,该UD就会反向题意:从哪里出去比较cntu和cntd(当前i之前u的个数)(当前i之后d的个数)当前s[i]=='U' 如果cntd>cntu从左边出去 cntd<=cntu从右边出去当前s[i]=='D' 如果cntu>cntd从右边出去 cntu<=cntd从左边出去计数问题如果从左边出去,ans+=i 如...原创 2016-11-16 13:02:12 · 444 阅读 · 0 评论 -
【Codeforces 738F】 Financiers Game【记忆化DP】
题意:有一个数列,两个人分别从两端开始取数字,左边的先取,第一次能取1个或2个,然后轮流取得时候,如果第一个取了k个,后一个人只能取k或k+1个,如果剩下的不够了则游戏终止,I想要最大化两个人取得数字之和的差距,Z想要最小化,两个人都选择最优操作题解:CF官方题解写的非常好完全是按照那个写的,也写得很清楚这个我当时完全没看出来dp(没做过类似的题目但看了之后,这个状态转移方程还是很好理解的主要还有...原创 2016-11-24 22:49:50 · 898 阅读 · 0 评论 -
【HDU 5997】 rausen loves cakes 【启发式合并+线段树】
题意:给你一段数字,要你完成两个操作1.把所有数字x换成数字y2.输出[l,r]中有几段不同的数字题解:这题可以采用启发式合并,也就是每次把个数少的往个数大的上面合并,这样如果要合并成n个一样的最坏的情况是nlogn的(n/2*logn)然后合并的时候用线段树单点更新下就行时间复杂度O(nlog2n)注意:可能会让你合并颜色没有的节点,所以在改变合并方向的标记的时候两边都要标记一下#include...原创 2016-12-20 16:22:12 · 934 阅读 · 0 评论