10 2020 档案
摘要:题意:有一个从根节点$BFS$得来的序列(每次$bfs$子节点的时候保证是升序放入队列的),现在让你还原树(没必要和之前相同),问能构造出的最小的树的深度. 题解:不看根节点,我们从第二个位置开始,如果某一段元素升序,那么就让他们变为上一层某个结点的儿子,否则,如果上一层还有另外的父节点的话,就作为
阅读全文
摘要:题意:有$n$个菜在烤箱中,每个时刻只能将一个菜从烤箱中拿出来,第$i$个时刻拿出来的贡献是$|i-a[i]|$,你可以在任意时刻把菜拿出来,问将所有菜拿出的最小贡献是多少? 题解: 先对所有菜从小到大排序,因为$a_i$单调,我们可以枚举时刻$[1,2*n]$来进行DP,先更新第一道菜的状态,然后
阅读全文
摘要:题意:有一个$2$X$n$的矩阵,你想从$(1,1)\(走到\)(2,n)$,每次可以向上下左右四个方向走,但在某些时间段某个点会被堵住,如果已经被堵住,那么即恢复正常,每次对某个点操作,操作后询问是否能走到终点. 题解:只有当第一层和第二层被堵的点连通时才会到不了终点,比如$(x,y)\(和\){
阅读全文
摘要:题意:给你四组长度为$n$序列,从每个序列中选一个数出来,使得四个数字之和等于$0$,问由多少种组成情况(仅于元素的所在位置有关). 题解:$n$最大可以取4000,直接暴力肯定是不行的,我们可以先对后两个数组$c$和$d$,枚举他们每个元素的和,用一个新数组$CD$记录,然后再去枚举$a$和$b$
阅读全文
摘要:题意:有长度$n$的序列,让你构造序列,使得二分查找能在$pos$位置找到值$x$.问最多能构造出多少种排列? 题解:题目给出的$pos$是固定的,所以我们可以根据图中所给的代码来进行二分,确定有多少数小于$x$和大于$x$,然后根据排列组合即可算出答案. 代码: int n,x,pos; ll f
阅读全文
摘要:题意:给你一组数,选一些数出来组成一个排列,使得每个数都能被前一个数整除,求排列的最大元素. 题解:我们先用欧拉筛筛出$1e7$的质数,设$dp[i]$表示当前选的数都是$i$的约数且合法的最大元素值.所以我们可以用$dp[i]$去更新$i$的倍数的$dp$值,我们可以靠枚举$i$的素数倍来降低复杂
阅读全文
摘要:题意:给一个$nXm$的矩阵,可以选取$aXb$的子矩阵,使子矩阵中的所有元素减一,问最后是否能使矩阵中所有元素变为$0$. 题解:首先贪心,我们看最左上角的元素,如果$g[1][1]\ge0$,那么我们就要对其子矩阵的所有元素减去$g[1][1]$,然后因为$g[1][1]$已经是$0$了,假如$
阅读全文
摘要:题意:给你两个长度相同的数组,每次从两个数组中选数(也可以不选),但是不可以在同一个数组中连续选两次,问能选的最大值是多少? 题解:dp,$dp[i][0]$表示第$i$个位置不选,$dp[i][1]$表示第$i$个位置选第一个数组的数,同理$dp[i][2]$就是第二个,不选的话,$dp[i][0
阅读全文
摘要:题意:给你一个正整数$x$,找两个正整数$a$,\(b\),使得$lcm(a,b)=x$,并且$max(a,b)$最小. 题解:我们知道,\(lcm(a,b)=a*b/gcd(a,b)\),所以如果$a$和$b$不互质,那么$ab$必然可以约去一个$gcd(a,b)$,也就表示$max(a,b)$的
阅读全文
摘要:题意:给$n$场考试的时间,每场考试可以提前考,但是记录的是原来的考试时间,问你如何安排考试,使得考试的记录时间递增,并且最后一场考试的时间最早. 题解:因为要满足记录的考试时间递增,所以我们用结构体记录两个时间,并按第一个时间排序,然后遍历考试时间,$ans$记录上次考试的时间,我们每次将两个时间
阅读全文
摘要:题意:有一组数,问子数组和最大不超过$t$的最多元素个数. 题解:用数组模拟队列,不断的往里面放,队列中的元素之和大于$t$,就不断地从队头弹出直到满足条件,维护一个最大值即可. 代码: int n,t; int a[N]; int q[N]; int hh,tt=-1; int main() {
阅读全文
摘要:题意:有两个正整数$n$和$m$,每次操作可以使$n*=2$或者$n-=1$,问最少操作多少次使得$n=m$. 题解:首先,若$n\ge m$,直接输出$n-m$,若$2n>=m$,分$m$的奇偶判断一下,如果是奇数就输出$n-(m+1)/2+2$,是偶数就输出$n-m/2+1$.否则我们就需要用d
阅读全文
摘要:题意:给出两个正整数$n$和$k$,构造一个长度为$k$的好序列$b_1,b_2,...,b_k(1\le b_1\le b_2\le ...\le b_k \le n)$,并且满足$b_i|b_{i+1}$,问最多能够造出多少这样的序列(同一个元素可以出多次). 题解:我们记$dp[i][j]$表
阅读全文
摘要:题意:C和D打牌,每张牌有花色和点数,小D刚开始的分数为$v$,不管输还是赢,只要小D出了牌(花色必须相同),就能得到那张牌点数的分数,若是赢了(点数不小于D的牌),他可以另外加$c$分,输了就要扣$c$分,现在D知道了C的出牌情况,问他最多能拿多少分,并输出出牌情况. 题解:首先,假如他两的牌花色
阅读全文
摘要:题意:有$n$个数,起始值均为$0$,进行$q$次操作,每次输入三个数,如果第一个数为$1$,则将第$i$个数修改为$j$,如果为$2$,则求区间$[l,r]$内的所有子区间的异或和. 题解:在纸上写一写画一画,能够发现规律,如果区间的左端点$l$和右端点$r$奇偶性不同,那么这个区间内的所以子区间
阅读全文
摘要:题意:有一个长度为$n$的数组,进行$m$次操作,每次读入一个值$t$,如果$t=1$,则将区间$[l,r]$的数字反转,若$t=2$,则查询下标为$i$的值. 题解:树状数组的板子题,但是考察到了位运算的知识,我们对区间进行反转的时候,只需要对树状数组$c[l]$ ^ 1,\(c[r+1]\) ^
阅读全文
摘要:题意:给你一组数,询问$q$次,问所给区间内的最大值和最小值的差. 题解:经典RMQ问题,用st表维护两个数组分别记录最大值和最小值然后直接查询输出就好了 代码: int n,q; int a[N]; int dp1[N][30],dp2[N][30]; int lg[N]; void lg_Ini
阅读全文
摘要:题意:有$n$个画家,$m$幅画,每个画家负责$m$幅画,只有前一个画家画完时,后面一个画家才能接着画,一个画家画完某幅画的任务后,可以开始画下一幅画的任务,问每幅画最后一个任务完成时的时间. 题解:这题可以用dp来写,当某个画家开始他的任务时,他的上一幅画的任务必须完成,并且他的前一个画家必须完成
阅读全文
摘要:题意:找出序列中有多少子序列是$wow$,但是$w$只能用$vv$来表示. 题解:我们分别记录连续的$v$和$o$的个数,用$v1$和$v2$存,这里要注意前导$o$不能要,观察一下写出答案公式:\(ans=v1[i]*(v2[i]*(v1[i+1]+...+v1[k])+v2[i+1]*(v1[i
阅读全文
摘要:题意:给你一串只含$4,8,15,16,23,42$的序列,如果它满足长度是$6$的倍数并且有$\frac {6}\(个子序列是\)[4,8,15,16,23,42]$,则定义它是好的,问最少删除多少元素使得序列是好的. 题解:我们开个桶(要离散化)记录这些数字出现的次数,然后线性遍历,当遇到$4$
阅读全文
摘要:题意:有$n$个点对,找到它们之间的最短距离. 题解:我们先对所有点对以$x$的大小进行排序,然后分治,每次左右二等分递归下去,当$l+1=r$的时候,我们计算一下距离直接返回给上一层,若$l==r$说明只有一个点,不能构成线段,返回$INF$,于是当前区间的左右两边的最短距离我们找到了,之后还有一
阅读全文
摘要:题意:有一个$01$串,每次操作要先删除一个位置上的元素,然后删除相同前缀和,直到字符串被删完,问最多能操作多少次. 题解: 对于一个长度大于$1$的相同前缀,我们最多只能对它操作一次,然后就整个直接被删除了,所以它能提供的贡献就很少,我们记录所有连续的串的长度,然后我们最理想的删除条件是,最前面是
阅读全文
摘要:题意:RT 题解: \(i\ mod \ k=0\),即所有事$k$的倍数的位置都要进行异或,根据异或的性质,我们知道如果相同的异或的数个数是偶数的话,得出的结果是$0$,所以每次询问,我们判断需要进行异或的个数,如果不是奇数的话就不用求贡献,这儿还有个结论,如果我们原来有偶数的个数,然后进行一次异
阅读全文
摘要:题意:RT 题解:先对$p$排个序,然后设$dp[i]$表示前$i-1$个$p[i]$满足条件但是$p[i]\(不满足,即在\)[1,p[i]]$中不存在从$p[1]$到$p[i-1]$[的排列,比如说$p[1]=1$,\(p[2]=2\),\(p[3]=3\),则$dp[4]\(中一定不能存在\)
阅读全文
摘要:题意:有一个长度为$n$的序列,找出最大的长度不为$n$的子段和,问最大子段和是否小于所有元素和. 题解:最大子段和我们可以直接用dp来找,每次状态转移为:\(dp[i]=max(dp[i-1]+a[i],a[i])\),而我们不能求长度为$n$的子段和,所以可以跑两次,从$[1,n-1]\(和\)
阅读全文
摘要:题意:给你一个只含$+\(和\)-\(的字符串,统计它的加减和,然后再给你一个包含\)+,-,?\(的字符串,其中\)?\(可以表示为\)+\(或\)-$,问有多少种情况使得第二个字符串的加减和等于第一个. 题解:首先我们统计第一个字符串的和,然后统计第二个字符串的加减和以及$?\(的个数,然后对于
阅读全文
摘要:题意:有$n$个点,$m$个集合,集合$E_i$中的点都与集合中的其它点有一条边权为$t_i$的边,现在问第$1$个点和第$n$个点到某个点的路径最短,输出最短路径和目标点,如果不满足条件则输出$Evil John$. 题解:题目所给的边数关系太复杂了,我们可以让每个集合中的所有点都与一个虚拟节点连
阅读全文
摘要:题意:给你$n$个字符串,\(s_1,s_2,...,s_n\),对于$i(1\le i\le n)$,找到最大的$i$,并且满足$s_j(1\le j<i)$不是$s_i$的子串. 题解:直接$O(n^2)$然后跑kmp匹配,这里注意要剪枝,不然会T,也就是说对于前$i-1$个串,如果它是后面某个
阅读全文
摘要:题意:有$n$个数,开始给你两个数$a$和$b$,每次找一个没出现过的数$i$,要求满足$i=j+k$或$i=j-k$,当某个人没有数可以选的时候判他输,问谁赢. 题解:对于$a$和$b$,我们能有他两得到的最小数一定是$d=gcd(a,b)$,所以总共能选的数的个数为$n/d$,判断奇偶即可. 代
阅读全文
摘要:题意:有$n$种花,每种花有$a_i$盆,现在要摆$m$盆花,花的种类从$[1,n]$有序排放,问有多少种方案数. 题解:这题可以借用01背包的思路,感觉更好想一点,我们首先枚举$n$种花,然后按一维01背包的思路,再枚举第$i$种花的选取盆数$[1,min(a_i,j)]$,每次状态都由$dp[j
阅读全文
摘要:题意:有$n$个数,每次可以选$k(1\le k\le n)$个数,并且得到$a_1+max(0,a_2-1)+max(0,a_3-2)+...+max(0,a_k-k+1)$的贡献,问最少选多少次使得总贡献不小于$m$. 题解:我们从大到小排序,然后二分答案,贪心,如果答案是$k$天,那么对于前$
阅读全文
摘要:题意:给你$n$个数,判断是否能构成一个$n$X$n$的回文矩阵,若可以,输出$YES$和矩阵,否则输出$NO$. 题解:如果这个矩阵的行/列元素是偶数的话,很好办,所有出现的数一定是$4$的倍数,我们直接判断然后模拟输出一下即可.如果是奇数,就要麻烦一点,我们首先用桶存一下所有元素的出现次数,然后
阅读全文
摘要:题意:有$n$个数,你可以任意去除某个位置的元素然后得到一个新数组,使得新数组奇数位和偶数的元素相等,现在问你有多少种情况合法. 题解:先求个后缀和,然后遍历,记录奇数和偶数位置的前缀和,删去$i$位置的元素,意味着原来$i$位置之后的奇数和变成了偶数和,偶数和变成了奇数和,将前缀和与差位的后缀和相
阅读全文
摘要:题意:每次有$3$中操作,对两个点连条边,删去某条边,或者问当前大小不为$1$的树的数量.连重边或者删去一条不存在的边,这样的白痴操作可以无视qwq. 题解:水题,用map存一下pair然后分论讨论即可. 代码: int n; ll u,v; map<PLL,bool> mp; map<ll,ll>
阅读全文
摘要:题意:有一个模板串,有$T$个字符串,从字符串中找到某个子串,使得这个子串中的子序列包含模板串,求最短的子串的长度. 题解:找子序列,很容易想到序列自动机,根据序列自动机的原理,我们一定可以确保除了第一个字符,其他的字符的位置都是最优的,所以我们先对模板串的第一个字符$p$记录它的所有位置,然后再遍
阅读全文
摘要:题意:有一个模板串,给你$T$个字符串,选取最短的子串,使其重新排列后包含模板串,求最短的子串的长度 题解:遍历字符串,记录每个字符出现的最后位置,每记录一个后再遍历子串,找到子串需要的所有的字符的最后出现的最小位置,如果合法,更新答案即可. 代码: const string tp="puleyak
阅读全文

浙公网安备 33010602011771号