自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 zoj:Strings in the Pocket (马拉车)

题目大意:有两个字符串s,t,问能否将s的一段[l,r]子串翻转使得它等于t? 如果可以,问有多少段这样的子串使得翻转一次后s = t,注:只能翻转一次。解法:简单题,分情况讨论:如果s 原本就等于 t,这个时候s中所有回文串的半径就是答案。若s 不等于 t,则找出不相等的那一段区间的最左边和最右边,check一下中间这段能否通过翻转使得相等,如果不能答案 = 0,否则可以像两边延申判断l,r ...

2019-04-29 21:27:18 122

原创 zoj:Sequence in the Pocket(思维)

题目大意:给一个混乱的序列,只有一种可执行的操作:把每个数字放到最前面,问最少经过几次可以把这个序列弄成不降序的序列。做法1:不难想到最差情况是移动n次,因为移动哪个数字,和什么时候移动这个数字都是由自己决定,不用想得过分复杂。详细过程:首先想到所有逆序了的数字都是要移动的,所谓逆序就是在这个数字之前有比他大的数字,一遍扫描可以把逆序了的数字抽出来(实际并没有抽出来),剩下的数字是原来就保持非...

2019-04-29 12:40:58 210

原创 ZOJ:Element Swapping(数学推导)

题目大意:有一个数组,被一个人交换了两个值,而原主人又忘了数组的样子,但是原主人记得两个值:以及现在数组,问你有几种交换的可能?(可能交换了哪两个数字?)设现在的数组的 Xi = i * ai + j * aj + “…” ,Yi = i * ai ^ 2 + j * aj ^ 2 + “…”原数组的 X = i * aj + j * ai + “…”, Y = i * aj ^ 2 ...

2019-04-28 12:23:56 210

原创 ZOJ:Welcome Party (各个连通分量的遍历 + 总字典序最小)

题意:有n个人,编号1 - n,有m对朋友,现在希望构造一个入教堂的序列,使得入教堂时在它之前没有它的朋友入教堂的人最少(入教堂时没有朋友比他先入,他就会unhappy,要使unhappy的人最少)。解法:因为要unhappy的人最少,不难想到各个连通分量可以做到只有一个人unhappy,而每个连通分量至少有一个人unhappy,保证unhappy的人数最少的方法就是遍历各个连通分量,沿着遍历序...

2019-04-28 11:43:07 230

原创 1157 Round 555 DIV3 :F. Maximum Balanced Circle (构造算法 + 尺取法(双指针))

题目大意:给出一个序列A,要你从这个序列中选出一些元素构造出一个最长的新序列,这个新序列是一个环,且相邻的两个元素差值不超过1。解法:首先要知道差值为0也是可以的,但是贪心的从个数最多的元素开始构造是错的,需要枚举来构造答案最大的解。普通枚举区间复杂度达到O(n ^ 2),因此要换一种枚举方式:先将原序列排好序,这样能选的元素一定是在连续的区间,首先左端点,我们让右端点遍历序列,如果左端点到右端...

2019-04-27 21:00:27 170

原创 1157 Round 555 DIV3 :E. Minimum Array(贪心 + 并查集优化 | multiset)

题目大意:有两个序列a,b,a序列和b序列的每个元素 , (ai + bi) % n 的值可以构成ci,题目希望通过调整b序列的顺序,来使得C序列字典序最小。解法:先扫一遍b序列,可以得到数值的个数,对于ai的每个元素,从左往右起,若数值:(n - a[i]) % n 的个数还有剩,则bi这个位置换成这个数值,否则,贪心的往上找,找(n - a[i] + 1) % n 是否存在,有就放,没有就...

2019-04-27 20:34:13 109

原创 codeforce round 554 div2 解题报告 (A -> D)

A. Neko Finds Grapes题目大意:两个序列a,b。选出ai,bj进行匹配,要求ai + bj 是奇数,每个数字只能匹配一次,被匹配一次,求最大的匹配对数,解法:扫描两个序列即可,答案是唯一的,记下扫描a序列的奇数的个数和偶数个数,扫描b的时候直接得出答案。B. Neko Performs Cat Furrier Transform题目大意:给一个数字 x,有两种操作,A操作...

2019-04-26 20:07:29 136

原创 codeforce 1152 (round 554) DIV2:D. Neko and Aki's Prank (思维 + dp + 贪心)

