C++
文章平均质量分 60
disPlayLzy_
梦在前方,路在脚下
展开
-
洛谷 P2440 木材加工___二分
段,在该前提下,使得单段长度。不合法,因为切不出来。原创 2023-01-01 15:14:52 · 711 阅读 · 0 评论 -
Luogu P1858 多人背包___k优解01背包dp
求01背包前k优解的价值和设fi,jf_{i,j}fi,j表示恰好装满体积iii的第jjj优解若不考虑jjj,根据0/10/10/1背包的性质有fi=min(fi,fi−vo+wo)f_{i}=min(f_i,f_{i-v_o}+w_o)fi=min(fi,fi−vo+wo)那么就是枚举每一个物品ooo,然后因为fi−vof_{i-v_o}fi−vo跟fif_{i}fi中的优解肯定是递减的,利用归并思想O(K)O(K)O(K)合并即可时间复杂度:O(NVK):O(NVK):O原创 2022-07-04 21:54:47 · 189 阅读 · 0 评论 -
Luogu P1286 两数之和___规律+枚举
我们知道从n个非负整数中任取两个相加共有n*(n-1)/2个和,现在已知这n*(n-1)/2个和值,要求n个非负整数。2原创 2022-07-04 21:49:58 · 202 阅读 · 1 评论 -
Luogu P1171 售货员的难题___状压dp
状压dp原创 2022-06-29 21:48:26 · 122 阅读 · 0 评论 -
Luogu P1132 数字生成游戏___bfs+map+set
bfs原创 2022-06-29 19:18:15 · 531 阅读 · 0 评论 -
Luogu P1128 [HNOI2001] 求正整数___质因数分解+dp
dp原创 2022-06-29 19:15:15 · 156 阅读 · 0 评论 -
Luogu P1108 低价购买___dp
lg1108原创 2022-06-29 19:06:55 · 96 阅读 · 0 评论 -
CF3D Least Cost Bracket Sequence___优先队列+贪心
CF3D原创 2022-06-29 13:06:38 · 101 阅读 · 0 评论 -
湖南多校对抗赛 Vocabulary___dp
题目大意:给定333个字符串A,B,CA,B,CA,B,C,包括小写字母和$问有多少种填写方案,使得字典序问有多少种填写方案,使得字典序问有多少种填写方案,使得字典序A<B<C$max(∣A∣,∣B∣,∣C∣)<=1e6max(|A|,|B|,|C|)<=1e6max(∣A∣,∣B∣,∣C∣)<=1e6分析:考虑可能产生贡献的成分,不妨设fi,0/1/2/3f_{i,0/1/2/3}fi,0/1/2/3表示前iii个填完了,A<B<CA<B<原创 2022-05-19 13:21:27 · 101 阅读 · 0 评论 -
Luogu P2045 方格取数加强版___最大费用最大流
题目大意:n∗nn*nn∗n的矩阵,从[1,1][1,1][1,1]走到[n,n][n,n][n,n],每经过一个点可取走一个点的点值,一个点的点值只能取一次,每次可以向右或者向下走。求走了kkk次以后的最大路径和。n<=50,k<=10,ai,j<=1e3n<=50,k<=10,a_{i,j}<=1e3n<=50,k<=10,ai,j<=1e3分析:考虑怎么建模把每个点拆成入点跟出点①入点向出点连边,流为111,费用为ai,ja_{i,原创 2022-03-23 16:44:15 · 158 阅读 · 0 评论 -
Luogu P2057 [SHOI2007]善意的投票___最小割
题目大意:nnn个人,每个人有一个意愿000或111mmm对关系,表示(i,j)(i,j)(i,j)是一对好朋友,即意愿应该相同求最小冲突冲突数为与自身意愿冲突人数+与好友意愿冲突人数与自身意愿冲突人数+与好友意愿冲突人数与自身意愿冲突人数+与好友意愿冲突人数分析:明显是求最小割考虑建立源点汇点S,TS,TS,T①S−>意愿为0S->意愿为0S−>意愿为0②意愿为1−>T意愿为1->T意愿为1−>T③好友间连边考虑就是使得不存在S−>意愿为0−原创 2022-03-23 16:37:57 · 173 阅读 · 0 评论 -
哈尔滨理工大学2021新生赛 L 翻转卡片___dp
题目大意:n<=1e3n<=1e3n<=1e3分析:不考虑选择顺序,设fi,j,kf_{i,j,k}fi,j,k表示前iii个卡片,选了jjj个卡片,第iii个卡片是否正面朝上(1是0否1是0否1是0否)的合法方案数。假设到了第iii位,填111,则上一位必定是000,fi,j,1+=fi−1,j−1,0f_{i,j,1}+=f_{i-1,j-1,0}fi,j,1+=fi−1,j−1,0填000则上一位必定是111,fi,j,0+=fi−1,j,1f_{i,j,原创 2021-11-27 14:35:04 · 442 阅读 · 0 评论 -
CF940F Machine Learning___带修莫队+分块
题目大意:给出一个长度为nnn的序列aaa,mmm个询问,询问有两种类型(1,l,r)(1,l,r)(1,l,r),表示将区间[l,r][l,r][l,r]的不同数分别的个数丢到一个子集,求最小的未出现的自然数(2,x,y)(2,x,y)(2,x,y),表示将axa_xax改成yyyn,m<=1e5,1<=ai,y<=1e9n,m<=1e5,1<=a_i,y<=1e9n,m<=1e5,1<=ai,y<=1e9分析:很明显的带修莫队,考虑原创 2021-11-25 19:25:13 · 253 阅读 · 1 评论 -
CF375D Tree and Queries___树上莫队+树状数组
题目大意:给出nnn个节点一棵树,每个节点有一个颜色aia_iai,mmm个询问,对于一个询问(u,k)(u,k)(u,k),回答以uuu为根的子树中,出现次数>=k>=k>=k的颜色有多少种。n,m<=1e5,0<=ai<=1e9n,m<=1e5,0<=a_i<=1e9n,m<=1e5,0<=ai<=1e9分析:树上莫队,先求欧拉序,然后序列上两个相同点之间的序列就包含了这个节点为根子树的所有节点,直接莫队即可。答案原创 2021-11-25 14:07:01 · 259 阅读 · 0 评论 -
CF1000F One Occurrence___离线+线段树
题目大意:给出长度为nnn的序列aaa,mmm个询问,每次询问一段区间内仅出现了一次的数,多个则输出任意一个,否则输出0n,m,ai<=5e5n,m,a_i<=5e5n,m,ai<=5e5分析:将询问离线,限制询问左指针考虑将所有数字当前对应的合法右端点区间处理出来每次左端点右移的时候将其对应数字的合法区间更新过程用线段树维护对于线段树上任一节点对应区间,记录其能被覆盖的时候,覆盖他的区间的左端点,并对这个左端点取maxmaxmax,因为如果这个区间不合法,肯定是过了左端原创 2021-11-21 18:35:49 · 432 阅读 · 0 评论 -
CF521D Shop___贪心
题目大意:给出一个长度为kkk的序列aaa,给出nnn个操作,操作有333种类型:①1①1①1 xxx yyy,即将axa_xax换成yyy②2②2②2 xxx yyy,即将axa_xax加上yyy③3③3③3 xxx yyy,即将axa_xax乘上yyy问最多选其中的mmm个操作,使得∏i=1nai\prod_{i=1}^{n}a_i∏i=1nai最大求最优的选择方案的操作选择次数,并按照操作的选择顺序输出操作的序号。1<=k<=1e5,1<=m<=n<原创 2021-10-23 19:41:20 · 127 阅读 · 0 评论 -
CF286C Main Sequence___贪心
题目大意:给出一个长度为nnn的正整数序列sss。规定其中的mmm个位置上的数必须符号取负,其他可正可负。在满足条件的情况下构造一个序列AAA,需要满足:对于一个AiA_iAi而言,若Ai>0A_i>0Ai>0,则其充当一种特别的左括号,能与其匹配的右括号位置AjA_jAj,需要满足i<j,Aj=−Aii<j,A_j=-A_ii<j,Aj=−Ai若Ai<0A_i<0Ai<0,则只能充当右括号问能否构造出一个合法的AAA,若能,则原创 2021-10-16 17:43:41 · 102 阅读 · 0 评论 -
Luogu P4107 [HEOI2015]兔子与樱花___贪心
题目大意:给出一颗nnn个节点的有根树,一个树某点的价值定义为儿子个数+点权,初始时树上任意节点满足点价值<=m<=m<=m一次合并操作,假设有节点xxx,其父亲为fafafa,则xxx的儿子全部变成fafafa的儿子,xxx的点权累加到fafafa的点权,再将节点xxx删除,一次合法的合并需要满足过程中点价值<=m<=m<=m。问最多进行多少次合并。n<=2e6,m<=1e5n<=2e6,m<=1e5n<=2e6,m<=1e5原创 2021-10-16 17:32:23 · 108 阅读 · 0 评论 -
CF220B Little Elephant and Array___莫队
题目大意:给出一段长度为nnn的序列,mmm个询问,每个询问给出区间[l,r][l,r][l,r],求[l,r][l,r][l,r]内有多少个数满足数大小为xxx,出现次数也是xxxn,m<=1e5n,m<=1e5n,m<=1e5分析:将询问排序用莫队解决即可注意数xxx出现xxx次->x+1x+1x+1次的变化以及xxx次->x−1x-1x−1次的变化即可代码:#include <bits/stdc++.h>#define rep(i, st,原创 2021-09-21 15:01:12 · 84 阅读 · 0 评论 -
Luogu P4867 Gty的二逼妹子序列___莫队
题目大意:分析:直接上莫队就可以了代码:#include <bits/stdc++.h>#define rep(i, st, ed) for (int i = st; i <= ed; i++)#define rwp(i, ed, st) for (int i = ed; i >= st; i--)#define N 100005using namespace std;typedef long long ll;struct Node { int原创 2021-08-22 22:00:06 · 69 阅读 · 0 评论 -
Luogu P2611 [ZJOI2012]小蓝的好友___treap
题目大意:给出一个R∗CR*CR∗C的010101矩阵,以及所有的111的位置(NNN个),问至少包含一个111的子矩阵的个数。R,C<=4e4,N<=1e5,数据随机R,C<=4e4,N<=1e5,数据随机R,C<=4e4,N<=1e5,数据随机分析:对于每一行求以该行为下边界的矩阵的合法情况对于列建立一个笛卡尔树,以资源最晚出现位置为keykeykey,建立大根堆,因为数据随机,以keykeykey为旋转指标不会被卡若做到了第iii行,jjj列在该行存在资原创 2021-08-20 18:48:35 · 74 阅读 · 0 评论 -
Luogu P4309 [TJOI2013]最长上升子序列___splay
题目大意:初始给出一个空序列。依次将111到NNN的数字插入到序列,第iii次将数字iii插入到一个特定的位置,每次插入完回答序列的最长上升子序列长度。N<=1e5N<=1e5N<=1e5分析:设fif_ifi表示 以位置iii结尾的最大子序列每次加入的数都是当前最大的数,只需要考虑求当前位置以前最大的fff即可因为有插入操作,所以可以考虑用splaysplaysplay动态维护修改位置前的fmf_mfm,若插入位置xxx,则最后数iii会到x+1x+1x+1的位原创 2021-08-19 20:22:35 · 80 阅读 · 0 评论 -
Luogu P7244 章节划分___ST表+分治
题目大意:分析:因为amaxa_{max}amax肯定会被算进某个子段的最大值所以答案肯定是amaxa_{max}amax的某个约数枚举amaxa_{max}amax的 约数,对于一个约数ddd,合法即他能分成>=k>=k>=k个子段如果计算最大的分段数,考虑分治,每次找到区间最大值的位置(通过预处理ST表O(1)O(1)O(1)查找),考虑当前区间[L,R][L,R][L,R],最大值位置axa_xax则区间分成[L,x−1],[x+1,R][L,x-1]原创 2021-08-19 20:04:07 · 85 阅读 · 0 评论 -
Luogu P5956 [POI2017]Podzielno___思维+二分
题目大意:分析:不考虑是B−1B-1B−1的倍数,发现XXX最大的组成即,高位填大数,先填aB−1a_{B-1}aB−1个B−1B-1B−1,然后aB−2a_{B-2}aB−2个B−2B-2B−2,以此类推然后我们发现,假设这样得到的是X′X'X′,一个合法的XXX,仅需满足各位相加为B−1B-1B−1的倍数,证明如下:::不妨把XXX写成c0∗B0+c1∗B1+…+cn∗Bn−1c_0*B^0+c_1*B^1+…+c_n*B^{n-1}c0∗B0+c1∗B1+…+cn∗Bn−1原创 2021-08-19 19:54:13 · 96 阅读 · 0 评论 -
Luogu P2042 [NOI2005]维护数列___splay
题目大意:分析:对于操作①①①,将新加入所有数建成一个新树,然后将原树通过splaysplaysplay使得pospospos位置为根节点,pos+1pos+1pos+1为根节点右儿子,则令根节点右儿子的左儿子为新树的根即实现合并对于操作②②②,将pos−1pos-1pos−1作为根节点,pos+totpos+totpos+tot作为根节点右儿子,删根节点右儿子的左子树即可对于操作③,④③,④③,④,同理将区间提取出来,分别打上标记即可对于操作⑤⑤⑤,一样弄到根节点的右儿子的左子树上,求子树原创 2021-08-19 19:38:09 · 88 阅读 · 0 评论 -
牛客 前缀和专题 简要题解
链接:前缀和专题A:做前缀乘即可,每次计算即sum[r]∗逆元sum[r]*逆元sum[r]∗逆元suml−1mo−2sum_{l-1} ^ {mo-2}suml−1mo−2代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mo = 1000000007;int a[100005], n, m;ll sum[100005];ll mul(ll x,ll y)原创 2021-08-17 22:17:04 · 171 阅读 · 0 评论 -
Luogu PCF1110E Magic Stones___思维
题目大意:分析:移项,有ci′−ci−1=ci+1−cic_i '-c_{i-1}=c_{i+1}-c_ici′−ci−1=ci+1−ci,发现了什么每次操作后,就相等于把差分值交换了那么只需要将 ccc的所有差分值看能否与ttt的所有差分值一一匹配(相等)即可代码:#include <bits/stdc++.h>#define N 100005using namespace std;int a[N], b[N], a1[N], b1[N], n;in原创 2021-08-13 12:00:56 · 103 阅读 · 0 评论 -
Luogu P2839 [国家集训队]middle___二分+主席树
题目大意:分析:考虑一个合法的答案ddd,一定满足区间内>=d区间内>=d区间内>=d的数的个数多于<d<d<d的个数,设差值为xxx,即 x>=0x>=0x>=0找到最大ddd满足x>=0x>=0x>=0,dmaxd_{max}dmax即最大中位数由于答案只可能是a1,a2..,ana1,a2..,ana1,a2..,an,考虑离散后对于每个可能的答案建立一个主席树假设bbb为aaa去重后的升序序列以bib_ib原创 2021-08-13 11:56:07 · 88 阅读 · 0 评论 -
Jzoj P4438 K小数查询___分块
题目大意:分析:分块,每个块记录用一个vectorvectorvector存对应的区间内的数,再用一个vectorvectorvector存对应区间内的数的升序序列用一个addiadd_iaddi记录块iii被整体操作累加的总和,以及一个aia_iai记录不计算整块操作,位置i的数值对于一个操作1,我们暴力改两端的散块,更新两端的vectorvectorvector,以及对应的升序序列,对于中间的所有整块,在对应的addaddadd上累加,因为存在对某一块的序列的排序重构,时间复杂原创 2021-08-12 09:14:58 · 332 阅读 · 0 评论 -
Luogu P4296 [AHOI2007]密码箱___数学
题目大意:给出nnn,求满足x2=1(modx^2=1(modx2=1(mod n)n)n)(x<n)(x<n)(x<n)的x的所有情况从小到大输出n<=2e9n<=2e9n<=2e9分析:x2=kn+1x^2=kn+1x2=kn+1移项发现是个平方差即(x+1)(x−1)=kn(x+1)(x-1)=kn(x+1)(x−1)=kn考虑拆解k,n考虑拆解k,n考虑拆解k,n①(x+1)=k1∗n1(x+1)=k1*n1(x+1)=k1∗n1②(x−1)=原创 2021-08-12 09:00:36 · 116 阅读 · 0 评论 -
Luogu P3203 [HNOI2010]弹飞绵羊___分块
题目大意:分析:分块,每个点记录当前点在哪一个块,跳出当前块需要多少步,跳出当前块以后走到了哪个点每次修改暴力重构当前整个块即可对于这个块中该点前面的点也需要更新代码:#include<bits/stdc++.h>#define N 200005using namespace std;struct Node { int bel, cnt, To;}cdp[N];int al[450], ar[450], b[N], siz, n, m;int main()原创 2021-08-11 21:39:48 · 87 阅读 · 0 评论 -
Luogu P4587 [FJOI2016]神秘数___思维+主席树
分析:考虑一个集合al,...,ara_l,...,a_ral,...,ar能连续合成[1,x−1][1,x-1][1,x−1],即神秘数为xxx若加入一个数yyy,值域对比[1,x−1],[y+1,x−1+y][1,x-1],[y+1,x-1+y][1,x−1],[y+1,x−1+y]①若y+1<=(x−1)+1y+1<=(x-1)+1y+1<=(x−1)+1,即y<=xy<=xy<=x,则al,...,ara_l,...,a_ral,...,ar能连原创 2021-08-11 10:07:02 · 102 阅读 · 0 评论 -
HDU P4348 To the moon___主席树
题目大意:n<=1e5,d<=104,ai<=19n<=1e5,d<=10^4,ai<=1^9n<=1e5,d<=104,ai<=19分析:主席树,不过注意每次的新版本要在原版本的基础上,把所有能被影响的区间对应的点开成新节点,并且在新节点上打上lazy,由于新版本跟旧版本的线段树间可能公用顶点,所以lazy不能下传,即标记永久化代码:#include<iostream>#include<cstdio>#inclu原创 2021-08-11 08:09:44 · 74 阅读 · 0 评论 -
Luogu P3919 [模板]可持久化线段树___主席树
题目大意:给出长度为nnn的序列,mmm次操作,操作包括1.回到前面某个版本,将该版本中的某个数修改后,将修改的版本作为该操作后的新版本2.回到前面某个版本,查询该版本中序列的第k个数,并将该版本复制作为该搞作后的新版本(完全相同)n,m<=1e6n,m<=1e6n,m<=1e6修改前后任意序列中的数,−109<-10^9<−109<数值<109<10^9<109分析:对整个序列的编号1到n1到n1到n建立主席树,每次在新版本建的新树链原创 2021-08-10 21:02:15 · 85 阅读 · 0 评论 -
Jzoj P3056 数字___数位dp
题目大意:一个数字被称为好数字当他满足下列条件:它有2*n个数位,n是正整数(允许有前导0)构成它的每个数字都在给定的数字集合S中。它前n位之和与后n位之和相等或者它奇数位之和与偶数位之和相等已知n,求合法的好数字的个数mod 999983。n<=1000,∣S∣<=10n<=1000,|S|<=10n<=1000,∣S∣<=10分析:考虑朴素的数位dp,f1i,jf1_{i,j}f1i,j表示前iii位之和为jjj的方案数f2i,j原创 2021-08-10 20:03:31 · 108 阅读 · 0 评论 -
Luogu P2922 [USACO08DEC]Secret Message G___字典树
题目大意:分析:以信息建立字典树,求出所有信息作为暗号前缀,对暗号的贡献再以暗号建立字典树求出所有长于暗号的信息,对暗号的贡献最后减去重复的情况,即信息完全等于暗号代码:#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<algorithm> #define N 50005using namespace std;s原创 2021-08-09 22:05:03 · 68 阅读 · 0 评论 -
Luogu P5826 [模板]子序列自动机___子序列自动机
题目大意:分析:子序列自动机板子利用vectorvectorvector存下相同大小元素对应的下标(小到大)对于一个询问bbb假设匹配到了 bib_ibi,bib_ibi对应在序列aaa中的下标为jjj,则在bj+1b_{j+1}bj+1对应的aaa存在的该元素的下标中二分找到第一个>j>j>j的进行匹配#include<iostream>#include<cstdio>#include<cmath>#include<原创 2021-08-09 20:35:35 · 69 阅读 · 0 评论 -
牛客 子串查询___子序列自动机
题目大意:给出长度为n的字符串S,以及Q个询问给出长度为n的字符串S,以及Q个询问给出长度为n的字符串S,以及Q个询问每个询问询问询问给出一个字符串TTT,判断TTT是否为SSS的一个子串所有子串仅包含小写字母1<=∣T∣<=501<=|T|<=501<=∣T∣<=501<=n,q<=1e51<=n,q<=1e51<=n,q<=1e5分析:普通的暴力肯定会超时可以引入子序列自动机即fi,jf_{i,j}fi,j表示i原创 2021-08-09 19:47:40 · 86 阅读 · 0 评论 -
Luogu P2633 Count on a tree___主席树+lca
题目大意:分析:历史版本为父亲,现在版本为儿子,从树根开始建立主席树对于u,vu,vu,v间路径的信息,可以转换成uuu版本的树信息+vvv版本的树信息-lca(u,v)lca(u,v)lca(u,v)版本的树信息-lca(u,v)父亲lca(u,v)父亲lca(u,v)父亲版本的树信息第k小就直接计算即可代码:#include<iostream>#include<cstdio>#include<cmath>#include<queue&g原创 2021-08-09 18:37:16 · 87 阅读 · 0 评论 -
Luogu P3567 [POI2014]KUR-Couriers___主席树
题目大意:分析:若区间[l,r][l,r][l,r]存在,则该区间的第(r−l+1)/2+1(r-l+1)/2+1(r−l+1)/2+1一定是该数用主席树求出来判断即可代码:#include<iostream>#include<cstdio>#include<cmath>#include<queue>#include<cstring>#include<algorithm>#define N 500005us原创 2021-08-09 18:28:49 · 93 阅读 · 0 评论