自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(107)
  • 收藏
  • 关注

原创 LIS(最长上升子序列)与LCS(最长公共子序列)

做法一:使用动态规划,我们定义dp[i]为以arr[i]结尾的最长上升子序列的长度。做法二:我们如果仅仅需要求出最后的结果,可以考虑贪心+二分查找来优化。我们对于遍历到的每一个元素,我们都在dp数组中去寻找第一个大于等于它的元素,如果没有,代表它最大,所以直接加入dp,如果找到,则更新这个位置为当前元素,以此来保证为未来提供更小的末尾序列。

2025-08-08 20:06:27 272

原创 P1886 滑动窗口 /【模板】单调队列

窗口位置[1 3 -1] -3 5 3 6 7 1 [3 -1 -3] 5 3 6 7 1 3 [-1 -3 5] 3 6 7 1 3 -1 [-3 5 3] 6 7 1 3 -1 -3 [5 3 6] 7 1 3 -1 -3 5 [3 6 7]​最小值−1−3−3−333​最大值335567​​。对于 100% 的数据,1≤k≤n≤106,ai​∈[−231,231)。

2025-07-11 18:41:24 337

原创 P1725 琪露诺(动态规划+单调队列优化)

每当我们来到一个位置i,我们就对当前区间的范围进行维护,由于我们存入队列中的下标是从小到大的,所以我们队列前面的下标比后面的小,如果当前队列中队首元素比限制区间左端点小,那么我们就将其出队。我们发现,针对每一个位置i,我们都会去搜索i-R到i-L,但我们发现,当i每次往后移动一下时,我们需要遍历的区间也只是往后移动了一下,所以我们只需要维护住i-R到i-L的最大值就可以了,由于每次区间只是往后移动了一下,所以这个维护是非常简单的,采取单调队列进行维护。你问为什么她这么移动,这还不简单,因为她是笨蛋啊。

2025-07-11 17:49:01 613

原创 P1020 [NOIP 1999 提高组] 导弹拦截(动态规划+二分查找)

对于第二问,我们需要多少个系统,我们即是要求最长上升子序列,因为在这个子序列中,每一个前面的数都不可能和后面的一个数在一个系统中,所以我们需要将每个数都分到不同的系统中。我们维护一个数组len2[i],表示最长上升子序列长度为i时,结尾的数最小值为len2[i],我们可以知道len数组时单调递增的。我们维护一个数组len[i],表示最长不上升子序列长度为i时,结尾的数最大值为len[i],我们可以知道len数组是单调不增的。对于全部数据,满足导弹的高度为正整数,且不超过 5×104。

2025-07-08 16:14:09 577

原创 P2392 kkksc03考前临时抱佛脚(动态规划)