题意:有n对括号,把这n对括号所有合法的匹配画在字典树上,字典树的每一个结点都是合法的括号匹配(即任意一个前缀左括号数量大于等于右括号),问这棵字典树上不相交边集的最大数量是多少?解法:明白题意和字典树概念后,似乎可以用树形dp搞,建树是不可能建的,一看模数1e9 + 7,那么只能凭空想象然后在虚树上进行dp了,手画了一下第三个样例的字典树,有21个结点,贪心的从叶子结点开始选连接到它的边,一层...

2019-04-26 19:24:58 253

原创 codeforce:1151_DIV2(round 553) 解题报告(A->D)

A:题意:将串的字符增1或减1变换使得“ACTG"是原串的子串。问最小的变换次数(‘A’ 减 1得到’Z‘)解法:直接暴力,枚举每一个字符作为起点的连续四个字符变成ACTG要几步,然后取最小值就行。B:题意:给一个m,n的矩阵,问能不能每行都选一个元素,使得最后的异或和大于0,输出选数的方案。解法:构造(标签贴了个DP,被干扰了,往DP方向想了半天觉得实在是没解去看了题解。。。)先构造...

2019-04-26 11:09:42 417

原创 1151_DIV2:C. Problem for Nazar(数学)

题目大意:有奇数和偶数两个无穷大的集合,奇数集合是{1,3,5,7…},偶数集合是{2,4,6,8…},先从奇数取1个,然后从偶数取2个,再在奇数取4个…,每次取都取前面的数量的两倍,在两个集合交替取,然后将取出来的数构成一个新的无穷大的集合 {1,2,4,3,5,7,9,6,8,10,12…}。问在新的集合中,第 l 到 第r个的数字的和是多少?(对1e9 + 7取模)做法:其实是一道数学模...

2019-04-26 10:58:31 149

原创 洛谷P3168 [CQOI2015]任务查询系统:(主席树 + 差分 + 对主席树前缀和的理解)

题目描述最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分。超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行),其优先级为Pi。同一时间可能有多个任务同时执行,它们的优先级可能相同,也可能不同。调度系统会经常向查询系统询问,第Xi秒正在运行的任务中,优先级最小的Ki个任...

2019-04-22 23:16:47 185

原创 计蒜客_项链:(主席树 | 离线 + 树状数组)

题目大意就跟洛谷的HH项链一样,但是求一串区间内不重复数字的和。一种做法是离线 + 树状数组,这里不讲。主要讲一下新学习的技能,用主席树搞区间内不重复的数字(个数或者和)。由于洛谷那个写炸了,一直MLE(不知道被什么数据卡了),只好拿计蒜客上面的题来试一下,结果计蒜客的能过。主席树做法和树状数组相同,对于同一个数字,我们只纪录最后一个出现的位置,如果前面出现了,我们先把他删掉,然后再在现在...

2019-04-22 13:31:16 187

原创 洛谷P3157:动态逆序对(树状数组套主席树)

题目大意:对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。做法很简单:在加入序列的时候就可以先算出总的逆序对,然后每删一个就扣掉这个数的贡献。因为要删除数字求贡献,线段树是搞不了的,必须要用主席树,而且要用套带修改的主席树。删除贡献:只需要计算这个...

2019-04-21 23:24:50 214

原创 牛客练习赛44_C:小y的质数 ( 容斥原理 )

题目大意:由于这是一个区间筛质数的模板题。所以小k不屑于去写。所以出题人只好yy了另一道题。定义k生互质数为满足y + k与y - k互质的数。现在给出区间[L,R],你需要输出区间内k生互质数有多少对 我们说一对k生互质数在区间[L,R]内,当且仅当y+k ∈ [L,R] 且 y−k ∈ [L,R]。题目要求求 [l,r] 内 gcd(y,y + 2 * k) = 1 的所有...

2019-04-20 18:45:06 231

原创 P1640 [SCOI2010]连续攻击游戏:(二分图)

lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示。当他使用某种装备时,他只能使用该装备的某一个属性。并且每种装备最多只能使用一次。游戏进行到最后,lxhgww遇到了终极boss,这个终极boss很奇怪,攻击他的装备所使用的属性值必须从1开始连续递增地攻击,才能对boss产生伤害。也就是说一开始的时候,lxhgww只能使用...

2019-04-18 15:57:19 191

原创 蓝桥杯国赛训练营:蒜头君的玩具(线段树 or 差分)

