自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 牛客周赛 Round 99 EF

思路:要使每个小朋友的按位与最大,我们可以从高位向低位贪心,如果(1<<i)*m<=n则说明第i个二进制位在m个小朋友上都为1,反之,第i个二进制位在m个小朋友上并不都为1,我们需要计算出最多有多少个1在第i位上,如果((1<<i)-1)*m<n,那么多出的糖果n-((1<<i)-1)*m(向上取整)就要位于第i位。

2025-07-07 22:27:48 212

原创 P1903 [国家集训队] 数颜色 / 维护队列(单点修改莫队)

与基础莫队的区别在于需要多维护一个变量---时间,用于标记修改操作的时间T,当每次询问区间[ L,R]时,我们就要把时间点调整到这个询问所处的时刻T。分块排序时,将T作为最不优先的判定。即在初级莫队算法的基础上,排序时多考虑一个时间T。每次区间查询时,将时间T调整到当前区间所处时间,再进行和初级莫队一样的查询操作。块,而不是基础莫队算法的 sqrt(n) 个块;利用分块算法将给定的 n 个数分成。

2025-05-27 19:34:15 249

原创 AtCoder Beginner Contest 407 ABCDEF

思路:单调栈+差分。我们可以先用单调栈求出Ai的贡献范围,即以Ai作为最大值的区间为[L,R],左端点pl在[L,i],右端点pr在[i,R],此时区间对应长度的范围为[i-pl+1,R-pl+1],ai可以对长度为[i-pl+1,R-pl+1]的区间造成贡献,我们可以使用差分来维护,如果每次都是枚举左端点或右端点,时间复杂度为O(n*n),优化方法就是,每次看L,R哪个离i更近,哪个更近就枚举哪个,这样时间复杂度为O(nlogn)。)个'(',整个序列中恰好有n个左括号,那么既然一个序列至少要保证有(

2025-05-26 09:53:46 647

原创 2025ICPC南昌邀请赛补题

字符串前缀哈希:我们用array<int,30> 记录前i个字符,每个字符出现的次数对k进行取模,对每个不同的array<int,30>进行哈希处理,用a[i]表示前i个字符的哈希值,如果[L,R]是一个合法区间,那么一定存在前缀(L-1)等于前缀R。题目大意: 给你一个带权有向图,有q次询问,每次给你起始点p,和一个值x,每走一步都要除以这条边权,结果向下取整,问你从p出发最少走多少步可以使x变为0。题目大意:给你一个01字符串,选择一个有k个1的区间,将其进行重排,问可以获得多少个不同的字符串。

2025-05-25 13:52:26 465

原创 D. Graph and Graph(两个图同时Dijkstra)

思路:最小代价只有当两个图有两个相同编号的点连接时才会产生,否则就会无穷大,所以我们要标记两个图所有由一条边相连相同的编号,然后这个问题就转换成求从两个起点出发,到达同一终点的最短路径,我们可以将图1在u 点,图2在v 点的这一状态 ( u , v ) 视为一个点,每一次操作视为边,边权即为 ∣ ut − vt ∣ ,然后跑一边Dijkstra,得到从源状态到每一个状态的最小代价,最终我们只需要在所有之前标记过的编号中找一个最小值就行了。

2025-05-16 14:59:49 260

原创 2022 Hubei Provincial Collegiate Programming Contest

事实证明不应该听队友的),要是速度最小,路程就要最小,我们直接算出非急救站的点到最近的急救站的距离,这样一来一回可以使路程最小,然后在所有非急救站中选一个最大值,然后急救站之间也要连通,所以用最小生成树,可以计算出最大边,然后就可以得到结果了。题目大意:给你n个点,m条边,其中k个点为急救站,你可以从任意一个急救站出发,一条路径可以重复走,但要在满足到达下一个急救站之前所走的路径S,除以速度V得到的时间小于等于t的情况下,走完每一个点,求出满足条件的最小的速度v。

2025-05-15 16:46:52 313

原创 TCPC Tunisian Collegiate Programming Contest 2022

【代码】TCPC Tunisian Collegiate Programming Contest 2022。

