11 2020 档案
摘要:题意: 有一个分两层的圆盘,每层从12点方向均分插入$n$和$m$个隔板,当内层和外层的隔板相连时是不能通过的,有$q$个询问,每次给你内层或外层的两个点,判断是否能从一个点走到另外一个点. 题解: 因为是均分,所以内层和外层隔板相连的个数为$gcd(n,m)$,不懂的可以从角度方向来考虑,将$36
阅读全文
摘要:题意:给你一组非递减的数,你可以对两个连续的数进行异或,使其合并为一个数,问最少操作多少次使得这组数不满足非递减. 题解:首先,给出的这组数是非递减的,我们考虑二进制,对于三个连续的非递减的最高位相同的数,我们可以将后面的两个异或,那么第一个数一定比合并的数大,所以当出现三个最高位相同的数时,操作数
阅读全文
摘要:题意:有一长度为$n$的平台,平台有的位置有木桩,可以使小球弹起来,小球必须从第$p$个位置开始,而且每次都会向右弹$k$个单位,然后有的位置是没有木桩的,你可以在这些的空的位置放一个木桩,需要花费$x$,在开始的时候,你可以删除前几个单位,每个单位花费$y$,问最少花费多少使得小球能够弹出平台外.
阅读全文
摘要:题意:有$n$栋房子,每栋房子都有自己的颜色$c_i$,你每次可以对连续的长度为$k$的区间改变任何房子的颜色,问最少多少次可以使得所有房子颜色相同. 题解:因为只有$100$中颜色,所以我们可以直接枚举颜色,然后去遍历房子,如果房子颜色和当前枚举的不符,那么我们操作的次数就要++,并且跳到$j+k
阅读全文
摘要:题意:有一张$n$x$m$的图,图中每个点都关押着罪犯,在坐标$(r,c)$处有一个出口,每名罪犯每秒可以可以像上下最有移动一个单位或者不动,问所有罪犯能够逃离监狱的最少时间. 题解:直接算四个顶点到出口的值求个最大即可. 代码: #include <bits/stdc++.h> #define l
阅读全文
摘要:题意:有一个长度为$n$的数组,你可以从中选一些数出来使得它们的和不大于$t$,问能选出来的最大的和是多少. 题解:$n$的数据范围是$40$,直接二进制枚举贴TLE,之前写过这样的一道题,数据范围也是$40$,我们可以将$40$对半分,用两个数组分别记录$n/2$个数,然后再用两个数组记录它们二进
阅读全文
摘要:题意:给你一张图,$S$表示起点,$G$表示终点,$.$表示可以走,#表示不能走,小写字母可以传送到任意一个相同的字母的位置,问从$S$走到$G$的最小步数. 题解:假如不考虑字母的话,就是一个经典的bfs,当我们走到字母时,将其它相同字母的位置入队,之后就不会再将它们入队了,因为之后走到这个字母的
阅读全文
摘要:题意:给你带边权的树,有$m$次询问,每次询问有多少点对$(u,v)$之间简单路径上的最大边权不超过$q_i$. 题解:真的想不到用最小生成树来写啊.... 我们对边权排序,然后再对询问的$q_i$排序,我们可以枚举$q_i$,然后从last开始遍历边权,如果边权不大于$q_i$,那么就可以用并查集
阅读全文
摘要:题意:给你两个长度为$2$的字符串$s$和$t$,你需要构造一个长度为$3n$的字符串,满足:含有$n$个$a$,$n$个$b$,$n$个$c$,并且$s$和$t$不能是它的子串. 题解:首先,假如所给的长度为$2$的字符串两两不相等,那么我们一定可以构造一个类似$aaaabbbbcccc$这样的相
阅读全文
摘要:题意:有一个$n$个点,$n$条边的图,问你长度至少为$1$的简单路径有多少条. 题解:根据树的性质,我们知道这颗树一定存在一个环,假如一棵树没有环,那么它的所有长度不小于$1$的简单路径数一定是$\frac{n*(n-1)}{2}$,因为每个点都可以和其他任意一个点形成一条路径,除以$2$表示去除
阅读全文
摘要:题意:给你一个$n$个点的完全$k$叉树的先序遍历序列$a$,还原这颗树并且求所有两个端点的异或和. 题解:用dfs在还原树的时候,把子节点和父亲节点的异或贡献给答案,对于每个节点,我们找它所有的子节点(从左到右),如果子节点合法就不断递归求贡献即可. 代码: class Solution { pu
阅读全文
摘要:题意:给你一个模式串$t$,现在要在主串$s$中删除多个子串,使得得到的$s$的子序列依然包含$t$,问能删除的最长子串长度. 题解:首先,我们不难想到,我们可以选择$s$头部到最右边的子序列的头部和最左边的子序列的尾部到$s$的尾部这两个子串,除去这两个子串,我们要找的最大子串一定在子序列的头部到
阅读全文
摘要:题意:给你一组数,每个数都可以进行一次加一减一,问最后最多能有多少不同的数. 题解:我们可以用桶存每个数的次数,然后枚举$[1,150001]$来求对答案的贡献,然后贪心,这里我们不用担心其他乱七八糟的东西,直接根据桶中的个数来求贡献即可,但是要先选$i-1$的情况,因为后面的数取不到$i-1$,假
阅读全文
摘要:题意:给你两个长度为$n$的数组$a$和$b$,元素值在$[0,n-1]$,可以对$b$数组的元素任意排序,求新数组$c$,满足$c_i=(a_i+b_i)\ mod\ n$,并且使得其字典序最小. 题解:这种取模求最小的题,我们一眼就能看出最优情况一定是$b_i=n-a_i$,可以先用set存一下
阅读全文
摘要:题意:给你一组数,每次可以选队首或队尾的数放入栈中,栈中元素必须保持严格单增,问栈中最多能有多少元素,并输出选择情况. 题解:首先考虑队首和队尾元素不相等的情况,如果两个数都大于栈顶元素,那么我们选小的放进去,否则选择比栈顶元素大的放进去,该题重点在于队首和队尾元素相同的情况,由于他们相同,那么我们
阅读全文
摘要:题意:区间更新,区间询问. 题解;对于区间更新,我们还是用差分数组$b_i$来更新,区间询问时,我们的答案是:\(\sum_{i=l}^{r}\sum_{j=1}^{i}b_j\), 所以,我们搞两个树状数组维护$b_i$和$i*b_i$即可. 代码: #define int long long i
阅读全文
摘要:题意:在二维坐标轴上给你一些点,求出所有由三个点构成的v和∧图案的个数. 题解:因为给出的点是按横坐标的顺序给出的,所以我们可以先遍历然后求出某个点左边比它高和低的点的个数(这个过程简直和用树状数组求逆序对的操作一模一样好不好!),用$grt[i]$记录第$i$个点左边比它大的数,$low[i]$表
阅读全文
摘要:题意:给你两个字符串,每次取它们的子串C和D,然后求LCS,得到的贡献为$4*LCS(C,D)-|C|-|D|$,求最大贡献. 题解:首先应该了解$O(n^2)$的LCS的dp写法,然后在此基础上稍加改动,对于子串$C$和$D$,如果$c[i]=d[j]\(,那么他们的LCS应该\)+1$,长度也分
阅读全文
摘要:题意:有一长度为$n$的字符串,要求得到$k$不同的它的子序列(可以是空串),每个子序列有$|n|-|t|$的贡献,求合法情况下的最小贡献. 题解:直接撸个爆搜找出所有子序列然后放到set里面搞一下就好了. 代码: int n,k; string str; set<string> s; queue<
阅读全文
摘要:题意:你有$n$个礼物,礼物有自己的种类,你想将它们按种类打包送人,但是打包的礼物数量必须不同(数量,与种类无关),同时,有些礼物你想自己留着,$0$表示你不想送人,问你在送出的礼物数量最大的同时,尽可能的使自己喜欢的留下来,输出能送出的最大礼物数,以及这些礼物中自己不喜欢的数目. 题解:首先,我们
阅读全文
摘要:题意:有一个$n$x$m$的棋盘,你需要从$(1,1)\(走到\)(n,m)\(,每次可以向右,右下,下走任意个单位,\).\(表示可以走,#表示一堵墙,不能通过,问从\)(1,1)\(走\)(n,m)$的方案数. 题解:走棋盘的经典问题的改编,唯一不同的地方在于,棋子可以在某一方向移动任意距离,而
阅读全文
摘要:题意:给你一个$n$x$m$的矩阵,你可以任意位置的元素+1,只能加一次,问你如何使得任意位置的元素不等于它四周的值.输出操作后的矩阵. 题解:构造,矩阵中某两个下标的和的奇偶性一定和四周的都不同,因为题目保证有解,所以我们只要让下标和是奇数的填奇数,偶数的填偶数即可. 代码: int t; int
阅读全文
摘要:题意:给你一组数$b$,对于每个$b_i$,相对应的$a_i=2^$,问你是否能找出两个不相交的区间,使得两个区间的$a_i$的元素和相等. 题解:对于任意一个$2k$,如果它只能由$2k$相加得到的话,那么只能是他自己本身,或者这些$2k$中含有相同元素,我们可以推一下,$1,2,4,8,16,3
阅读全文
摘要:题意:有$n$个队员站成一排,有两个教练分别选人,每次选当前剩余人中的能力值最大的那个以及他两边相邻的$k$个人,问最后每个人所在队伍情况. 题解:优先队列模拟,以及双向链表,先用结构体存入每个人的状态,然后全部push到优先队列中,每次将已经分好队的人弹出,然后找当前能力值最大的人分组,至于两边的
阅读全文
摘要:题意:你要带着你的喵咪一起去旅行,你的喵在星期$1,4,7$吃喵粮$x$,在星期$2,6$吃喵粮$y$,在星期$3,5$吃喵粮$z$,你只有$a$个$x$,$b$个$y$,$c$个$z$,一旦吃完旅行就结束了,问你选择星期几出发能使旅行的天数最长. 题解:这已经是这个星期第三次碰到这种idea的题了
阅读全文
摘要:题意:给你两个字符串$s$和$t$,保证$t$的字典序大于$s$,求他们字典序中间的字符串. 题解:我们假设题目给的不是字符串,而是两个10禁止的正整数,那么输出他们之间的数只要把他两加起来除$2$就行了,那么对于字符串又为何不可呢?我们可以将每个字母看成$26$进制的数,像高精度那样模拟加法运算的
阅读全文
摘要:题意:有$n$个点和$m$条无向边,现在让你给你这$m$条边赋方向,但是要满足任意一条边的路径都不能大于$1$,问是否有满足条件的构造方向,如果有,输出一个二进制串,表示所给的边的方向. 题解:我们先单独拿出$3$个点来看,选择一个点,那么与它相连的另外两个点到自己的方向一定是相同的,同理,我们可以
阅读全文
摘要:题意:有一组数,可以选择某个数$a_i$相邻的一个数$a_j$,然后可以让$a_i$加上或者减去$|a_i-a_j|$,问最少操作多少次使得数组中所有数相同. 题解:不难发现,每次操作必然可以使得一个数等于它旁边的任意一个数,所以让数组中的其他数等于出现次数最多的那个数一定是最优的,然后我们就去找与
阅读全文
摘要:题意:有$n$个点,对这些点进行$m$次染色,第$i$次染色会把区间$(ip+q)\ mod\ N+1$和$(iq+p)\ mod\ N+1$之间的点染成颜色$i$,问最后这$n$个点的颜色. 题解:我们可以反着从第$m$次开始染,因为后面的会把前面点的颜色覆盖,所以倒着来的话,下一次染的时候就可以
阅读全文
摘要:题意:有$n$个罪犯,$m$对罪犯之间有仇,现在将这些罪犯分到两个监狱里去,问两个监狱里有仇罪犯之间的最大权值最小为多少. 题解:先按边权从大到小排序,然后贪心,边权大的两个罪犯,我们一定要先让他们两人分到不同的监狱中,这里我们就可以用并查集来维护, 用种类并查集每次维护两个罪犯的关系,如果他们不在
阅读全文
摘要:题意:你和朋友玩游戏,有个一$01$序列,你每次给出一个区间,朋友会回答这个区间中的$1$的个数是奇数还是偶数,但是你亲爱的朋友可能在撒谎,问在哪个询问你能确定你的朋友在撒谎,输出回合数. 题解:假如区间$[l,r]$所含的奇数个数为偶数的话,那么其前缀和$s_$和$s_r$所含的$1$的个数一定同
阅读全文
摘要:题意:有$n$列,有$T$条指令,若指令格式为$M$,则将第$i$号的所有战舰移到第$j$号所在列的后面,若指令格式为$C$,询问$i$和$j$是否在同一列,如果在,问他们之间隔了多少战舰. 题解:带权并查集的模板题,$d$数组表示某个节点到祖先的距离,$s$数组表示集合的子节点个数,当进行合并时,
阅读全文
摘要:题意:有一长度为$n$的数组,求最多的区间和相同的不相交的区间的个数. 题解:我们可以先求一个前缀和,然后第一层循环遍历区间的右端点,第二层循环枚举左端点,用前缀和来$O(1)$求出区间和,$pos$表示当前区间和为$cur$的最右端点,如果我们枚举的左端点$j$比$pos[cur]$所在的最右端点
阅读全文
摘要:题意:有一个HP为$h$的大怪兽,你需要轮流进行$i$次操作.每次可以使$h+=d_i$($d_i$有正有负),当第$n$次操作完成后,再从第一次开始,问能否使得怪兽的HP变为$0$或更低,如果可以,输出操作次数,否则输出$-1$. 题解:我们首先求$d$的前缀和,如果在求的过程中就能使怪兽死掉的话
阅读全文
摘要:题意:在$x$轴上,你刚开始在$0$的位置,第$i$次操作需要走$A_1,...,A_i$个单位,如果$A_i$为正向右走,否则向左走,求你所能走到的最大坐标. 题解:我们一步一步来看: 第一次走:\(A_1\). 第二次走:\(A_1,A_2\). . . . 第$n$次走:\(A_1,A_2,.
阅读全文
摘要:题意:有两个字符串,两个字符串中的相同字符可以相互匹配,$?$可以和任意字符匹配,输出最大匹配的字符数量和它们分别两个字符串中的位置. 题解:很容易贪心,我们先遍历第一个字符串,然后在第二个字符串中去找与当前位置相同的字符,这个过程我们可以先将每个字符的位置存下来然后再操作,遍历完后再遍历字符和问号
阅读全文
摘要:题意:有一长度为$n$的序列$p$,现在给你$q_i=p_{i+1}-q_i \ (1\le i\le n)\(,问你是否能还原出原序列,如果能救输出原序列,否则输出\)-1$. 题解:由:\(q_i=p_{i+1}-p_i\),我们对其求前缀和可得:\(s_i=p_{i+1}-p_1\),然后再求
阅读全文
摘要:题意:有$n$个人,每个人的能力值是$a_i$,现在你想将这些人分成$k$组(没必要全选),但是每组中最高水平和最低水平的人的能力差值必须$\le 5$,问最多能选多少人. 题解:想了一会发现纯贪心写不了,必须要用dp来求解,先排序,我们记$dp[i,j]$,表示前$i$个人分成$j$组选的最多的人
阅读全文
摘要:题意:有一长度为$n(4\le n\le 3000)\(的数组,选择四个位置\)(i,j,k,l)\ (1\le i<j<k\le n)$,使得$a_i=a_k$并且$a_j=a_l$,问存在多少这样的元祖. 题解:$n$最大给了$3000$,所以时间复杂度最坏可以是$O(n^2)$,我们可以考虑枚
阅读全文
摘要:题意:给你一个字符串,每次可以调换现字符串的相邻两个字符,问最少操作多少次使得这个字符串等于其反转过来的字符串. 题解:先考虑字符串中没有相同字符的情况,那么我们每次将目前字符串的最后一个字符一直调换到前面就行,如果出现相同字符的话,先让最靠前的字符调换到对应位置一定是最优的.我们先记录原字符串中每
阅读全文
摘要:之前求逆序对一直用的都是归并排序的方法,后来发现大家都是用树状数组来求解的,因为树状数组不仅写起来简单,还可以动态维护一些东西. 对于一个序列,我们正向遍历他的所有元素,然后每次把当前元素插入到树状数组中,即$c[a[i]]=1$,然后看区间$c[a[i]],max(a[i])]$中有多少个已经被插
阅读全文
摘要:题意:有$r$X$r$的网格图,有$n$位名人,会在$t_i$时出现在$(x_i,y_i)$,如果过了$t_i$名人就会消失,从某一点走到另外一点需要花费的时间是它们之间的曼哈顿距离的值,你刚开始在$(1,1)$点,问你最多能给多少名人拍照. 题解:因为某个点是从另外一个点走过来的,所以我们不难想到
阅读全文
摘要:题意:求$n!$的每个因子的因子数. 题解:我们可以对$n!$进行质因数分解,这里可以直接用推论快速求出:https://5ab-juruo.blog.luogu.org/solution-p2043, 所以我们可以得到$n!=p^_1p^_2...p^_n$,然后根据约数定理,它的任意一个因子可以
阅读全文
摘要:题意:你和朋友进行了$n$个回合的棋艺切磋,没有平局,每次要么输要么赢,每次赢可以得一分,假如前一局也赢了,那么可以得两分,结果已成定局,但是你确可以作弊,最多修改$k$个回合的结果,问你作弊后最多可以得多少分. 题解:假如有$WLW$,我们让中间的$L$变成$W$,那么就能得到$5$分,贪心,然后
阅读全文
摘要:题意:有一个长度为$2n$数组,从中选分别选$n$个元素出来组成两个序列$p$和$q$,($p$和$q$中只要有任意一个元素在$a$的原位置不同,就算一个新的情况),选完后对$p$非降序排序,对$q$非升序排序,然后求它们每个元素对应位置的差的绝对值之和$re s=\sum^_1 |x_i-y_i|
阅读全文
摘要:题意:有两个数$p$和$q$,找到一个最大的数$x$,使得$p\ mod\ x=0$并且$x\ mod\ q\ne 0$. 题解:首先,如果$p\ mod\ q\ne0$,那么我们可以让$x=p$就行了,否则,就意味着,$p$可以被$q$整除,也就是说$p$的质因子包含了$q$的所有质因子,我们可以
阅读全文
摘要:题意:有一个长度为$n$的序列,可以任意取$k(1\le k\le n)$,对序列前$k$项或者后$k$减$1$,可以进行任意次操作,问是否可以使所有元素都变成$0$. 题解:贪心,我们优先考虑从左边减,如果当前项比后一项大$a_i>a_{i+1}$,那么我们一定可以从左边减,使得这个区间变为$0$
阅读全文
Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final) C. The Delivery Dilemma (贪心,结构体排序)
摘要:题意:你要买$n$份午饭,你可以选择自己去买,或者叫外卖,每份午饭$i$自己去买需要消耗时间$b_i$,叫外卖需要$a_i$,外卖可以同时送,自己只能买完一份后回家再去买下一份,问最少花多少时间能使午餐到家. 题解:我们可以用结构体记录每份午餐的外卖所需时间和自己拿的时间,然后贪心,对于某一份午餐,
阅读全文
摘要:题意:给你一个$01$串,需要将所有的$1$给炸掉,每次炸都可以将一整个$1$的联通块炸掉,每炸一次消耗$a$,可以将$0$转化为$1$,消耗$b$,问将所有$1$都炸掉的最小花费. 题解:贪心,如果$1$存在,那么我们至少要炸一次,然后可以枚举统计两个连通块之间的$0$的个数,判断是将这些$0$变
阅读全文
摘要:题意:给你一个正整数$n$,在$[1,4n]$中找出$n$个数,使得这$n$个数中的任意两个数不互质且不能两两整除. 题解:这题我是找的规律,从$4n$开始,往前取$n$个偶数就好了. 代码: int t; int n; int cnt; int main() { ios::sync_with_st
阅读全文
摘要:题意:有一长度为奇数$n$的数组$a$,和长度为$m$的数组$b$,现要求从$b$中选择一个数放到$a$中,并将$a$分成$(n+1)/2$个数对,求最小的所有数对差的和. 题解:我们从$b$中选一个数出来,只和$a$中的一个元素配对,剩下的依然是$a$中$n-1$个数两两配对,所以我们可以先求个前
阅读全文
摘要:题意:RT,给你四个数$a,b,c,d$,求$x+y+z=k$的方案数. 题解:我们可以先枚举$x$的值,然后$x+y$能取到的范围一定是$[x,x+b]$,也就是说这个区间内每个数都有一个贡献,所以我们可以通过枚举$a$并且利用差分来求出$x+y$的贡献,然后再复原前缀和,同理再枚举$x+y$,即
阅读全文
摘要:题意:给你一个长度为奇数$n$的序列.你可以对任意元素加上$k$次$1$,求操作后的中位数最大. 题解:先对序列进行排序,然后对中位数相加,如果中位数和后面的元素相等,就对后面所有和当前中位数相等的元素++,然后再对中位数++,不断往复这个过程就好了,具体看代码. 代码: int n; ll k;
阅读全文
摘要:题意:给你一个$n$x$m$的矩阵,可以对矩阵的所有元素进行$\pm d$,问能否使得所有元素相等. 题解:我们可以直接记录一个$nm$的数组存入所有数,所以$(a_1+xd)=(a_2+yd)=...=(a_{nm}+zd)$,我们但看任意一个等式可得:\(a_{x}+nd=a_{y}+md\),
阅读全文
摘要:题意:给你一颗树(边是无向的),从根节点向下走,统计走到每个子节点的概率,求所有叶子节点的深度乘上概率的和. 题解:每层子节点的概率等于上一层节点的概率乘$1$除以这层的子节点数,所以我们用$dfs$或者$bfs$都可以写,其实就是个搜索裸题,注意给的边是无向的就好了. 代码: 1.dfs: int
阅读全文
摘要:题意:给你一个长度为$n$的升序序列,将这个序列分成$k$段,每一段的值为最大值和最小值的差,求$k$段值的最小和. 题解:其实每一段的最大值和最小值的差,其实就是这段元素的差分和,因为是升序,我们可以先求出差分数组,然后再对差分数组排序,因为我们可以分成$k$段,所以会有$k-1$个断开的'缝隙'
阅读全文
摘要:题意:给你$n$个点,求这$n$个点中,曼哈顿距离和欧几里得距离相等的点对数. 题解: 不难发现,当两个点的曼哈顿距离等于欧几里得距离的时候它们的横坐标或者纵坐标至少有一个相同,可以在纸上画一画,当两点不满足上文所说的情况时,他们的曼哈顿距离一定大于直线距离,因为三角形的两边必定大于第三边,然后我们
阅读全文