题目大意:给一个长为 n 的序列,以及 m 条直线,从中任选三条线,定义ans 为 这三条线都覆盖的点的个数,求这个个数的期望。首先选直线的方案总数是C[m][3],期望就是所有可行的方案的ans 之和 除以 C[m][3]。一开始我是用差分做的,第一眼觉得完全没必要用到线段树,结果哇了,事实上确实可以用差分做,只不过第一次忽略了一些处理。第二次是用线段树做的:考虑用 n 来建树,我们可以维...

2019-04-18 11:21:11 327

原创 Minieye杯:I-Tree(二分+贪心)

题目大意:给一棵N个结点的树,将它分成K个连通块,设ki为每个连通块的权值和,令gi为所有ki中的最小值,求gi的最大值。思路历程就不讲了,写了一个优先级队列去贪心,wa了9发才去找反例推出自己的贪心是错解显然分成的连通块越少,每个连通块的权值越大,那么其中权值和最小的块的权值也越大(有点绕,好好读一读),这意味着答案具有单调性,虽然题目说K是固定的,我们可以二分判断是否满足要求具体做法:二...

2019-04-17 21:39:02 225

原创 1144 DIV3:G - Two Merged Sequences(贪心 or dp +思维)

1144 DIV3:G - Two Merged Sequences(贪心 or dp +思维)积累思维。题目大意:给一个序列,让你从中在不破坏原顺序的情况挑出一些数来,使得这个序列分成两份,第一份是严格递增,第二份严格递减。若有解 第一行输出YES第二行,若一个元素你将他放在递增序列内,则输出1,否则输出0。若无解,输出NO思路历程:一个序列要按原顺序分成一份递增,另一份递减,不难想...

2019-04-17 20:18:33 153

原创 1144 DIV3:E - Median String

题目大意:给出两个长度相同的字符串s,t 让你求出s,t中间的字符串,例如"aa" 和 “ac” 中间的字符串是"ab”.又如:s = “az” ,t = “bf” ,他们之间的字符串有[“az”, “ba”, “bb”, “bc”, “bd”, “be”, “bf”],其中中间的字符串是"bc" 因此答案就是“bc"很容易想到26进制运算,要求的就是 (s + t) / 2 , 然而。。。我...

2019-04-17 15:37:52 140

原创 蓝桥杯国赛训练营:小白逛公园(线段树维护最大区间子段和)