2025-05-14 14:18:58 254

原创 M. Moving Both Hands(反向图+Dijkstra)

原理:由于两点均可移动,所以一定存在点p,使得s->p,p<-t,此时在第二层中建反向图p<-t转换成p->t,相当于直接从起点s跑单源最短路,而两层间对应点间全值为0的边,表示当前点为相遇点。思路:反向建图,第一层建原图,第二层建反向图,两层中对应点之间连接一条权值为0的边,最终答案为第一层的1号点到第二层i号点的最短路。题目大意:给你一个有向图,起始点在1,问起始点分别与另外n-1个 点相遇的最短时间,无法相遇输出-1。

2025-05-11 23:38:56 250 2

原创 D. Explorer Space(dfs+剪枝)

思路:既然走k步后要回到起始点,则k一定要为偶数,若为奇数则每个点输出-1,否则我们只需要求从起始点走k/2步的最小路程,注意这里不能使用Dijkstra,因为可以重复走某些点,Dijkstra走过的点如果不进行标记容易超时,所以我们考虑使用dfs+记忆化,设置一个记忆化数组dp[i][j][c]表示(i,j)这个位置再走c步的最小路程。题目大意:给你一个n行m列的矩阵,以及每个点上下左右相邻点的边权,求出每个点任意走k步后再回到当前这个点的最小路程,如果不能回到起始点则输出-1。

2025-05-11 21:09:05 404

原创 饮水计划(ST表+二分+差分)

思路:看数据范围肯定是需要预处理出每个区间的k的个数。遍历每个区间[i,j],k=j,求出[i,j]的最大值mx,再二分求出[j+1,n]中满足[j+1,mid]的最小值>=mx,并且mid要尽可能大(区间最值可以用st表来求,时间复杂度O(1)),然后求得区间[i,j+1]~[i,mid]的k的个数要加1,可以用差分来算,然后求前缀和就行了。这道题会卡“endl”换成 '\n' 就行了。

2025-05-10 12:51:17 392

原创 D. Paint the Tree(思维+dfs)

思路:既然要将树全部染成蓝色,那么A一定比B染色更快,我们要尽可能快的让B到达已经被染红的节点,一旦到达某个红色节点,我们就可以将问题转换为从该节点出发,用最少步数走完所有节点,答案显然是边数*2-最长路径长度,所以我们要B到达染红节点的最短时间,我们可以存储A到B这条路径上的所有节点,以及A到B的距离,由于每次两个节点都要移动,所以B到达染红节点的最短时间就是这条路径长度的中点处(distAB+1)/2,然后根据这条路径存储的节点找到中点处的节点,再对该节点进行dfs找出最长路径,即可得到答案。

2025-05-10 10:19:27 163

原创 A. Row GCD(gcd的基本性质)

所以我们需要先处理出gcd(|a2-a1|,|a3-a1|,......|an-a1|),再每次与a1+bj进行gcd就可以得到答案了。结合题目所给的a1+bj,a2+bj...... an+bj。

2025-05-08 20:54:28 356

原创 B. Zero Array(思维)

思路:每次给任意两个不同下表的数减-1,相当于在这个数组总和S上减2,S为奇数则不可能变为0,S为偶数时,一定存在两个序列组成两个S/2,这样每次都是在两个S/2上各减1,减S/2次刚好所有数为0,如果存在一个数大于S/2那么最后一定不能减到0。

2025-05-08 19:02:09 215

原创 B. Spreadsheets

【代码】B. Spreadsheets。

2025-05-07 21:21:59 282

原创 2024昆明邀请赛J. The Quest for El Dorado (ST表+Dijkstra)

最后输出所有能走到的位置。思路:思路很好想,用小顶堆存{第i张票序号、这张票已经走过的路程,顶点} ,每次遍历当前这个点的邻接点,如果与上一次的管理者相同则看这张票的剩余路程是否大于这条边的长度,否则就要查找[i+1,k]这个区间中第一个管理者为A,且长度大于等于B的票,可以通过对每个管理者的车票路程长度 B 建ST表,二分查找解决。