因此要开始刷习题集,每科都有一个习题集,分别有 s1​,s2​,s3​,s4​ 道题目,完成每道题目需要一些时间,可能不等(A1​,A2​,…,As1​​,B1​,B2​,…,Bs2​​,C1​,C2​,…,Cs3​​,D1​,D2​,…第 2 行,为 A1​,A2​,…,As1​​ 共 s1​ 个数,表示第一科习题集每道题目所消耗的时间。本题包含 5 行数据:第 1 行,为四个正整数 s1​,s2​,s3​,s4​。,Ds4​​ 共 s4​ 个数,意思均同上。第 4 行,为 C1​,C2​,…

2025-07-03 17:05:19 457

原创 P3842 [TJOI2007] 线段(动态规划)

我们首先对于第一行来说,如果走完当前线段,那么要么停留在左端点,要么停留在右端点。对于下一行,我们任然要走完线段,此时若停留在右端点,则会产生两种情况:从上一行的左端点下来,走完当前线段,停留在右端点;dp[i][1]为在当前i行,走完线段后,停留在左=右端点的最小距离。在一个 n×n 的平面上,在每一行中有一条线段,第 i 行的线段的左端点是 (i,Li​),右端点是 (i,Ri​)。你从 (1,1) 点出发,要求沿途走过所有的线段,最终到达 (n,n) 点,且所走的路程长度要尽量短。

2025-07-02 20:28:59 407

原创 P1077 [NOIP 2012 普及组] 摆花(动态规划)

为了在门口展出更多种花,规定第 i 种花不能超过 ai​ 盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。规定了必须按照花的编号从小到大摆,那么我们需要先遍历花的种类,我们对目标盆数从小到大遍历,为了不对之前所做的选择覆盖,我们开辟二维数组对先前的结果进行维护。对于 100% 数据,有 0<n≤100,0<m≤100,0≤ai​≤100。对于 50% 数据,有 0<n≤20,0<m≤20,0≤ai​≤20。对于 20% 数据,有 0<n≤8,0<m≤8,0≤ai​≤8。

2025-07-02 14:17:00 359

原创 P4017 最大食物链计数(拓扑排序)

进一步,我们将结果一般化:如果我们需要找到到达a点的所有方式,那么我们需要考虑和它直接相连的每个前一个点,只要将到达前一个点的方式都加起来,便是到达a点的方式。我们初始化生产者的到达方式为1,采取队列来进行操作,首先将所有生产者加入队列,然后依次从队列出取出,并遍历和它相连的每一个点,并将它的值附加到每一个点上,并将其删掉,如此循环。Delia 生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条。接下来 m 行,每行两个正整数,表示被吃的生物 A 和吃 A 的生物 B。

2025-06-28 20:07:07 293

原创 P1434 [SHOI2002] 滑雪(记忆化搜索)

可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。在上面的例子中,一条可行的滑坡为 24−17−16−1(从 24 开始,在 1 结束)。需要知道最长的路径,我们可以想到要使用深搜,但是如果在数据量很大的情况下针对每一个点都进行深搜肯定会超时,我们考虑在每次进行搜索时,将路径上的其它点也进行记录。我们维护一个record数组,来记录从每个点出发的最长路径。我们在进行DFS时,如果当前点已经被搜过,那么直接返回,如果没有,就将其置为1,然后进行搜索。

2025-06-28 18:09:09 338

原创 P2196 [NOIP 1996 提高组] 挖地雷(DFS->动态规划)

第 3 行有 n−1 个数(0 或 1),表示第一个地窖至第 2 个、第 3 个 …如第 3 行为 11000⋯0,则表示第 1 个地窖至第 2 个地窖有路径,至第 3 个地窖有路径,至第 4 个地窖、第 5 个 …我们定义dp[i]为从i节点出发可以得到的最大地雷数,那么我们可以知道,dp[i] = max(nums[i],nums[i]+dp[j]),其中j大于i。第 n+1 行有 1 个数,表示第 n−1 个地窖至第 n 个地窖有否路径连接。第 1 行只有一个数字,表示地窖的个数 N。

2025-06-28 00:10:59 959

原创 P1048 [NOIP 2005 普及组] 采药(01背包)

我们需要在规定时间内得到价值总和最大的草药,我们所拥有的条件是草药的种类和对应草药的时间。(t代表着当前草药需要的时间,v代表当前草药的价值),那么问题来了,如果由于dp[T-t]比T小,那么它一定会被修改过,那么现在再进行这种操作,就会产生重复。第一行有 2 个整数 T(1≤T≤1000)和 M(1≤M≤100),用一个空格隔开,T 代表总共能够用来采药的时间,M 代表山洞里的草药的数目。显然不行,因为如果我们当前遍历到后面的dp[T],那么我们会进行max(dp[T],dp[T-t]+v)的选择。

2025-06-26 22:16:57 745

原创 P2834 纸币问题 3(动态规划)

你是一个非常有钱的小朋友。注意: 本题和《进阶篇》的对应题目,输入格式略有差异。你有 n 种面额互不相同的纸币,第 i 种纸币的面额为 ai​ 并且有无限张,现在你需要支付 w 的金额,请问有多少种纸币组合能恰好支付金额 w,答案对 109+7 取模。第一行两个正整数 n,w,分别表示纸币的种数和要凑出的金额。第二行一行 n 个以空格隔开的正整数 a1​,a2​,…an​ 依次表示这 n 种纸币的面额。一行一个整数,表示能恰好凑齐面额 w 的纸币组合数量。输入 #16 151 5 10 20 50 1

2025-06-26 20:40:30 631

原创 P2840 纸币问题 2(动态规划)

注意:我们需要将dp[0]设置为1,因为如果我们现在需要组成面额为5,然后纸币中又恰有5,那么此时dp[5] = dp[5] + dp[0]。dp[0]=1的意义就是,我现在要组成面额为0,显然只有一种方案,就是不要任何纸币。你有 n 种面额互不相同的纸币,第 i 种纸币的面额为 ai​ 并且有无限张,现在你需要支付 w 的金额,求问有多少种方式可以支付面额 w,答案对 109+7 取模。跟上一个版本类似,我们需要将比目标面额小的面额的组成方式找到,这样我们便可得出目标面额的组成方式。其实小朋友并不有钱。

2025-06-25 21:44:28 414

原创 P2842 纸币问题 1(动态规划)

我们如果需要得目标T最少需要多少张,那么我们可以考虑T-k最少需要多少张(k为已有的纸币的面额),因为这样的话,我们便可直接在此基础上加1得到。某国有 n 种纸币,每种纸币面额为 ai​ 并且有无限张,现在要凑出 w 的金额,试问最少用多少张纸币可以凑出来?由于要求最小数量,所以,我们需要将当前的dp[i]和dp[i-k](k为目前遍历到的面额)作比较,取最小的即可。对于 100% 的数据,满足 1≤n≤103,1≤ai​≤w≤104。我们规定dp[i]为得到面额为i时,需要的最少纸币数。

2025-06-25 20:14:54 447

原创 (洛谷)P4447 [AHOI2018初中组] 分组

所以我们需要维护每个组的状态,但是我们又不需要维护每个数,由于一开始对数组进行了排序,所以我们只需要维护每个组的最后一个数。那么意味着,如果我现在有多个分组的人具备x的实力值的人,此时来了一个x+1实力值的人,因为要最大化最少人数的拿个分组的人数,那么我们的贪心策略就是:要将此时这个x+1实力值的人放到当前人数最小的组中。如果有小组内人数太少,就会因为时间不够而无法获得高分,于是小可可想让你给出一个合法的分组方案,满足所有人都恰好分到一个小组,使得人数最少的组人数最多,输出人数最少的组人数的最大值。

2025-06-24 20:24:16 419

原创 (洛谷)P5019 [NOIP 2018 提高组] 铺设道路

对于每一个数(记为a),如果比前一个数(记为b)大,那么当前一个坑被填好,这个数必然还需要额外的时间填充,也就是a-b;思路:由于每次填充的区域要么是一个,要么是连续的,所以为了最小化填充时间并且考虑到数据的连续性,我们在遍历到一个数时,就考虑前一个数,这样当遍历完所有数,连续性就都考虑到了。一种可行的最佳方案是,依次选择: [1,6]、[1,6]、[1,2]、[1,1]、[4,6]、[4,4]、[4,4]、[6,6]、[6,6]。对于 30% 的数据,1≤n≤10;NOIP2018 提高组 D1T1。

2025-06-24 14:26:29 633 2

原创 链表---

第 2∼N 行,第 i 行包含两个整数 k,p,其中 k 为小于 i 的正整数,p 为 0 或者 1。若 p 为 0,则表示将 i 号同学插入到 k 号同学的左边,p 为 1 则表示插入到右边。2∼N 号同学依次入列,编号为 i 的同学入列方式为:老师指定编号为 i 的同学站在编号为 1∼(i−1) 中某位同学(即之前已经入列的同学)的左边或右边;接下来 M 行,每行一个正整数 x,表示将 x 号同学从队列中移去,如果 x 号同学已经不在队列中则忽略这一条指令。第一行一个整数 N,表示了有 N 个同学。

2023-08-17 13:01:19 378

原创 二分答案典型

请注意,公路的起点和终点保证已设有路标,公路的长度为整数,并且原有路标和新设路标都必须距起点整数个单位距离。将与起点距离为 22和 1414 的两个岩石移走后,最短的跳跃距离为 44(从与起点距离 1717 的岩石跳到距离 2121 的岩石,或者从距离 2121 的岩石跳到终点)。第一行包含三个整数 L,N,M,分别表示起点到终点的距离,起点和终点之间的岩石数,以及组委会至多移走的岩石数。第 11 行包括三个数 L,N,K,分别表示公路的长度,原有路标的数量,以及最多可增设的路标数量。

2023-08-16 23:17:16 436

原创 简单的异或(前缀和+位运算)

因为要使最后的异或结果尽可能的大,所以我们考虑每一个数每一位中1出现的次数多还是0出现的次数多。给出一个数组a,长度为n,分别为a1​,a2​,a3​,...an−1​,an​。我们直接用一个二维数组,sum[i][j],其中i表示第i个数,j表示此数是二进制下从左往右数第j位。对于每次访问,给出一个整数 x(x

2023-08-16 22:40:00 649

原创 换根DP(并查集)

以节点 4 作根时, f(4)=w(4,1)+w(4,2)+w(4,3)+w(4,5)=gcd(1,2)+gcd(1,2,2)+1+2=1+1+1+2=5。令f(t) 表示为节点 t 到树上其他节点的距离之和。接下来 n−1 行,每行三个正整数 u,v,w (1≤u,v≤n,1≤w≤2),代表 u 和 v 之间有一条权值为 w 的无向边。输出一行一个正整数,代表min(f(1),f(2),f(3)…第一行包含一个正整数 n(1≤n≤105),代表这棵树的节点数量。求 min(f(1),f(2),…

2023-08-15 13:58:59 324

原创 快速幂典型

求 a 的 b 次方对 p 取模的值,其中0≤a,b,p≤109​,p>0。求 a 乘 b 对 p 取模的值,其中 1≤a,b,p≤1018。一个整数,表示a×bmodp的值。三个用空格隔开的整数a,b和p。一个整数,表示abmodp的值。第一行a,第二行b,第三行p。

2023-08-15 12:19:44 206

原创 牛客 游游的选数乘积(双指针)

游游拿到了一个数组,她准备在其中选择两个数,使得乘积的末尾至少有x个0。游游想知道,至少有多少种不同的取数方法?第一行输入两个正整数n和x,代表数组的大小以及乘积末尾0的数量。第二行输入n个正整数ai​,代表游游拿到的数组。输出一个整数,代表游游选择的方案数。50*80=4000,末尾有3个0。有以上3种方案满足乘积至少有2个0。5*80=400,末尾有2个0。50*2=100,末尾有2个0。

2023-08-15 00:30:30 696

原创 牛客 游游的正整数(思维)

游游拿到了一个正整数a,她每次操作可以选择将a加上x,但必须满足l≤x≤r。游游想知道,最少需要多少次操作,最多需要多少次操作?第三组询问,操作2次的方案:先加3再加5(方案不唯一)。操作4次的方案:加4次2。第一组询问,操作一次的方案:直接使a加5。操作2次的方案:先加2再加3。否则输出两个整数,分别代表最少操作次数和最多操作次数。第二组询问,由于只能加2,显然无法使得1变成4。如果无论如何都不能让a等于b,则输出-1。每组询问输入四个正整数a,b,l,r。对于每组询问,输出一行答案。

2023-08-14 22:51:15 655

原创 牛客 计数问题

八种方案分别为(1,1,1,3),(1,1,3,1),(1,2,1,2),(1,2,2,1),(1,3,1,1),(2,1,1,2),(2,1,2,1),(3,1,1,1)两个方案不同当且仅当A、B、C、D至少有一个数字不同,例如1∗1+3∗11*1+3*11∗1+3∗1和1∗1+1∗31*1+1*31∗1+1∗3是不同的两个方案。其次,你需要给出有多少种方案,使得A、B、C、DA、B、C、DA、B、C、D四个数字都是正整数且A∗B+C∗D=nA*B+C*D=nA∗B+C∗D=n。

2023-08-12 22:02:03 327

原创 牛客 松鼠回家(二分答案+最短路)

松鼠宝宝由于贪玩去了一个具有n个点和m条边的无向图中,现在松鼠宝宝仅有h点体力,所有的边经过一次后会消耗部分体力,同时松鼠爸爸为了惩罚贪玩的松鼠宝宝,每到一个点会扣除部分松果(起点的松果也会扣除)。第一行读入五个数n,m,st,ed, h(分别无向图的点数,边数,起点位置,家的位置,开始时候的体力)接下来m行读入x,y,z(分别代表无向边的两点和路上所消耗的体力)输出一行代表最大扣除数量的最小值,若无法到达,则输出-1。接下来一行读入n个数ai(每个点所扣除的松果数量)学习学长用bfs来写最短路。

2023-08-12 20:58:14 283

原创 中位数(树状数组+二分)

某天cbyyx突发奇想给lyt出了一道题:给定序列a,b,保证|a|+|b|为奇数且小于1e6,给定q组询问,每次将a序列其中一个数修改或将b序列其中一个数修改,问每次操作后两序列合并后的中位数是多少,lyt觉得这个问题太简单并把它秒了,但lyt觉得这个题对新生来说有点困难,于是他简化问题如下:给定两个正整数n,m,再给定长度为n的正整数序列a, 保证n为奇数。接下来m行,每行两个正整数p, x。接下来m行每行给定两个数p,x,表示将a[p]修改为x。对于每次操作输出每次操作后序列的中位数的值。

2023-08-10 23:59:53 351

原创 牛客 迷宫探险

在与boss的最终决战之后,小蓝来到了冒险的最后一关,在他面前有一个n*m的迷宫,迷宫中道路用’.’表示,墙壁则由‘#’表示。当走到有弹射器的一格时,小蓝必须选择一个方向,弹射器会让他沿着这个方向弹射 x个距离,不同弹射器的弹射距离可以不同。可能这样可以找到最优解?接下来一行一个整数k,下面的k行每行三个整数x, y, w表示在[x,y]格子的弹射器能弹射的距离。第一行两个整数 n, m,接下来n行,每行m个只包含’.’,’*’,’#’的字符描绘迷宫。弹射器的数量,位置和弹射距离将在输入中给出。

2023-08-10 22:38:34 257

原创 松鼠排序(并查集)

松鼠宝宝有一排n个大小不一的坚果,松鼠宝宝想把坚果从小到大排序,每次他会选择两个坚果a和b每次花费1点力气把这两个坚果交换,爱动脑筋的松鼠宝宝想知道他排完这n个坚果一共需要花费的最少力气是多少?接下来一行n个整数代表每个坚果的大小(每个坚果大小都不一样,即大小为1-n的一个排列)一行输出代表松鼠宝宝花费的最小力气。第一行一个整数n代表坚果数。坚果大小x,1

2023-08-10 20:39:27 211

原创 B3618 寻找团伙(异或和或的理解+dfs)

你的计划很宏伟,因此你希望团队拥有很全面的能力。不幸的是,如果团队中有偶数个人拥有同一类能力,那么他们就会分成两派,争执不下,导致整个团队丧失这方面的能力。相应地,如果这项能力只有奇数个人拥有,那么他们总能形成一个多数派,帮团队去做这方面的工作。需要注意的是,团队拥有的每一项能力,对计划的成功率的贡献是不一样的。要办这件事,一共涉及 k 方面的能力,例如游说他人的能力、玩游戏的能力、睡觉的能力。第一组样例,共 5 个人,每个人拥有的能力不一样。分别表示供你挑选的人的数量,以及能力的种类数。

2023-08-09 22:26:45 389

原创 牛客 树上DP

在搜索的过程中就把所在的层数给算出来,当前点的层数便是上一个点的层数加一(算是简单的动态规划吧)。该树的美丽值计算过程为:以1为根的子树权值和+以2为根的子树权值和+以3为根的子树权值和+以4为根的子树权值和=24+19+6+7=56。最后一行包含 n 个正整数a1,a2,a3,...,an(1≤ai≤1×105),表示每个节点的权值。任意相邻节点的权值,定义一棵树的美丽值为该树的所有子树的节点的权值和的总和,求美丽值最大值为多少?可以先交换节点2,3上的权值, 再交换节点1,2上的权值。

2023-08-09 17:48:38 213

原创 R119772795 记录详情

他们必须打开一个洞,不管他们打开哪个洞,他们都会到达一个他们已经到达的状态。例如,如果他们从第二个洞中取出岩石,他们将到达他们在时间 22 已经访问过的状态(的定义是哪些洞被石头覆盖,哪些洞没有覆盖。游戏的目标是让奶牛准确地到达每个可能的游戏状态一次,然后返回到所有洞都没有覆盖的状态。,该行中的第 i 个字符表示第 i 个孔在此状态下是被覆盖还是未覆盖,第一行和最后一行必须全部都是。共 2n+1 行,每行一个长度为 n 的字符串,其中只包含字符。一头母牛要么用石头盖住一个洞,要么揭开一个先前被盖住的洞。

2023-08-09 00:29:38 185

原创 南蛮图腾(反转坐标系模拟)

自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往往有着一种分形的效果,在得到了酋长的传授后,孔明掌握了不少绘图技术,但唯独不会画他们的图腾,于是他找上了你的爷爷的爷爷的爷爷的爷爷……帮忙,作为一个好孙子的孙子的孙子的孙子?每个数据输入一个正整数 n,表示图腾的大小(此大小非彼大小)给定一个正整数 n,参考输出样例,输出图形。数据保证,1≤n≤10。

2023-08-08 19:11:21 326

原创 P1162 填涂颜色(染色法)

由数字 0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 1 构成,围圈时只走上下左右 4 个方向。现要求把闭合圈内的所有空间都填写成 2。接下来 n 行,由 0 和 1 组成的 n×n 的方阵。每组测试数据第一行一个整数 n(1≤n≤30)。方阵内只有一个闭合圈,圈内至少有一个 00。对于 100%的数据,1≤n≤30。已经填好数字 2 的完整方阵。第一次看到染色法,太强了。

2023-08-07 22:12:37 356

原创 P8604 [蓝桥杯 2013 国 C] 危险系数

对于两个站点 x 和 y(x=y), 如果能找到一个站点 z,当 z 被敌人破坏后,x 和 y 不连通,那么我们称 z 为关于 x,y 的关键点。相应的,对于任意一对站点 x 和 y,危险系数 DF(x,y) 就表示为这两点之间的关键点个数。我们考虑找出所有的路线,如果一个点是关键点,则此点绝对会出现在每一条路线中,故我们在dfs的过程中记录下每个点被走过的次数。输入数据第一行包含 2 个整数 n(2≤n≤1000),m(0≤m≤2000),分别代表站点数,通道数。蓝桥杯 2013 年第四届国赛。

2023-08-07 20:44:41 797

原创 P9011 [USACO23JAN] Air Cownditioning II B(dfs+差分)

谷仓包含 M 台空调,标记为 1−M (1≤M≤10)。第 i 台空调需要花费 mi​ 单位的金钱来运行 (1≤mi​≤1000) ,如果运行,第 i 台空调将牛栏 [ai​,bi​] 所有牛栏的温度降低 pi​(1≤pi​≤106)。对于 100%100% 的数据,1≤N≤20, 1≤M≤10, 1≤ai​,bi​,si​,ti​≤100, 1≤ci​,pi​≤106,1≤mi​≤1000。第 (N+2) 至 (M+N+1) 行,每行四个整数, 分别为 ai​、bi​、pi​ 和 mi​。

2023-08-06 23:25:53 2751

原创 洛谷 P3375 【模板】KMP 字符串匹配

给出两个字符串 s1​ 和 s2​,若 s1​ 的区间 [l,r] 子串与 s2​ 完全相同,则称 s2​ 在 s1​ 中出现了,其出现位置为 l。最后一行输出 ∣s2​∣ 个整数,第 i 个整数表示 s2​ 的长度为 i 的前缀的最长 border 长度。对于全部的测试点,保证 1≤∣s1​∣,∣s2​∣≤106,s1​,s2​ 中均只含大写英文字母。对于 s2​,你还需要求出对于其每个前缀 ′s′ 的最长 border ′t′ 的长度。的子串 t,满足 t 既是 s 的前缀,又是 s 的后缀。

2023-08-06 21:56:46 190

原创 洛谷 P1470 [USACO2.3] 最长前缀 Longest Prefix(KMP+前缀和)

设计一个程序,输入一个元素集合以及一个大写字母序列 ,设 ′s′ 是序列 s 的最长前缀,使其可以分解为给出的集合 P 中的元素,求 ′s′ 的长度 k。如果一个集合 P 中的元素可以串起来(元素可以重复使用)组成一个序列 s ,那么我们认为序列 s 可以分解为 P 中的元素。输入数据的开头包括若干个元素组成的集合 O,用连续的以空格分开的字符串表示。对于 100% 的数据,1≤card(P)≤200,1≤∣S∣≤2×105,P 中的元素长度均不超过 10。的行,集合中的元素没有重复。

2023-08-06 17:16:10 515

原创 洛谷 P3144 [USACO16OPEN] Closing the Farm S(并查集+逆向思维)

FJ 现在正感兴趣于知道在每一个时间(这里的“时间”指在每一次关闭谷仓之前的时间)时他的农场是否是“全连通的”——也就是说从任意的一个开着的谷仓开始,能够到达另外的一个谷仓。这个农场一共有被用 M 条双向道路连接的 N 个谷仓(1≤N,M≤3000)。当一个谷仓被关闭了,所有的连接到这个谷仓的道路都会被关闭,而且再也不能够被使用。接下来 M 行,每行两个整数 u,v(1≤u,v≤N),描述一条连接 u,v 两个农场的路。第一行输出最初的状态,第 i 行(2≤i≤N)输出第 i−1 个农场被关闭后的状态。

2023-08-05 18:10:47 1513

原创 codeforces Split Into Two Sets

刚通过囚犯那个题学了种类并查集,以为自己理解了,但是完全不知道为什么这个题是种类并查集,难道把每个牌上的两个数字想象成敌对关系?

2023-08-04 21:44:05 427

原创 洛谷P1525 关押罪犯(种类并查集)

第一行为两个正整数 $N$,$M$,分别表示罪犯的数目以及存在仇恨的罪犯对数。接下来的 $M$ 行每行为三个正整数 $a_j$,$b_j$,$c_j$,表示 $a_j$ 号和 $b_j$ 号罪犯之间存在仇恨,其怨气值为 $c_j$。数据保证 $1< a_j \leq b_j \leq N$, $0 < c_j \leq 10^9$,且每对罪犯组合只出现一次。他们之间的关系自然也极不和谐。如果两名怨气值为 $c$ 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为 $c$ 的冲突事件。

2023-08-04 21:17:40 222

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除