题目大意:有一个长为n的序列,每次询问[l,r]区间内最大子段和是多大。徒手撸应该能撸出来(我撸不出来)没学过的话写起来还是有点困难的,一点一点看吧。struct ss{ int l,r; //结点维护的区间 int lv,rv,mv,sum; //左起最大连续子段和,右起最大连续子段和,整个区间的最大连续子段和,整个区间的和}tree[maxn << 2];...

2019-04-16 20:36:48 162

原创 ZOJ 2112:Dynamic Rankings(主席树查询区间第k小(带修改))

题目和算法在上一篇讲了,这篇用来贴代码:#include<bits/stdc++.h>using namespace std;const int maxn = 1e5+10;const int maxm = 2000010;#define lowbit(i) (i & (-i))int n,m,q,p,t,tot,a[maxn],tt[maxn],use[maxn]...

2019-04-16 19:14:21 196

原创 ZOJ 2112:Dynamic Rankings(主席树查询区间第k小(带修改))

题目大意:就是裸的区间查询第k小,但是多了一个修改指令:将原来第i个数修改为t这种操作。搞了一天终于搞懂了带修的主席树。其实就是用树状数组来维护主席树罢了:原本静态的情况第 i 棵树维护的是 区间[1,i]的情况,用树状数组的话第 i 棵树维护的是区间 [i - lowbit(i),i]。所以查询和修改都要处理lo...

2019-04-16 18:46:52 190

原创 HDU4417:Super Mario(主席树查询区间比k小的数的个数)

题意如标题所示,查询[i,j]区间内小于等于h的数的个数,是一道主席树的模板题,刚开始没离散化,直接用1e9建树T了,然后不太清醒的情况下写了2个小时离散化。。。/* 主席树查询小于等于k的数的个数; */#include<iostream>#include<bits/stdc++.h> using namespace std;#include<stdi...

2019-04-15 21:25:29 529

原创 ZOJ浙大校赛_problem H:Rescue the Princess(图论分析+tarjan边连通分量染色缩点+树上LCA+并查集)

题目大意:给出一个无向图(不一定连通),然后给出u,v,w三个点,v 和 w要去u,问是否存在两条路径使得v去u和w去u的路径上不存在任何一条公共边(换句话说一条边只能走一次,问u和v能不能都走到w);可恶啊,想到了正确的图论模型,可惜只差一点,止步在最后的判断,剩一个小时的时候认为判断太复杂了放弃了(白调了一个小时的代码)。刚看到可能有点懵,但是一想到怎样才会经过一条边?如果有v,w各自在的...

2019-04-15 08:58:46 259

原创 CF_101853B New Assignment (二分图+基础数论+仔细读题)

题目大意: 给n个人分组,这n个人格子有一个权值,分组条件是,组内人数不大于2人,必须异性,且gcd > 1。问最少分几组,对于所有的输入数据有: n <= 10000,ai <= 1000000,且任意三个人 必定互质(gcd = 1)。显然可以贪心得出尽量多分2人的组可以使组数最少,因为一组最多两人,而且必须异性,gcd必须大于1,很容易看出是一个二分图匹配模型。但是 n ...

2019-04-09 22:53:46 257

原创 HDU2819:Swap(二分图+模拟)

题意:给一个n * n的矩阵,矩阵每个位置的值是0或1,问能否通过多次交换两行或者两列得到一个主对角线都是1的矩阵?如果能,输出交换次数和交换方案。这题可以用二分图来搞。通过线性代数可知,只交换行或列就行了。考虑只交换行,可以用二分图建模。每一行对于列为1的列编号(设为i),表示这一行可以放在第i行,设这一行是第a行,可以建一条 a -> i 的边。观察一下发现输入的矩阵刚好就是我们要建的...

2019-04-09 22:22:15 164

原创 蓝桥杯国赛训练营:迷宫逃生(状压 + BFS)

刷完状压dp特此发一篇博客纪念一下…这题没什么特别的,与dp无关。总结一下状压的理解:首先状压并没有压缩时间复杂度和空间复杂度,而只是利用计算机二级制的特性和位运算,将本应该多维表示的状态用一维表示出来。回忆二进制法求子集:对于一个有n位整数,每一个二进制位为0表示选,为1表示不选。状压也是利用了这一点。对于某些dp我们必须枚举一个状态的子集的时候,就可以用二进制法来表示状态,例如n个物品,状...

2019-04-08 21:08:26 279

原创 第十届蓝桥杯 I:糖果(状压+背包dp)

【问题描述】糖果店的老板一共有 M 种口味的糖果出售。为了方便描述,我们将 M 种口味编号 1 ∼ M。小明希望能品尝到所有口味的糖果。遗憾的是老板并不单独出售糖果,而 是 K 颗一包整包出售。幸好糖果包装上注明了其中 K 颗糖果的口味,所以小明可以在买之前就知道每包内的糖果口味。给定 N 包糖果,请你计算小明最少买几包,就可以品尝到所有口味的糖果。【输入格式】第一行包含三个整数 N、...

2019-04-08 12:41:54 1741

原创 蓝桥国赛训练营:铺瓷砖(状压dp)

题面:给出一种 1x2的瓷砖和n * m的地板,问铺满整个地板有几种方案?答案对 1e9+7求余。1 <= min(n,m) <= 10 , 1 <= max(n,m) <= 100;二维状压dp思维过程: 首先想到一行怎么铺,可以用1表示竖着,0表示横着。有了表示的方法,根据状压dp,我们可以把一行的状态压缩成一维,令dp[i][j] 表示 第i行,铺的方案为...

2019-04-07 11:19:16 577

原创 树形dp+dp总结(待续)

最近学了一下树形dp。主要做过:树形背包,树上路径,点覆盖,最大独立集,支配集这几类树形dp的题。总的来说,树形dp因为是树,子问题特别明显,可以在dfs时直接考虑如何转移,具体题目还是具体分析。有时转移会具有后效性,但可以通过其他方式消除(支配集就是一个很好的例子),有关树形dp的一些博客题解放在了前面,这篇就到这吧。最后心得:其实关于dp都是这样,一般从状态或者从决策入手,有时也可以从...

2019-04-04 11:24:12 321

原创 树分治总结(待续)

最近才学的树分治,总结一下该写的东西。树分治分为点分治和边分治,先讲点分治吧点分治,顾名思义是在树上按点进行分治。一般用于处理树上路径的问题(挺多题可以直接用更好写复杂度更低的树形dp替代),因为路径的问题可以分解为过某点的路径,而过某点我们就可以进行按点分治了。树上点分治的一个重要思想就是每次从重心开始处理,重心的概念:重心是一个点且该点子节点最多的子树的结点树最少,这里最少是相对于其他点...

2019-04-04 11:01:11 123

原创 HDU1045:Fire Net(拆点+二分图)

题意是给一个最多4*4的网格图,其中有些地方障碍,现在在无障碍的格子放棋子,各个棋子不能同行同列,问最多可以放多少个棋上去。如果是n*m的无障碍网格图,能放的最多的棋子个数是min(row,col)。如果有障碍,因为这个图最多只有 4*4,完全可以枚举每个点放和不放,然后暴力搜索,check一下。这里主要是讲二分图的思路:因为行列不能相同,以行,列建二分图。一行有障碍的情况或一列有障碍的情...

2019-04-04 10:18:10 150

原创 hdu2236无题II(枚举+二分+二分图)

题目大意:在n*n矩阵中找n个数使得这n个数不同行不同列,且差值最小。根据这n个数不同行不同列,我们可以用行对列建二分图,跑最大匹配判断是否为n。要求差值最小,可以用枚举差值判断是否能跑出最大匹配。可知在这里差值具有单调性,差值越大越容易跑出二分匹配(包含的点更多),可以二分枚举最小值和差值,每次跑一下二分匹配判断最大匹配是否等于n即可。可是我的hopcroft crap 怎么比匈牙利还慢。。...

2019-04-03 21:53:12 188

原创 洛谷p2055:假期宿舍(二分图)

题目描述学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题。比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C 与 A 不认识。我们假设每个人只能睡和自己直接认识的人的床。那么一个解决方案就是 B 睡 A 的床而 C 睡 B 的床。而实际情况可能非常复杂,有的人可能认识好多在校学生,在校学生之间也不一定都互相认识。我们已知...

2019-04-03 21:26:53 171

原创 HDU 5115 Dire Wolf(区间dp)

这道题,题目大意就是有n头狼排在一起,每头狼有个伤害值,还有个给相邻的狼的伤害加成值,如果杀掉一头狼,受到的伤害是这头狼本身的伤害值加上这头狼受到的加成值。如果杀掉一头狼,那么剩下的狼会继续靠在一起。这题的转移方程用到了原问题外部的影响。我最开始是将子问题完全独立出来思考,转移方程不太一样。在这题之前,我做过的dp似乎很少用到更大规模问题的影响,也不能说是影响,就是转移的时候不能将子问题完全独...

2019-04-01 21:48:58 224

原创 新智认知杯:CSL的训练计划(拓扑排序)

众所周知,CSL 是一个负责的集训队队长。为了让集训队的学弟们训练更加饱和,他根据每个人的能力,提出了 m 个题数要求。假如 CSL 认为 yi 比 xi 强,那么如果 xi 做了 a 题,那 CSL 会要求 yi 需要做至少 a+ri×k,其中 ri 是已知的常数。CSL 现在一共有 s 道题目可以分给大家,因为 CSL 马上就要考OS了,所以他不想再出其他题了,请问正整数 k 最大是多少。从...

2019-04-01 19:33:10 296

原创 新智认知杯:CSL的魔法(思维+简单图论)

题目描述:有两个长度为 n 的序列,a0,a1,…,an−1和 b0,b1,…,bn−1。CSL 有一种魔法,每执行一次魔法,可以任意挑选一个序列并任意交换序列中两个元素的位置。CSL 使用若干次魔法,得到最终的序列 a 和 b,并且想要让 a0*b0+a1*b1+…+an−1*bn−1的值最小化。求解 CSL 至少使用多少次魔法,能够达到最小化的目标。贪心:大配小,可以得到最小。要大配小,就...

2019-04-01 09:25:12 591 3

原创 P1197_星球大战:(并查集+离线处理)

题目描述:很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系。某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球。这些星球通过特殊的以太隧道互相直接或间接地连接。但好景不长,很快帝国又重新造出了他的超级武器。凭借这超级武器的力量,帝国开始有计划地摧毁反抗军占领的星球。由于星球的不断被摧毁,两个星球之间的通讯通道也开始不可靠起来。现...

2019-04-01 09:02:35 194

原创 洛谷P1196_银河英雄传说:(带权并查集 + 相关注意点)

题目大意:有最多30000个数字,编号为1-30000,提供两种操作,一种是将i那一列,接在j的后面,第二种是查询i,j之间有多少个人。将i列和j列合并明显是一个普通的并查集维护集合的运用,但是要查询i,j之间有多少人,只用普通并查集维护不相交集合是不够的,需要用到带权并查集。可以想到:维护每个点到队列头的距离就行了。查询的时候,若i,j同属一列,则abs(dis[i]-dis[j])+1就是...

2019-04-01 08:38:31 149

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除