2025-05-06 11:22:54 594

原创 牛客周赛 Round 91 EF

思路:模拟,能够翻转成功就三种情况:(1)矩阵只有两行全是1 (2)矩阵只有两列全是1 (3)矩阵的1呈现”十“字状,且交点为0思路:根据唯一分解定理:可知一个数的为本题要我们求n!的因子个数,n!=(n-1)!*n,n!可以分解成形如:,括号内的代表(n-1)!的分解,外面的是n的因数分解,那么n!的因数分解就是将原来(n-1)!中已经出现过的底数进行指数相加,然后再增加新的底数,化简为:,n!

2025-05-02 14:29:01 633

原创 Train Wreck 入栈出栈 -> 建树

思路:将此题的入栈出栈看成一个建树的过程,假设有一个虚拟源点0为根节点,遇到‘(’时入栈,开辟新节点,遇到‘)’时出栈退回栈中一个位置,由此可以建出一棵树。为保证序列唯一,我们应当使每个节点的儿子节点的序号都不一样,这里我们可以使用贪心的思想,每次将出现次数最多的数字赋值给这个节点,每次赋值都要弹出出现次数最多的数,这里可以使用大顶堆,遍历完子节点后,更新大顶堆,然后再递归子节点,如果大顶堆为空不能进行赋值了,那么就输出“NO",否则可以输出合法序列。问是否可行,如果可行输出进栈颜色方案。

2025-05-02 13:50:06 242

原创 牛客周赛Round 88 补题G(树上前缀和,树形dp)

例如:当x=5,y=3时,x的叶子节点的数组下标为2~3,所以当我们求其他叶子节点的最大价值时,就是在求区间【1,Lx-1】的前缀和最大值,和区间【rx+1,idx】的后缀最大价值。2.当我们将x接到y处时,整棵树最大叶子节点的价值将是max(除x以外的叶子节点价值,x叶子节点更新后的价值,x的父亲节点是否为新的叶子节点的价值)更新后的x叶子节点价值为pre[y]+x的子树最大价值,所以我们还需要通过自底向上求出每个节点子树的最大价值。如何求除x以外的叶子节点价值呢?

2025-04-09 15:05:22 446 2

原创 CF Petya and Array(前缀和+逆序对+离散化)

【代码】CF Petya and Array(前缀和+逆序对+离散化)

2025-04-09 12:08:11 176

原创 钉耙编程(3)补题

主要还是运用哈希映射+并查集的思想,我们可以对部落设置两个数组,h[a]用来表示编号为a的部落在哪个位置上,tribe[h[a]]表示在h[a]位置上的部落编号为tribe[h[a]]。然后在查询a野蛮人所在部落编号时,我们先用find查找其所在部落位置即合并之后的位置,再输出tribe[],就是这个位置上的编号啦。思路:我们可以将可以面试的公司放入一个队列中,并且每次增加新的能力要求。我们可以用m维的优先队列,每次能力更新后,从最小值开始判断是否 有满足条件的公司。思路:一道类似的题目。

2025-03-27 20:41:24 482 2

原创 牛客周赛Round 84

思路:本题要我们求p/q mod M ,即p*(q的逆),q为排列数,我们可以很容易得到,即 n!种摆放方式,再将a[i-1]a[i]插入n-1个空中的任意一个,就可以得到a[i-1]a[i]在(n-2)!个排列中做出了贡献,而a[i]a[i-1]的贡献与a[i-1]a[i]一样,那么我们要计算出(a[i]-a[i-1])+(a[i]-a[i-2])+(a[i]-a[i-3])+...+(a[i]-a[1])的和,那么这个式子化简一下就是(i-1)*a[i]-pre[i-1],最终我们得到的结果p/q=

2025-03-10 12:31:37 424

原创 CF The Walkway

