03 2020 档案
摘要:题意:给出一个n*m的矩阵,每个格子有一定的能量(小于k) 有一人有两个瓶子,瓶子可以吸收能量,得出的结果mod(k+1) 可以从任意位置开始,但只能向下或者向右走,走偶数步数即可结束 求两个瓶子能量相等的方案数 思路:四维DP【i】【j】【h】【0/1】 表示在(i,j)这个位置时存储了h能量(两
阅读全文
摘要:题意:给出一棵树,每个节点有权值,让我们确定在哪个地方安装医院,距离最短? 何为距离?你猜 思路:这道题给出的n的范围只有100,所以很明显我们可以直接暴力n^2搜答案,这可以过 代码如下 1 #include<bits/stdc++.h> 2 using namespace std; 3 cons
阅读全文
摘要:最简单的dp 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=2e3+10; 4 const int inf=0x3f3f3f3f; 5 int dp[maxn]; 6 int a[maxn][maxn]; 7 in
阅读全文
摘要:题意:你猜 思路:一个点可选可不选,那么假如选,下属就只有一种情况 假如不选,下属就有两种情况,一种选,一种不选 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=6e3+10; 4 int a[maxn]; 5 in
阅读全文
摘要:题意:给出我们需要学的科目数,给出m种不同的科目,n<=m 即可以学的科目数小于我们需要学的科目数,也就是说我们需要多次学同一门科目 计算学习某门科目的时间为: 求如何学习才能让时间最低; 思路:给出dp【i】【j】表示选择前i种科目学习j次所花最少时间 1 #include<bits/stdc++
阅读全文
摘要:题意:给出一些运算符,有优先级区别;我们可以往运算符两边填数字1或者0 让我们找出最后表达式为0的方案数 思路:如果这道题没有运算优先级,就是层层递推 但现在有了优先级,导致我们无法直接递推计算; 我们需要运用一个栈,来处理优先级的问题; 首先我们先定义两个东西 第一个dp【】【】 这就是用来存储方
阅读全文
摘要:题意:给出n个木板,让我们用掉所有的模板,使其凑成一个三角形,求出最大面积 凑不出三角形输出-1 思路:每一条边的长度不超过40,最多40条边,于是周长最大值为1600; 那么单边长度不超过800 总共三条边,第三条边可以通过周长减其余两条边得出 于是我们可以通过枚举其中两条边暴力找出所有方案,再择
阅读全文
摘要:(本题解大体思路是对的,但是有差错,因为求得是差值,所以可以装爆,即出现体积50,但是我们装到60的情况,所以要多加这种情况的考虑才能ac) 题意:给出n对多米诺骨牌,让我们求出其差值最小时,翻转次数最小,输出最小次数; 思路:我们可以把最大的都放一遍,剩下一边都是最小的,然后就能得出最大的一个差值
阅读全文
摘要:题意:给出n本书,每本书有不同页数,给出m个人看这m本书 答案为这m个人看的页数最多的权值,要求求出最小的权值 思路: 第一维枚举人数 第二维枚举长度 然后找出最优解即可 但是:这道题可能有多个解,他要求输出前面的人看书比较少的解 所以 我一开始还开了第三维去表示得出的答案位置,这样子得出来的答案并
阅读全文
摘要:题意:给出尼克工作时间长度,给出k个任务 给出每个任务开始的时间,给出每个任务持续的时间,同一时间只能接一个任务(任意选择),在此时间内的其他任务由其他人做即可 求如何选择任务能让偷懒时间最长 思路:倒着推; 定义dp【i】,表示从i时刻到结束所能偷懒的最大时间 于是,从n~1进行枚举 假如遇到这个
阅读全文
摘要:题意:给出两个字符串,可以在两个字符串加任意空格,使其最后形成长度相等的字符串 空格与字符匹配贡献为k 字符与字符匹配为两者相减的绝对值 问,如何放空格能使答案最大 思路:题目中还出现了空格与空格匹配贡献为0的情况,很显然dp起来是不会出现这种情况的 dp【i】【j】表示已经匹配了i个a字符,j个b
阅读全文
摘要:题意:给出n个节点的树,根节点是电视台,给出m个用户,用户的编号为(n-m+1,n) 接下来给出n-m+1行,第一行就是以编号为1为向其他点连接,第二行就是以编号为2向其他点连接,以此类推 然后在处理某一行的时候,第一个数字表示有多少个儿子 然后接下来每次输入两个数,第一个为编号,第二个为边权值 最
阅读全文
摘要:题意:给出一颗n个节点的树,这道题数据都是以1为根; 给出一个p,表示留下p个节点,要我们求出留下p个节点删除边的数量最少是多少 思路:树形dp dp【i】【j】 表示i这颗子树保留j个节点所需要删除边的数量最少的权值 那么dp【i】【1】就是把他所有儿子全部去掉,那么就是他son【】的个数 求出来
阅读全文
摘要:题意:给出一颗树形图,每一条边都有一定权值,叶子节点里面有若干副画 现在有一个小偷要进去偷画,每一条边的权值就是走的时间,偷画需要5秒 给出警察到来时间,问最多能偷多少副画 思路:这是一道树形dp 我们遍历每个节点,从根节点dfs到叶子节点,那么如何进行状态转移呢 我们用一个dp【i】【j】表示在i
阅读全文
摘要:题意:给出n种菜,m块钱 ,n 种菜有不同的价格,问如何组合才能让钱全部花光(要刚好花光) 问:求花光的方案数! 思路:给出了钱跟菜品,我们可以通过枚举从每一个已经剩下的钱的状态继续枚举 比如一开始我们剩下的钱的状态只有一个m 在枚举第一个菜品的时候,我们可以选择买或者不买,就会多出一种状态,(m-
阅读全文
摘要:题意:给出一只困在井里的动物,给出这只动物目前能够存活时间为10小时 给出n个垃圾(竟然吃辣鸡?)每个辣鸡有投放的时间点,吃这个辣鸡能获得的体力,堆放这个辣鸡能获得的高度 问:假如能逃出这个井,最少花多长时间? 假如不能逃出,最长存活时间为? 思路:首先,我们要将垃圾投放的时间进行从小到大排序 那么
阅读全文
摘要:题意:给出两个序列,让我们进行配对,配对的时候,我们可以在其中加空数;两个序列都可以 题意给出每种配对的权值,让我们求如何配对权值最大 思路:我们先预处理出配对的权值情况,再预处理出当两个序列各自没开始匹配,而另外一个序列匹配的多少个空数的情况 为何?因为我们从1开始,需要以0这个情况为基准 然后,
阅读全文
摘要:题意:给出一个图,图中有n个城市m条有向边; 让我们求出以某一城市为终点的情况下,能够走的城市的数量尽量多 求出以每一个城市为终点的时候的答案 思路:dp+拓扑排序。 首先题意没有说明图是无环图,假如此题有环的话,是无法解的(个人见解,对错还待考证) 于是,我们可以运用拓扑排序的性质,先将入度为0的
阅读全文
摘要:题意:给出一串字符串,只包含j z 这两种小写字母,可以进行k次交换,使其出现最多的jz (教主) 思路: 我们用一个dp【i】【j】【k】【1/0】 来进行状态转移 那么如何转移呢?因为是要执行交换,所以很难操作,我们就直接记录交换了几次 如:j 表示有j个j换成了z k表示有k个z换成了j 最后
阅读全文
摘要:题意:给出三种树,高度分别为10,20,30 要求种n颗树,n颗树要满足当前这一颗大于相邻两颗或者小于相邻两个 (环状种植) 每一颗树种这三种高度的观赏价值不同 问,如何种植才最高 思路:这是一道情况多一点的简单dp; 一开始的时候像dfs方向思考,但是因为码力不足,一时打不出来,所以改往dp方向
阅读全文
摘要:题意:给出n个步骤,m个小组,每个步骤有完成所需时间 求最少的完成时间 步骤有第一个步骤开始逐一计算 每一步可以有本小组计算,或者本小组的下一小组来计算(第n个小组的下一个小组时第一个小组) 思路:数字三角形做法 1 #include<bits/stdc++.h> 2 using namespace
阅读全文
摘要:题意:给出一棵树,每个节点有一个权值,问如何剪枝能让剩下的这一颗树的权值最大 思路:建完树后,随便确立一个点为根,然后从这个点开始遍历 在遍历到每个节点的时候,我们更新答案权值 在对某一个节点进行操作的时候,假如他的子节点的权值小于0,则减去 即:只需要加上大于0的子节点 1 #include<bi
阅读全文
摘要:题意:找出值最大的一段, 这是dp?? 思路:你猜 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=2e5+10; 4 int a[maxn]; 5 int dp[maxn]; 6 int main() 7 { 8
阅读全文
摘要:题意:给出n个数,求最长下降子序列,求不同最长下降子序列的方案数 相同方案的定义为:长度相同并且有元素相同 比如这样一个序列 9 7 6 5 5 (9 7 6 5) (9 7 6 5) 这两个5的下标分别为4 5 ,但是这样的序列是相同的 思路:首先我们求出最长下降子长度 在求出前i个数的最长下降子
阅读全文
摘要:题意:给出n本书 每本书有高度和宽度,题意让我们先讲高度排序(保证每一本书的高度不同,从大从小排对答案不影响) 相邻的书的宽度差的绝对值为贡献,让我们去掉其中k本书,求最小贡献 思路:去掉书的想法很难实现,我们逆向思维,在其中增加n-k本书 那我们设定一个dp【i】【j】表示第i本书前面的所有书(包
阅读全文
摘要:题意:给出自身能量值,给出逃离所需距离,给出逃离限制时间 给出条件:每秒17米或者消耗10点能量闪现60米 也可以选择原地不动回复4点能量值 问:假如能逃离,输出yes和最短逃离时间 假如不能逃离,输出最长逃离距离; 思路:很明显,再距离逃离点还很远的时候,我们一直用闪现就行; 因为即使算上能量消耗
阅读全文
摘要:题意:给出n个人的身高,让我们删除一些人,使得剩下的人的身高呈现“V(倒过来)” 思路:对每个位置分别枚举,每次枚举走两边最长上升子序列 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e2+10; 4 int a
阅读全文
摘要:题意:给出n种不同的花,给出最大的摆放数量m,给出不同的花的数量 问:不同摆放的方案数; 思路:dp【i】【j】表示放置前i种不同的花,在摆放j数量时的方案数 那么我们就是从前1种到前n种依次遍历 在遍历的时候再来一维 表示在摆放前i种花时,摆放j数量的方案数的枚举更新 第三维:枚举的时候只能枚举当
阅读全文
摘要:题意:给出一个限定金额n,给出m个物品,m个物品可能有依赖关系 但只能有一层:一个物品,要么是主件,要么是附件 每个物品有价格和重要值,每个物品的最终贡献是价格*重要值 求在n金额的限定下能够得出的最大贡献是多少 好久没做,这好像是分组背包?? 忘记了。 思路:将有依赖关系的放在一组,然后遍历像01
阅读全文
摘要:题意:给出n个珠子,围成一圈,相邻位置相碰可以产生能量 每一个珠子都有两个能量值,可以定义为前跟后 一开始,前为其本身,后为其本身+1的位置的能量 相邻位置碰撞产生的能量为:前*后*前 碰撞后这两颗珠子融为一体,前为前者的前,后为后者的后 问:可以产生的最大能量为? 思路:很明显,不同的碰撞方式产生
阅读全文
摘要:题意:给出能够使用的金额上线,给出m个物品; 给出m个物品的价值与重要度; 给出价值计算方法:重要度*价值 求在不超过使用金额的情况下,购买物品得到的权值最高; 思路:很明显的01背包,枚举即可; 1 #include<bits/stdc++.h> 2 using namespace std; 3
阅读全文
摘要:题意:给出n个人,要进行传球,球一开始在第一个人手中,可以传m次 问,经过m次传球回到1这个位置的方案数; 思路:本题,我们可以用dp的方式来解; 题目给出n m的数据范围在30这里, 那么如何枚举能过满足dp的性质呢? 我们可以枚举传球次数,第2次传球不会影响第一次,第三次传球不会影响第二次; 于
阅读全文
摘要:题意:给出桥的长度,给出石头个数;给出所有石头的位置 背景:有一只不喜欢跳石头的青蛙想要跳尽量少的石头跳到桥对岸 (注:是尽量不跳石头,而不是一定得跳石头) 一开始做这道题的时候,就是以为一定得跳石头才能过,然后以为题意出错(因为数据范围不允许这样跳) 后来才知道原来是什么地方都可以跳 思路:题意范
阅读全文
摘要:题意:给出n个从1~n的数字(唯一不重复) 给出m个区间,问区间内最少有多少个不同的小组 小组:这个区间内的数是连续的,比如:1 3 2 思路:可以考虑线段树跟莫队 我们这里用莫队来解 这里用到一个vis数组来标记是否出现过 增加某数字,就看看这个数字左右两边的数是否存在,再另作判断; 删除某数字,
阅读全文
摘要:题意:给出一个n个点,m条边的图,让我们求出最多加几条边,能让其是一个不强连通的图 思路:逆向思维,一个n个点的有向图,有n*(n-1)条边, 1.我们先n*(n-1)-m 得到的答案便是在原有图的基础上将其填成完全图的总边数 2.然后通过缩点求出缩点后的图 3.找出入度或出度为1的最少点的一个缩点
阅读全文
摘要:摘自:https://blog.csdn.net/qq_34374664/article/details/77488976 (感谢) tarjan算法,之所以用DFS就是因为它将每一个强连通分量作为搜索树上的一个子树。而这个图,就是一个完整的搜索树。为了使这颗搜索树在遇到强连通分量的节点的时候能顺利
阅读全文
摘要:题意:给出一段序列,让我们找出最多的是回文串的子序列; 思路:区间DP; 我们先初始化长度为1时的答案 ,然后再从长度为2开始逐一枚举; 当我们求dp【i】【j】区间的答案时, 1.我们可以dp【i+1】【j】+dp【i】【j-1】-dp【i+1】【j-1】,这样就能处理出原本已经得到的答案; 2.
阅读全文
摘要:https://www.luogu.com.cn/problem/P1043 题意:给出一个圆形区间,区间内有n个数,问分成几段能够让其结果最大; 思路:很明显的区间dp; 首先,因为是圆形区间,所以我们在这n个数后面再补n个数 然后,我们从区间长度由小枚举到大,将分割个数由小枚举到大;最后再枚举一
阅读全文
摘要:链接:https://www.luogu.com.cn/problem/P1040 题意:题目给出了中序遍历(左根右)为1~n的序列,要我们构造出一颗树,满足最后的结果最大 思路:根据中序遍历的性质,在一个连续的区间(L,R)里,哪一个数当这段区间的根都是可能的 于是,我们可以采用区间DP的方法,从
阅读全文
摘要:题意:给出n位数,以及一个k,让我们将这n位数分成k+1位 要求这k+1位相乘乘积最大; 思路:这是一道dp+高精度的题; 1.我们首先来看看dp部分 dp【i】【j】表示将前i位分为j部分的最大值; 于是遍历的时候,我们就 k从小到打遍历 i从小到大遍历 分割位置从小到大遍历 (注:分割块数不能大
阅读全文
摘要:思路:可以用递归写法或者dp写法,但这道题会爆精度,__int128能过 先给出递归代码 1 #include<bits/stdc++.h> 2 #define in(x) x=read() 3 #define MAXN 81 4 #define k m-(R-L) 5 #define bll __
阅读全文
摘要:题意:给出一个n*n的矩阵,然后每一个位置有一定权值; 要求从(1,1)走两条路径到(n,n)使最后结果最大(走的时候带走格内权值) 思路:题目给出的数据范围极度小,n<10; 所以我们可以开四维DP dp【i】【j】【k】【l】 表示第一个人处于(i,j)位置,第二人处于(k,l)位置时候的最大值
阅读全文
摘要:题意:给出一个n+1*m+1的矩阵,让我们找出从(0,0走到(n,m)的方案数 只能往下或者往右走; 并且马的位置以及马所能走的位置也不能走(马走日) 思路:最简单的DP题; 我们先求出不能走的几个点,用vis数组标记,然后再以此遍历即可; 1 #include<bits/stdc++.h> 2 u
阅读全文
摘要:https://www.luogu.com.cn/problem/P1436 题意:给出一个8*8的棋盘,让我们将其分割成n块,每一块的值为(块中所有数的和)^2 求出在最优的分割方式下的最小值; 思路:这是一个分割问题,但直接考虑分割有点难,所以我们逆向考虑,将其想为填补问题,也就是说,将n块矩阵
阅读全文
摘要:题意:给出p串字符(每串都是20个字母) 给出k ,k表示总共可以分成几部分; 给出词典,这个词典最多包含6个单词, 求如何分,能够得到最多单词; 注:每份中包含的单词可以部分重叠。当选用一个单词之后,其第一个字母不能再用 思路:很明显,这道题应该用dp解法; 首先,我们先将p串字符连成一串 我们需
阅读全文
摘要:题意: 求出删除某节点之后,分出来的树中最多节点的树的节点数最少,求出此节点; 思路:我们求出此节点的各个子树有多少个节点,分别记录,并计算总和(d数组) 然后在其遍历完之后,再最后再计算一下他父亲节点以及父亲节点所连接的其他节点的这一颗树的节点数; 所以,要删除此节点,就要记录一下删除之后出现的几
阅读全文
摘要:树形DP 题意:求最少需要多少个卫士,能够保卫家园 ,相邻位置只需要一个卫士; 这道题 这道题就只有dp公式这一难点 代码直接贴,(没提交过的代码) 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=2e3+10; 4
阅读全文
摘要:本题题意: 先考虑单纯用线段树来解的做法 复杂度O(2*log(n)*n) 单纯用线段树来解的话,需要用到两颗线段树; 第一颗:处理某操作需要执行多少次; 第二课:将第一颗得到的操作执行; 那么对于第一颗树: 当op==1的时候,就直接在这个位置+1; 当op==2的时候,就查询这个位置已经被操作累
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P3258 题意:给出一个n 再给出走这n个点的顺序,再给出这n个点的连接方式(n-1条边,形成树) 思路:我们考虑lca+树上差分,首先介绍一下树上差分; 树上差分:想法跟普通的差不多,举个例子:假如我们要在某节点以及其到
阅读全文
摘要:https://www.cnblogs.com/lbssxz/p/11114819.html 1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 const int maxn=1e5+10; 5 int n,m,s,num
阅读全文
摘要:摘自此博客:https://blog.csdn.net/myRealization/article/details/104594255
阅读全文
摘要:时间限制: 1Sec 内存限制: 128MB 提交: 231 解决: 69题目描述小朋友排成一排,老师给他们分苹果。小朋友从左到右标号1…N。有M个老师,每次第i个老师会给第Li个到第Ri个,一共Ri-Li+1个小朋友每人发Ci个苹果。最后老师想知道每个小朋友有多少苹果。 数据规模和约定100%的数
阅读全文
摘要:链接:https://ac.nowcoder.com/acm/contest/3979/I来源:牛客网 题目描述 思路:题目乍一看让我一开始想往权值线段树加主席树的方向思考,可是又有修改操作,导致我无从下手; 然后看了别人博客,大多都是采用分块的方式 在本代码里,每一块的大小为sqrt(n); 我们
阅读全文
摘要:链接:https://ac.nowcoder.com/acm/contest/3979/F来源:牛客网题意:给出n个数的数列和m个数的数列; 两两相乘,求第k大的数; 思路:将其中一个序列排序,然后进行二分 在本代码里我们将b数组进行排序,然后根据a数组计算数量去判断check进行二分 那么如何二分
阅读全文
摘要:题意:给出n个数(1~n) 然后让我们通过给出另一个数字y来猜给出的k是否就是最后答案; 判定为最后答案的条件就是:与范围内其他任何数字gcd之后,得出来的数字不等于gcd(y,k); 也就是说,要gcd(y,k)唯一; 思路:我们先来分析两种情况 1. 当y<k时,1<=gcd(k,y)<=y,那
阅读全文
摘要:题意:链接:https://ac.nowcoder.com/acm/contest/4114/C来源:牛客网火山哥手里有一个 n个点 m条边的无向图。 现在,火山哥请你把无向图的每条边确定一个方向,使之成为一个DAG,并且最小化最长路的长度。 这里一条路径的长度指的是经过边的数量。 思路:根据狄尔沃
阅读全文
摘要:题意:找一个点,使得他到其他点的最长距离最小,边权有正有负。 如果我们将这颗树化为一个有根树,那么一个点到其他点的最远距离就是:MAX(他到子树某个点的最远距离,他经过父亲节点到其他的点的最远距离)。第一部分可以直接一次dfs得到,对于第二部分来说可以再次dfs维护数组F[u],表示u经过父节点到其
阅读全文
摘要:https://ac.nowcoder.com/acm/contest/4114/G 题意: 一颗n个点的无根带权树,有k个特殊点,可以走到任一个点停止,现在要让你求对于每个点i作为起始点,走遍所有特殊点所花的最小路径和,n<=5e5 n<=5e5n<=5e5 思路: 一颗n个点的无根带权树,有k个
阅读全文
摘要:题意:给出一个n*n的矩阵,然后对于矩阵的每一个位置,给出该位置的终点位置,也就是说假如在(1,1)这个位置 ,如果数据是(3,2)那么他的终点位置就是(3,2),然后还有一些停留在原地的点,比如在(2,2)这个位置,数据为(2,2),定为“X” 就是原地不动。要求我们构造出一个上下左右移动满足以上
阅读全文
摘要:https://codeforces.com/contest/1316/problem/B 题意:给出一个序列,给出操作规则:让我们确定一个k值,然后翻转i,i+k-1,遍历完整个数组; 找出操作结束后字典序最小的序列的k值; 思路:在几遍演算之后可以发现,某一k值下的翻转,都是分成两部分序列,后面
阅读全文
摘要:链接:https://codeforces.com/contest/1316/problem/C 题意:给出两个多项式,得出两式相乘的式子之后,寻找某系数不能够整除p,假如不能整除,则打印此系数对应的未知数的次方 题目保证肯定存在 思路:我们将这两个多项式分别用a[] b[] 数组来表示; 那么:因
阅读全文
摘要:链接:https://codeforces.com/contest/1305/problem/E 题意:构造一个n个数的,恰好有m个三元组满足a[i]+a[j]=a[k]的严格升序数组; 思路:可知,当a[i]=i,的时候,能得出的三元组最多; 这里我们补充一下,第k+1位是怎么得出来的; 由上图可
阅读全文
摘要:1 #include<bits/stdc++.h> 2 using namespace std; 3 priority_queue<int>q; //从大到小 4 priority_queue<int,vector<int>,greater<int> >Q; //从小到大 5 //结构体元素类型:
阅读全文
摘要:1 #include<bits/stdc++.h> 2 using namespace std; 3 set<int,greater<int> >S; //从大到小排 4 //set<int>S; 从小到大排 5 int main() 6 { 7 for(int i=1;i<=5;i++){ 8 i
阅读全文
摘要:https://codeforces.com/contest/1305/problem/D 题意:给出一棵n个节点的树,让我们确定哪一点为根; 我们可以询问任意选择其中两个节点,然后系统得出哪个节点为他们的lca 当已经知道答案后,就可以不再选择节点直接输出根节点,当还无法确定答案的时候,就继续询问
阅读全文
摘要:1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int F_q_q=0; 6 int Q_che[50]; 7 for(int i=1;i<=32;i++) 8 Q_che[i]=i; 9 int beatifu
阅读全文
摘要:1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxx = 6e5+10; 4 int trie[32*maxx][2],val[32*maxx],sum[32*maxx]; 5 int rt[maxx],s[maxx],t
阅读全文
摘要:题意:给出一颗n个节点的数,节点之间的边有权值,求任意两个节点之间的最大异或值 思路:我们将整个图走一遍dfs,求出节点1到其他所有节点的异或值,用数组dis来储存 然后接下来求任意两个节点之间的路径异或值,就是dis【x】^dis【y】 所以我们接下来就用每一个点来遍历一次图,枚举更新最大值即可
阅读全文
摘要:题意 给出n个数和m次询问,每次询问给出一个数x,问在n个数中哪个数与x异或值最大 思路:将给出的n个数放进0 1字典树,然后在询问的时候,倘若目前位为0,则去找相反的节点 1 #include <queue> 2 #include <vector> 3 #include <stdio.h> 4 #
阅读全文
摘要:题意:给出许多个字符串;然后接下来再给出询问: 每一个询问都是一个字符串,问以这个字符串为前缀的单词有多少个; 这是字典树典型例题; 我们将题意给出的字符串建字典树,在建的时候,在每个节点位置都sum【x】++; 询问的时候:用单词跑一遍字典树,在跑到最后一个单词的节点的时候,返回此节点的sum即可
阅读全文
摘要:https://codeforces.com/contest/940/problem/F 题意 给出n个数字,q个询问; 每次询问有两种类型,一种是询问区间,一种是单体修改; 询问区间是询问区间内最小的没用到的大于0的整数; 比如我有一串数字是 1 1 2 2 2 3 那么有两个1 三个2,一个3
阅读全文
摘要:https://codeforces.com/contest/1315/problem/D 题意:给出一个n,表示有n类书,然后接下来有两行,一行是某一类书的数量;一行是对应的书的整理时间; 要求:1.每一类书的数量都不同。 2.只有增加书的数量这一操作。 思路:对于这样一个序列,自然是整理时间长的
阅读全文