牛客
文章平均质量分 68
nowcoder
昵称很长很长真是太好了
这个作者很懒,什么都没留下…
展开
-
阔力梯的树(2020 CCPC Wannafly Winter Camp Day2 Div.1&2 )dsu on tree
题解:dsu on treedsu on tree的基本步骤就不说了看到这题询问结点的子树问题,而且询问时离线的,首先想到的dsu on tree的这个trick。本题的难题就是如何维护结点所有孩子的这个序列。1.第一个权值插入时,对于整体是没有影响的,(最少需要2个结点才能对其做出贡献)2.分类讨论权值插入的位置。设插入的数为xxx(1).如果插入到第一位(假定编号为yyy)或者最后一位(假定编号为yyy),那么毋庸置疑增加的贡献为(x−y)∗(x−y)(x-y)*(x-y)(x−y)∗(原创 2021-03-17 22:10:56 · 119 阅读 · 0 评论 -
2021牛客寒假算法基础集训营1 题解
A.串题解:dp三维dp可能更好理解一些。dp[i][j][k]dp[i][j][k]dp[i][j][k]代表长度为iii的字符串,当j=1时代表已经含有u了的字符串的个数,k=1时代表已经含有us的字符串的个数。最后输出dp[n][1][1]dp[n][1][1]dp[n][1][1]即可。/*Keep on going Never give up*/#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>原创 2021-02-07 12:18:49 · 535 阅读 · 0 评论 -
小A与任务 (贪心 优先队列)
题目链接:小A与任务题意:小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一个任务第 i 个任务需要花费 xi 的时间,同时完成第 i 个任务的时间不能晚于 yi,时间掌控者向小A提出了一个条件:如果完成第 i 个任务的时间本应是 t ,但小A支付 m 个金币的话,他可以帮助小A在 t − m × z 时刻完成第 i 个任务, zi 是时间参数,会在输入中给出小A想按时完成所有任务,请你帮他制定一个花费金币最少的方案注意:不能使得某个任务的花费时间小于原创 2020-12-28 22:06:12 · 602 阅读 · 0 评论 -
求和(dfs序+线段树)
题意:已知有n个节点,有n−1条边,形成一个树的结构。给定一个根节点k,每个节点都有一个权值,节点i的权值为vi。给m个操作,操作有两种类型:1 a x :表示将节点a的权值加上x2 a :表示求a节点的子树上所有节点的和(包括a节点本身)题解:dfs序+线段树用dfs序确定in[x]和out[x]的位置,in是当前结点开始的时间戳,out是回溯到当前结点的时间戳,当查询某结点时,可以快速确定他子树的范围。代码:/*Keep on going Never give up*///#pr原创 2020-11-19 21:50:12 · 236 阅读 · 0 评论 -
牛客小白月赛25 补题+题解[A-J]
加油加油加油!文章目录A.AOE还是单体?B.k-size字符串C.白魔法师D.抽卡E.点击消除F.疯狂的自我检索者G.解方程H.神奇的字母(二)I.十字爆破J.异或和之和A.AOE还是单体?思路:这题数据范围2e5,如果想暴力的话,会果断超时这毋庸置疑,正解应该是贪心,对于怎样选择使用技能,选择方法:当剩余怪物的个数大于或等于x时,我们选择AOC伤害,如果小于,也就是说还不如我一滴血一滴血的去打怪物划算,就选择单体伤害了。我们可以通过排序解决这个问题,找出使用多少次AOE伤害后剩下x个怪物,之后把原创 2020-05-18 22:20:49 · 1175 阅读 · 1 评论 -
小雨坐地铁--[最短路分层建图+虚点]
也是第一次接触这种分层建图的最短路思路:由题目我们可以知道某些站点是可以连接好几条地铁线路的,那么对于每条地铁线路我们可以把他当成一幅图来算。当然图是个无向图,所以要加两次边。add(i*n+x,i*n+pre,b); //乘i的话就是说把他建在第i层,这个pre是记录上一个点的位置。add(i*n+pre,i*n+x,b);处理换乘时的操作利用到我们刚刚所说的虚点add(x,i*...原创 2020-05-06 14:34:38 · 272 阅读 · 0 评论 -
[NC15665]maze
题目描述:小明来到一个由n x m个格子组成的迷宫,有些格子是陷阱,用’#‘表示,小明进入陷阱就会死亡,’.'表示没有陷阱。小明所在的位置用’S’表示,目的地用’T’表示。小明只能向上下左右相邻的格子移动,每移动一次花费1秒。有q个单向传送阵,每个传送阵各有一个入口和一个出口,入口和出口都在迷宫的格子里,当走到或被传送到一个有传送阵入口的格子时,小明可以选择是否开启传送阵。如果开启传送阵,小明就会被传送到出口对应的格子里,这个过程会花费3秒;如果不开启传送阵,将不会发生任何事情,小明可以继续向上下左右原创 2020-06-13 00:29:02 · 182 阅读 · 0 评论 -
[NC16591]关押罪犯 并查集
题解:很明显的并查集,但因为它们带有权值,所以我们先要把他排序,我们要尽可能让危害大的罪犯在两个监狱里(这里有一点贪心的味道)。1.首先我们把它门按照之间的影响值从大到小排序。2.假设a与b是敌人,那么我们吧a,b分开放置,并且记录a的敌人是b,b的敌人是a3.又假设a与c是敌人,这样的话我们记录一下c的敌人是a,这样的话,b和c就在一个监狱里,所以把他俩合并起来,怎么知道b与c在一个监狱呢,这是因为我们用rem数组记录了a的敌人,敌人的敌人是朋友,所以b,c合并4.又说b和c是敌人,但是他俩已经被原创 2020-06-08 19:18:59 · 262 阅读 · 0 评论 -
[NC23486]小A与小B 双向广搜
题解:这个题属于走迷宫类型问题的一个升级版吧,不同之处在于一秒钟小A走一步,小B可以走两步,这两种事件是同时发生的,所以我们每秒钟让A扩散一步,让B扩散两步。两个人走过的路径分别用visited[0][maxn][maxn]visited[1][maxn][maxn]来进行表示。小a走的时候1.检查自己的地图(防止重复走一个地方)2.检查小b的地图,看看小b是否走过这个地方(如果小b走过了,那就可以视为他们相遇了)同理可得:小b走的时候1.检查自己的地图(防止重复走一个地方)2.检查小原创 2020-06-04 13:44:52 · 238 阅读 · 0 评论 -
[NC15034]德玛西亚万岁
状压dp第一次写状压dp的题目,可能是因为这种类型的比较难吧,所以是第一次做到。题解:我们可以用二进制来描述方格,1表示有德玛西亚,0表示没有。样例1中第一行的三个方格都可以站人一共有五种情况分别是第一行的五种情况第一种 000第二种 001第三种 010第四种 100第五种 101再看第二行第二行情况第一种 000第二种 010第三种 001第二行的第一种情况是有5种方法的,第二种情况是有4种方法(与第一行第三种情况冲突原创 2020-06-04 12:19:01 · 636 阅读 · 0 评论 -
[NC14301]K-th Number
题意:给定一个数列A和一个空的数列B,从数列a中选取大于等于k的连续序列长度的第k大数放进b序列中,再从b序列中找出第m大数。题解:这个题是通过二分答案+尺取法(判断条件)来解决的二分答案:我们通过二分答案来猜测这个第m大的数到底是多少,如果猜大了,那么我们就把他往小区间缩,如果猜小了就把他往大区间缩,这就是二分答案的一个基本过程。check函数:我们如何判断这个数到底是大了还是小了呢,这是一个关键问题,因为我们二分的是b数组的第m大数,这个第m大数取决于有多少个序列中第k大数是大于m的。这里就需要原创 2020-06-04 12:16:06 · 189 阅读 · 0 评论 -
[NC15748]旅游 树形dp基础
菜鸡第一次接触树形dp这个东西,不过这个东西还是很好理解的(可能是因为模板题吧)个人感觉,相比线性dp,树形dp的状态转移方程更加的直观,难点主要是在“树”的结构上比较麻烦。题解:树的遍历是从根节点往子节点的方向深入,所以用dfs编程会容易一些。这个题根据dp的解题思路,定义状态:dp[i][0],表示不在这个结点入住时的最优解。dp[i][1],表示在这个结点入住时的最优解。转移状态方程:(1)不选择当前结点,那么他的子节点可以选或者不选,所以我们要选择两者之间最大的,即dp[v][0]+原创 2020-06-04 12:14:59 · 138 阅读 · 0 评论 -
[NC21228]货币系统
题解:若存在一个货币系统的简化拥有与原货币系统不同的货币,先讨论只多出一种货币的情况,假设多出来的是A,那么x*A必然可以被原货币系统表示(x表示大素数),也就是说原货币系统中必然有A的约数B,添加A不如保留B,所以一个货币系统的简化一定不会添加其它货币考虑使m尽可能小,那就要让大的面值尽可能多的能被小的面值凑出来用dp[i]表示i这个面值能否被表示出来,先把面值排序,然后从小到大扫,如果能被表示就跳过,否则从0循环到maxn,对每个面值进行判断能否表示即可。代码:#pragma GCC optim原创 2020-06-04 12:11:49 · 177 阅读 · 0 评论 -
NC14414 小AA的数列
题解:求一个序列问长度为偶数且在[L, R]范围内的异或和的和,这个题考察的异或和的问题,因为异或和的话就要牵扯到二进制,所以一般来说这类问题就是将其拆开来进行计算。首先:异或计算1xor1=0,0xor0=0,1xor0=1很容易可以得到一个结论,就是在某位上的时候,只有1才会影响到他的值,当1的个数为奇数时,二进制那个位置上才会计算出1这个数字。因为此题是处理一个区间的问题,为了减少时间复杂度,我们可以用到前缀和这个工具就是这样子for(int i=1;i<=n;i++){ sc原创 2020-06-04 12:08:55 · 177 阅读 · 0 评论 -
NC19814最短路 LCA+bfs暴力
700ms飘过你可能不相信我先加了inline又加了快读。。。然后TLE->AC题意:第一行两个整数n和m,表示图的点数和边数(1≤ n≤ 100000, 1≤ m≤ n+100)。接下来m行每行两个整数a和b,表示一条边(1≤ a, b≤ n)。保证没有自环和重边。保证图连通。接下来一个整数q表示询问的个数(1≤ q≤ 100000)。接下来q行每行两个整数a和b表示询问a和b之间的最短路。题解:这不是LCA的板子题吗?等等,m<n+100,那好像不是一棵树了???是一.原创 2020-07-10 23:31:42 · 250 阅读 · 0 评论 -
华华和月月种树(牛客)
题意:华华看书了解到,一起玩养成类的游戏有助于两人培养感情。所以他决定和月月一起种一棵树。因为华华现在也是信息学高手了,所以他们种的树是信息学意义下的。华华和月月一起维护了一棵动态有根树,每个点有一个权值。刚开存档的时候,树上只有 0 号节点,权值为 0 。接下来有两种操作:操作 1:输入格式1 i,表示月月氪金使节点 i 长出了一个新的儿子节点,权值为0,编号为当前最大编号 +1(也可以理解为,当前是第几个操作 1,新节点的编号就是多少)。操作 2:输入格式 2 i a表示华华上线做任务使节点 i原创 2020-08-20 12:13:21 · 241 阅读 · 0 评论 -
牛客-装货物
题意:有 n 件货物, 第 i 件重 wiw_iwi 吨,另有 x 个集装箱,每个集装箱可以装重量不超过 W 吨的货物。货物不能分拆,请判断这 x 个集装箱能否装下所有货物。题解:这题一开始TLE,无奈,看了dalao们的解法,感觉这题主要还是考这一个剪枝吧,在考虑要把这个货物装到哪个箱子的时候,对于每一个货物,我们单独给他开一个空箱子,如果是多个的话,那并没有什么意义,会有特别多的重复情况,(放到哪个空箱子不是放)。for(int i=1;i<=min(steps,x);i++)代码原创 2020-08-18 15:47:40 · 1038 阅读 · 2 评论 -
矩阵消除游戏--牛客练习赛58
题意:牛妹在玩一个名为矩阵消除的游戏,矩阵的大小是n行m列,第i行第j列的单元格的权值为ai,j,a_{i,j},ai,j,,牛妹可以进行k个回合的游戏,在每个回合,牛妹可以选择一行或者选择一列,然后将这一行或者这一列的所有单元格中的权值变为0,同时牛妹的分数会加上这一行或者这一列中的所有单元格的权值的和。牛妹想最大化她的得分,球球你帮帮她吧!题解:如果这个题想直接暴力对所有行和列进行dfs的话,这样应该是会超时的,试了好几种方法,都T了,很遗憾。这题无论是dfs或者是二进制枚举,核心都是,枚举原创 2020-08-12 21:02:33 · 275 阅读 · 0 评论 -
牛客 - 双栈排序 niop
菜鸡还没学二分图。。。题意:给定一个序列,问能否双栈排序,如果能,请输出字典序最小的方案;操作a:如果输入序列不为空,将第一个元素压入栈S1操作b:如果栈S1不为空,将S1栈顶元素弹出至输出序列操作c:如果输入序列不为空,将第一个元素压入栈S2操作d:如果栈S2不为空,将S2栈顶元素弹出至输出序列题解:题目让以字典序最小的顺序输出,那么这样的话我们操作顺序直接以abcd来操作即可。对于一个数,我们应该把他放进栈a呢,还是放进栈b呢。因为字典序最小,所以我们如果能放进栈a实现这些操作,..原创 2020-08-06 22:11:15 · 217 阅读 · 0 评论 -
牛客--追债之旅 两种解法
文章目录第一种第二种:一共两种解法,所以即便你不会最短路,也可以做,甚至爆搜+剪枝的时间和空间消耗小于最短路做法。第一种题意:小明现在要追讨一笔债务,已知有n座城市,每个城市都有编号,城市与城市之间存在道路相连(每条道路都是双向的),经过任意一条道路需要支付费用。小明一开始位于编号为1的城市,欠债人位于编号为n的城市。小明每次从一个城市到达另一个城市需要耗时1天,而欠债人每天都会挥霍一定的钱,等到第k天后(即第k+1天)他就会离开城n并再也找不到了。小明必须要在他离开前抓到他(最开始为第0天),同时原创 2020-08-06 13:44:39 · 367 阅读 · 0 评论 -
牛客网练习赛7--购物 动态规划
题意:在遥远的东方,有一家糖果专卖店。这家糖果店将会在每天出售一些糖果,它每天都会生产出m个糖果,第i天的第j个糖果价格为C[i][j]元。现在的你想要在接下来的n天去糖果店进行选购,你每天可以买多个糖果,也可以选择不买糖果,但是最多买m个。(因为最多只生产m个)买来糖果以后,你可以选择吃掉糖果或者留着之后再吃。糖果不会过期,你需要保证这n天中每天你都能吃到至少一个糖果。这家店的老板看你经常去光顾这家店,感到非常生气。(因为他不能好好睡觉了)于是他会额外的要求你支付点钱。具体来说,你在某一天购买了原创 2020-08-03 17:54:01 · 702 阅读 · 0 评论 -
牛客练习赛32 -- Xor Path
题解:首先我们知道,一个点肯定不可能只出现一次的,他会出现好多次,但是根据二进制a xor a =0a xor a xor a =a所以我们发现当某个点出现的次数为偶数次时,这个点相当于没有出现过,奇数次时,答案异或一下这个点的权值即可。没有见过这种题的建议先看求树上任意两点之间距离之和的平均值这个典型题下面我们借用巨雨的分类方法做这个题1.x作为一条路径的顶点时,它会被经过n-1次对应代码:int ans=n-1;2.从x的子树内连到子树外,这样的话,子树每一个点都会与树外面每一个原创 2020-07-31 23:11:39 · 149 阅读 · 0 评论 -
[NC19798]区间权值
题解:把这个双重求和公式按照最简单的方法展开,可以将其n=3,4,5都展开,观察其式子规律n=5时,(a1 + a2 + a3 + a4 + a5) * w1+(a1 + **2 *** a2 + 2 * a3 + 2 * a4 + a5) * w2+(a1 + 2 * a2 + 3 * a3 + **2 *** a4 + a5) * w3+(a1 + 2 * a2 + 2 * a3 + 2 * a4 + a5) * w4+(a1 + a2 + a3 + a4 + a5) * w5下面为n=原创 2020-07-23 16:38:13 · 281 阅读 · 0 评论 -
Rinne Loves Data Structure
这个题用一波FHQ Treap做,不用STL了,正好检验一波手搓的无旋Treap怎么样。题解:这个题插入操作跟普通的二叉树是相同的,让你找一个数的前序和后继,如果我们用普通的BST,势必会T到天上去,一条链足以卡飞BST,这里用了一波FHQ Treap无旋平衡树来写这个题。很感谢这个题的输入的数据范围是大于1小于某个数(只知道小于1e6)(参考了zzugzx大佬的想法),所以就可以免去再做一写别的操作了。我们设置一个最大值一个最小值,目的是为了保证他有前驱和后继,因为你插入一个值,会有4种情况。1.原创 2020-07-23 16:36:22 · 195 阅读 · 0 评论 -
选点(dfs序+LIS)
题意:有一棵n个节点的二叉树,1为根节点,每个节点有一个值wi。现在要选出尽量多的点。对于任意一棵子树,都要满足:如果选了根节点的话,在这棵子树内选的其他的点都要比根节点的值大;如果在左子树选了一个点,在右子树中选的其他点要比它小。题解:要满足根节点的值最小,左子树的值大于右子树的值。这样的话我们可以先按照根->右->左的顺序来求出一个dfs序然后求一下LIS即可。/*Keep on going Never give up*///#pragma GCC optimize(3原创 2020-11-17 18:13:42 · 220 阅读 · 0 评论 -
小A与欧拉路(牛客-树的直径)
题解:欧拉路:从图中任意一个点开始到图中任意一个点结束的路径,并且图中每条边只通过恰好一次问你走完这树上所有的点最短路径是什么。因为树是没有环的,所以你走到叶子结点的时候需要往回走,也就是再走一遍刚刚走过的路。所以我们确定一条主道路,遇到分支就走一遍(主道路是不需要走两遍的)。因为所有长度都是已知的,所以最短路径也就是尽量让这一条主路变长。想一想最长的一条主路,那不就是树的直径吗。用所有路径长度*2-树的直径即为答案。两次dfs求树的直径/*Keep on going Never give原创 2020-11-10 12:25:44 · 147 阅读 · 0 评论 -
奶牛异或(01字典树)
题意:让你找一个连续区间异或和最大,如果有相同的,则输出断点较小的。题解:01字典树,利用前缀和的思想进行求解,我们在插入前缀的同时,也在不断的更新最大值。我们查询当前 二进制字符串与已经插入的 二进制字符串中的哪一个异或和最大?找到最大的那个,读取这个前缀和是到谁结束的,来判断是否要更新/*Keep on going Never give up*///#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>原创 2020-10-30 00:31:51 · 226 阅读 · 0 评论