(为什么pre[i+1]-pre[i-1]-1需要减一,因为我们要计算第i个点对区间(v[i-1],v[i+1])的影响,不能包含第i+1个特殊点,所以减去的是第i+1个特殊点。思路:先预处理出每个区间(左开右闭)需要吃多少个饼干,用pre前缀和数组统计前i个特殊点区间吃多少个饼干,枚举第i个特殊点删掉后需要吃多少块饼干,例如我们要删掉第i个特殊点,现在可以删除一个特殊点,问这个人最少吃多少饼干以及有多少种删除方式。一条路上有几个特殊点,一个人会在以下这几种情况吃一块饼干。

2025-03-07 15:00:36 286

原创 2025“钉耙编程”中国大学生算法设计春季联赛 - 热身赛

思路:时间为8s,所以可以考虑暴力做法,我们会发现这三种操作不涉及进位也就是说我们可以先预处理出前面的n-1位在这三种操作下的所得结果,再加上这一位,例如yu[i][j]=yu[i/a][j/a]*a+min(i%a,j%a),表示i和j进行与运算所得结果,i,j的范围为0~1023,超过的部分用递归进行求解,然后我们定义bool dp[i][j]为第i次操作能得到j,所以我们只需用第i-1次操作得到的每个数与ai进行三次运算即可,最后遍历dp[n][i]求和,即得到最终结果。补题1006和1009。

2025-03-02 11:03:12 1046

原创 牛客练习赛B题(前后缀)

我们将这一步看作分界线,枚举每一条分界线计算出这条路径的元素和,然后我们考虑交换列的情况,(1)分界线左边的列与分界线右边的列交换 (2)分界线左边的列与分界线交换 (3)分界线右边的列与分界线交换,同时我们发现左边的列交换到右边只与下面的数字有关,右边同理,所以我们还需要维护一个前后最大差值的数组,pr[N],和sf[N]。由于数组空间大小为1e6且有多次询问,每次询问得重置数组,为了减小不必要的时间和空间浪费,我们选择每次开vector(n+5)的大小。

2025-02-22 10:48:51 202

原创 第26场蓝桥入门赛

【代码】第26场蓝桥入门赛。

2025-02-08 23:15:56 290

原创 方豆子(递归)

所以为了知道这四个小正方形是如何由字符组成的,所以每次由当前这个正方形递归到这四个小正方形,dfs(r1,c1,rm,cm,-good),dfs(r1,cm+1,rm,c2,-good),dfs(rm+1,c1,r2,cm,-good),dfs(rm+1,cm+1,r2,c2,good)。赛后看了大佬的讲解知道要将这个图形看成由四个小正方形组成的大正方形,递归参数可以设置成(r1,c1,r2,c2,good)表示正方形的左上角坐标和右下角坐标以及当前这个正方形的状态(好/坏),如下图所示。

2025-01-27 20:03:07 274

原创 小A弹吉他(推公式+二分)

例如,我们想要让 MEX 等于 4,构造的总和最小的序列是 1,1,1,2,2,3,这样 t1=3,t2=2,t3=1。尽量大,我们应该让所有ti不为0的数都不一样,同时我们想要所有数的和尽量小,根据贪心策略,对于越大的。对于每个询问,可以二分出最大的一个不超过 M 的 vk​,输出 k+1 即可。注意二分过程不要溢出了。P.S. 由于这个数这是 O(k3) 级别的,也可以暴力求出所有在 10^18以内的 vk​。因此,当 MEX等于 k+1 时,M 的下限应该是。引用出题人思路:为了让。

2025-01-23 12:41:44 238

原创 新年好(Dijkstra+dfs/全排列)

2.计算以1为起点的这6个数的全排列,哪种排列方式所得距离最小,也可以使用dfs。思路: 1.先预处理出1,a,b,c,d,e到其他点的单元最短路,也就是进行6次Dijkstra。2.Dijkstra+全排列。

2025-01-22 23:09:23 428

原创 牛客周赛Round 76 F同位序列

Round76比较简单,最后一题不涉及到什么算法,就是道模拟题,wa了几发最后还是让我混过去了🤭。其实就是一个规律:将整数X的二进制中第一出现零的位置pos0且在这个位置之前出现了1(位置为pos1,同时这个1要是离这个0最近的1),那么在pos1之前的所有1都要放到低位去。例如88=(1011000)2 ——> g(88)=97=1100001。所以我们只需要求pos0,pos1,和pos1之前出现了几个1,并将他们转换为十进制来计算。

2025-01-20 23:42:03 357

原创 牛客周赛 Round 71 补题DE

只需要全排列枚 333 个块填的是什么颜色 {a,b,c},然后枚举每一个位置填什么,下一个位置的颜色可以是当前位置颜色的后面颜色,例如:当前颜色是 b,那么下一个位置的颜色就可以是 b、c,然后判断一下选定的颜色和下一个位置的颜色是否一致,加上花费时间即可,然后 dp转移。思路:先将数量大于等于2的长度 存到vector数组中,然后再暴力枚举底和腰,用海伦公式求三角形的面积,腰从大到小枚举,一旦枚举到符合条件的就退出该层循环,如果2*腰的长度<=底也要退出循环,后面的腰长度更小更不可能构成三角形。

2024-12-09 12:53:56 333

原创 P4645 [COCI2006-2007#3] BICIKLI(Tarjan+topsort求到某点的方案数)

进行拓扑排序时的点的入度,是从s出发所能经过的所有点与从t出发在反图上所能经过的所有点的交集的这张图上的入读,那些不能既被s经过又被t经过的点到这张图上的边所提供的入度是无用的。我们考虑输出inf的情况,可以发现当从1出发到2经过的任意一个点处于一个环内时,路径条数是无穷多的。有向图上从s到t的经过点,就是从s出发所能经过的所有点与从t出发在反图上所能经过的所有点的交集。

2024-12-06 16:25:15 436

原创 P3916 图的遍历(Tarjan缩点和反向建边)

思路:先运用Tarjan算法得到每个连通块中最大的编号,然后对每个连通块进行缩点重新建图,进行dfs,得到缩点后的连通块能够达到的最大编号。既然要计算每个点能走到的最大编号,我们可以直接从大编号 开始搜索与它关联的路径,该路径上的点均为大编号。写法一:Tarjan。

2024-12-03 11:29:05 770

原创 P10298 [CCC 2024 S4] Painting Roads(dfs给边染色)

【代码】P10298 [CCC 2024 S4] Painting Roads(dfs给边染色)

2024-11-30 23:31:25 346

原创 P9709 [KMOI R1] 军事行动(bfs+最小生成树)

【代码】P9709 [KMOI R1] 军事行动(bfs+最小生成树)

2024-11-30 12:42:11 248

原创 P2661 [NOIP2015 提高组] 信息传递(并查集求最小环)

【代码】P2661 [NOIP2015 提高组] 信息传递(并查集求最小环)

2024-11-28 11:23:39 417

原创 算法训练题解

【代码】算法训练题解。

2024-11-24 08:48:00 302

原创 Graph Coloring I(Tarjan算法求奇环)

【代码】Graph Coloring I(Tarjan算法求奇环)

2024-11-22 10:22:27 439

原创 P1265 修建公路(prim算法)

题目要求一个城市只能选择一个离它最近的城市修建道路,所以不能使用kruscal算法,因为kruscal算法是以边为中心,按照kruscal算法来做的话,只要边足够小,一个城市就可以往多个城市修建道路,这显然不符合题意,所以考虑使用prim算法。

2024-11-22 10:06:06 358

原创 CF862B Mahmoud and Ehab and the bipartiteness(二分图的性质)

添加的边数就是cnt[1]*cnt[2]-n+1条。一个二分图最多有cnt[1]*cnt[2]条边。

2024-11-18 21:31:32 225

原创 蓝桥杯第22场小白入门赛

刚好牛客周赛和蓝桥杯周赛时间撞了,于是毅然决然选择了打牛客,结局是本蒟蒻被牛客薄纱/(ㄒoㄒ)/~~好吧,然后第二天就来水一水蓝桥杯了(bushi),小白入门赛和前几次一样,6道题只能写5道(什么时候能让我AK,AK了我就不是小白了)相信大家闭着眼睛也能写出来 /(ㄒoㄒ)/~~

2024-11-18 15:49:33 1222

空空如也

空空如也

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

TA关注的人

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