合集-洛谷刷题
摘要:题目链接:https://www.luogu.com.cn/problem/P1469#submit 题意:找奇数个筷子的长度 思路:异或运算(如果开map会MLE) 按位异或运算:每个位对比相同为0,不同为1 重要性质: x^x=0, x^0=x 所以我们可以直接算出所有数的异或和,即为答案 其他
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P3853 题意:给你一段长度,以及一些分割该长度的路标,允许加上k个路标让路标间距离变小,让你求两个路标之间最大的距离 思路: 二分答案,check时把注意力放在相邻的两个路标之间的距离看满不满足你二分出来的答案,如果不满
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1381 题意:分别给你两个字符串的序列t和序列s,要求你输出在序列s与序列t有多少个相同的字符串,以及相同字符串子串的最小长度 思路: 类似于最小覆盖子串问题 滑动窗口+简单哈希 通过map来存储,序列t中出现的字符串在
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1111 题意: 有n个村,给你m个信息,1个信息包含存在道路的两个村子以及通路的时间,让你求是否每个村子都能相连,若能相连输出通路最短时间 思路: 并查集+排序 在一个集合中的村子能够相互连通,所以就看本来并查集n个独立
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1069 题意: 共有m1^m2支试管,一开始有n种单个细胞,第i个细胞每秒能分裂出si个完全相同的细胞(细胞个数的变化:1->si->si*si->si*si*si->...,很重要) 现在求能让任意一种细胞能够被试管均
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P2758 题意: 给定两个字符串a,b。 有三种操作:删除,插入,替换 求a到b的最小编辑距离 思路: 设dp数组dp[i][j]表示字符串a:0i-1子串到字符串b:0j-1子串的编辑距离 如果a[i-1]=b[j-1]
阅读全文
摘要:题目链接: https://www.luogu.com.cn/problem/P1352 题意: 给定一棵职员树,父节点为子节点的直接上司,每个员工有其快乐值。 每个员工不会与其直接上司同时参加舞会 求该场舞会邀请人员的最大快乐值 思路: 树形dp 定义状态:dp[i][0]表示不选第i个人,邀请到
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1017 题意: 将一个数转化为负进制数 思路: 被除数=商*除数+余数 为了将余数化为正数:被除数=(商+1)*除数+(余数-商)(余数一定比商大) 其他按十进制转化来做就行 #include<bits/stdc++.h
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P4017 题意: 求有多少条最大食物链 思路: 记dp[i]是以第i种生物作为食物链末尾时,最大生物链的条数 所以通过拓补序,每次都转移,最后找到出度为0的点,累加dp即可 注意状态转移以及答案的累加都需要取模 #incl
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1077 题意: 有n种花,每种花最多摆ai个,总共需要摆m个,求摆花的方案数 思路: 记dp[i,j] 为 以i 作结尾 摆了 j 个花的方案数 dp[i,j] = dp[i,j] + dp[i-1,z] 其中z指的是前
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P3842 题意: 从上至下有n条线段,每条线段必须走完 求从( 1,1) - > (n,n) 最短路径长度 思路 : 可以认为每一行要把线段走完,那么一定会在其左右端点 因为多走不会使答案更优 记dp[i,0] ,dp[i
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P2285 题意: 略 思路: 记dp[i]为以i为开头时能打的鼹鼠数目 从后向前枚举 转移条件是后面-前面的时间大于等于二者曼哈顿距离 初始化都为1 #include<bits/stdc++.h> #define rep(
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1725 题意: 从0开始 ,每次可以跳到 i+l~ i+r 范围上,求跳到大于n后格子的最大val 思路: 线性dp,考虑dp[i]为以i开头时的最大val,那么答案就是dp[0] 转移:res=max(res,dp[p
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P4933 题意: 给定数组,每次可以任选数组中的元素消除,求能构成等差数列的方案数 思路: 记 dp[i,j] 为以i作结尾,公差为j的等差数列数量 枚举i之前的那些数k j=a[i]-a[k] dp[i,j] <-- d
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P3952 题意: 模拟,求循环时间复杂度 思路: 首先读入是最重要的, 共有l行,所以循环l次 由于输入格式,所以先输出opt,如果是F,那说明后面还有3个,变量用char存,后面俩个用string存就可以 发现题目给的整
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P2234 题意:略 思路: 可以用set二分来做,在线插入元素,对set进行lower_bound查找插入的元素 如果没找到说明插入的元素比之前的都大,直接abs(x-big) 如果找到,要看看两侧的哪个差值与插入的元素小
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1036 void dfs(int n,int k,int cnt,int i,int res) { if(cnt==k){ bool ok=true; for(int i=2;i*i<=res;i++){ if(res%
阅读全文
摘要:题目链接:https://www.luogu.com.cn/discuss?forum=P1106 题意: 给定一个长整数,删去其中k个数,使最终的数最小 思路: 发现从左至右,如果一个数大于后面相邻的那一个数,则贪心地想将这个数删掉会使答案更优 删除某个数可以用字符串函数 s.erase(i,1)
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P4551 题意: 给定义一颗带权树,求其中两个节点边权异或和最大值 思路: 结论是:树上两个节点i,j由于 x ^ x=0 的异或性质,所以其异或和为(根节点,i)路径异或和 xor (根节点,j)路径异或和 所以dfs求
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1379 题意: 求将初始状态转移至目标状态的最小步数(每次移动‘0’) 思路: 需要将每个状态记录在一个map表里,当出现新的状态时才将其加入,否则不加入(因为如果以前出现过,那么现在的状态肯定更劣) 将每个状态转化为字
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P4427 题意: 给定一颗树,m次询问,每次询问u-v之间每个节点的k次方之和 思路: 树上前缀和:res=ans[u][k]+ans[v][k]-ans[lca(u,v)][k]-ans[fa[lca(u,v)][0]]
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1196 题意: 两种操作:M i j 表示将i所在战舰组移动到j所在战舰组后面 C i j 查询i,j之间的战舰数量 思路: 带权并查集,分别开两个数组siz[i],dist[i]记录战舰组战舰数量和战舰到战舰头的距离
阅读全文
摘要:树的直径:树上最长的路径 即每个节点上 最长路径+次长路径 取max vector<int>e[maxn]; int ans; int dfs(int u,int fa){ int d1=0,d2=0; for(int v:e[u]){ if(v==fa)continue; int d=dfs(v,
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1314 题意: m个区间,规定一个值W,对于每个区间进行有条件约束的求和得到y,求最小的s-y绝对值 思路: 由于查询的区间和数组本身是分离的,所以不能排序数组,然后二分查找! 其实就是二分答案(发现mid和y单调性相关
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1896 题意: 在一个NXN的棋盘上,放k个国王,求方案数 规定国王会攻击其相邻的其他国王,我们不能让国王互相攻击 思路: 状态压缩DP 考察棋盘的每一行,发现其每一列都只有 放国王 和 不放国王 2个选项,因此规定1
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1621 题意: 对于区间[a,b]的所有数,如果拥有相同质因子且其大于等于p,那么为同一集合,求最后有多少个集合 思路: 并查集,先通过筛法求出大于等于p的质因数,再从1枚举到其乘积大于b时,将这些数全部merge到同一
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1525 题意: 每对罪犯间会发生Ci的事件,将所有罪犯分配到两个监狱使事件最大值最小 思路: 种类并查集:A的敌人是B,B的敌人是C,那么A,C就是朋友 扩展原始的并查集便是merge(a,b+n);merge(b,a+
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1955 题意: 给定一系列相等以及不等关系,判断是否能够成立 思路: 由于不等式没有传递性,即a不等于b,b不等于c,无法满足a不等于c 也无法满足a等于c 因此需要先计算相等关系,再判断不等关系是否成立 离散化时如果用
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P5076 题意: 实现一颗二叉搜索树 multiset multiset中的元素是有序的,且可重(不同于set) multiset<int>st; void solve(){ int q;cin>>q; st.insert
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1004 题意: 走两次nxn的方格并取数,求取数的最大值 思路: 四维dp!记f[i,j,x,y]为第一次走到i,j,第二次走到x,y的能获得的和的最大值 不难发现由四种状态转移过来 当i,j,x,y位置相等时,只能加一
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1091 题意: 找到最小出队人数使得队列中剩余的人高度呈严格凸形状 思路: 枚举以每个位置为结尾的最长上升子序列和最长下降子序列,取max int f1[105]; int f2[105]; void solve(){
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P2607 题意: 略 思路: 图为外向树,(n个节点,n个边) 对于每一个连通块,先找环(每个连通块都有一个环)然后断环成树,跑树形dp板子 vector<int>e[maxn]; int vis[maxn],w[maxn
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1229 题意: 给定一颗二叉树的前序遍历和后序遍历,由于无法确定中序遍历,求这颗二叉树有多少种画法? 二叉树的前序,中序,后序遍历: 前序遍历:先遍历根,再递归遍历左子树,再递归遍历右子树 中序遍历:先遍历左子树,再遍历
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P2709 题意: 给定一个序列,m次查询,每次查询要求返回区间 每个数的出现次数 的平方 之和 思路: 莫队,即将原序列分成n块sqrt(n)的块,再将查询按照l在块的编号为第一关键字,r为第二关键字进行排序 离线双指针进
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1494 题意: 求在区间[l,r]上取得两个相同颜色的袜子的概率 思路: 莫队,注意开longlong以及最后直接用最大公约数gcd约分 int n,m; int a[maxn]; int cnt[maxn]; stru
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1807 题意: 求1~n之间的最长路 思路: 将所有边权变为负边权,跑spfa最短路可得-最长距离 int n,m; struct edge{ int v,w; }; vector<edge>e[maxn]; int d
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P2822 题意: 对于0<=i<=n , 0<=j<=min(i,m)的组合数 求其中有多少个k的倍数 思路: 组合数递推公式:f[i][j]=f[i-1]j-1 由于后面的组合数非常大,所以需要取模k 利用二维前缀和,计
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1246 题意: a=1,b=2......,z=26,ab=27,ac=28 思路: DFS按顺序枚举所有的单词编码,存在哈希表中查询 dfs具体需要枚举单词长度,按照单词长度为关键字搜索 int cnt; map<st
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P2638 题意: n个存储区,每个存储区可以放任意个0或1。0最多有a个,1最多有b个,求方案数 思路: 发现这是每组允许为空的隔板法 即对于一个数字,如果放k个,要求分成n组,(k<n),那么需要先借来n个,分完组后还回
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P3131 题意: 求是7的倍数的最长的区间长度 思路: 对于两个数a,b: (a-b)(mod m) = 0 => a (mod m) = b (mod m) 所以对于所有%7后的前缀区间,假设左边l点%7后等于右边r点%
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P3017 题意: 给定一个矩阵,需要切成axb块,使每块的最小值尽量大。 思路: 显然二分最大化最小值 关键在于如何统计块数,即如何写check函数 不妨先按一行一行来切,在每一行中,当切出的块大于等于mid的时候,转而切
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1127 题意: 给定n个单词,后面单词的第一个字母与前面单词的最后一个字母相同,输出字典序最小的排列 思路: 经典欧拉路径问题 单词作为边,该单词的第一个字母和最后一个字母作为节点建图 1.建立并查集,判断图的连通性 2
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1347 题意: 对于n个变量A,B,C.. 给定m个类似A<B的关系,判断满足这些变量之间什么关系 1.是否出现逻辑矛盾,(A<B,B<C,C<A) 2.是否能够判断出所有变量之间的大小关系 思路: 拓补排序问题 对于每
阅读全文
摘要:题目链接:https://www.luogu.com.cn/record/214917040 题意: 给定一个矩阵,求F矩阵的最大面积 思路: 题目要求用O(N x M)的复杂度求解 因此思路是类似求解接水问题,利用单调栈优化复杂度 具体来说:设f[i][j]:从第i行第j列向上最大的F矩阵高度,对
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1714 题意: 在长度为n的数组中求区间窗口小于等于m的区间最大和 思路: 单调队列+前/后缀和优化 枚举区间右端点,然后对于最左端点与右端点之间进行后缀的单调队列即可 void solve(){ cin>>n>>m;
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P3143 题意: 在给定的数组上 找到两个 最大的 极差不大于k 的子序列。输出其长度之和 思路: 贪心地,先将数组排序,然后选择两个区间即可 通过滑动窗口选出以每个节点为左端点的最大窗口大小 后缀最大值优化查询 void
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1801 题意: 略 思路: 需要在一个变化(元素不断增加)的数组 快速查找第i小的元素 考虑使用对顶堆 即分别开一个大根堆和一个小根堆 如果要求第几大的元素即让小根堆元素相对大,大根堆元素相对小 如果要求第几小的元素即让
阅读全文
摘要:题目链接:https://www.luogu.com.cn/record/215601289 题意: 给定两个数列,规定S=(ai-bi)^2(1<=i<=n)求和 为了使S最小,求移动bi的最小次数(每次移动可交换相邻两个数) 思路: 首先发现S=ai2+bi2 - 2xaixbi 前两项无法改变
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P2161 题意: 若干个a操作和b操作 a操作:给定l,r,删除线段中与[l,r]有交集的区间,输出删除的区间个数,并且[l,r]进入线段 b操作:输出线段有多少个区间 思路: 看到题解写的STL写法,感到惊奇。 定义结构
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P2882 题意: 给定一个01序列,求如何将它若干段连续序列翻转后变为全1序列 输出翻转最小次数和翻转区间长度 思路: 发现当每个点只翻转一次是最优的 所以从左往右枚举翻转区间左端点 当然得先枚举区间长度 通过维护差分数组
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1854 题意: 给定f朵花,v个花瓶(v>=f) 每朵花在不同花瓶都有不同的权值 规定每朵花的相对次序不能改变 求将所有花都塞入花瓶时的最大权值和以及获得其的路径 思路: 记dp[i][j]:第i朵花塞入第j个瓶子时的最
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P2340 题意: 有n头牛,每头牛有情商和智商,要求在这n头牛选择一些牛使 智商总和大于等于0 且 情商总和大于等于0,求满足条件的 情商+智商和最大值 思路: 01背包 记f[j]:情商为j时的智商最大值。那么我们只需要
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P4145 题意: 操作1:对一段区间的数进行开根号处理 操纵2:对一段区间进行求和 思路: 线段树维护 注意到对于1e18的数,不断进行开根号: 1e18->1e9->1e5->1e3->1e2->10->1->1->1.
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1637 题意: 给定数组,求i<j<k且a[i]<a[j]<a[k]的三元组数量 思路: 不妨枚举a[j] 这样我们只需要知道 它前面的数中 有多少个小于它的 它后面的数 有多少个大于它的 可以通过两个树状数组维护 将树
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P4310 题意: 给定一个数组a,求最长的子序列b的长度,满足条件b[i-1]&b[i]!=0 思路: 线性dp 记f[i]为当前 二进制第i位 达成的最长子序列长度 枚举每一个数,那么站在这个数的角度上看,只要这个数的二
阅读全文
摘要:典题: 题目链接:https://www.luogu.com.cn/problem/P2986 题意: 给定一棵树(有边权且有点权),选取一个节点作为根节点,使得 其他节点到根节点的距离 x 点权 之和最小 思路: 换根dp,从根节点为1开始进行状态转移 观察可得,根节点每往相邻子节点移动一格,相邻
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P3398 题意: 给定两个起点以及两个终点构成的两条树上路径,询问是否相交 思路: 结论:当其中深度较大的起点,终点的lca,和另外一条路径上的起点或终点lca为它自己时,两条路径相交 注意倍增法求lca时,根节点的父亲是
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P4092 题意: 在线查询,1.节点打上标记 2.查询给定节点打上标记的最近祖先 思路: 节点和其祖先一定在一条链上,所以转化为树链剖分+线段树的点修改和查询问题 将打标记视为+1,那么如果一条链的sum不为0,节点祖先一
阅读全文
摘要:题目链接 思路: 每个节点额外维护的信息为,区间前缀最长01交替区间,区间后缀最长01交替区间,区间的最长01交替区间 由于单点修改,不需要维护懒标记 也就不需要pushdown操作 考虑pushup 当左儿子右端点的值和右儿子左端点的值不同时,显然可以连接起来 某个节点的最长前缀01区间:可以由左
阅读全文
摘要:P5522 [yLOI2019] 棠梨煎雪 题意: 给定m个字符串,由0,1,?构成,每次询问[l,r]中有多少种字符串S,能使得区间所有字符串均可以通过改变?来得到 以及单点修改字符串操作 思路: 显然当区间字符串在相同位置同时出现0,1是无解的 如果有位置是0或1,一定把?替换成0或1 剩下来的
阅读全文
摘要:int n,m; vector<pii>e[M]; int c[M]; int f[3005][3005]; void init(){ rep(i,0,3000) rep(j,0,3000) f[i][j]=-inf; } int dfs(int u){ if(u>n-m){ f[u][1]=c[u
阅读全文
摘要:int n,q; int tot; #define ls ch[rt][0] #define rs ch[rt][1] #define vl ch[vs][0] #define vr ch[vs][1] int rt[M]; int ch[M<<5][2]; int val[M<<5]; int a
阅读全文
摘要:int jc[M]; int f[M]; int ksm(int a,int b){ int res=1; while(b){ if(b&1)res=res*a%mod; a=a*a%mod; b>>=1; }return res%mod; } int c(int a,int b){ return
阅读全文

浙公网安备 33010602011771号