自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 -栈和排序

维护一个后缀最大值,当前的值等于后缀最大时直接输出,栈顶的元素大于等于后缀最大时也直接输出,否则压进栈里。

2025-04-14 16:22:34 77

原创 Codeforces Round 827 (Div. 4)

只要 t 追加了除了 a 以外的任何字符,将 s 的第一个放 a,t 的第一个放不是 a 的一定可以满足。在 t 没有出现大于 a 的字符但 s 出现时,无论怎么排列 s 一定会大于 t,此时输出。找到最多可以到的那个台阶即可,我们维护一个前缀最大值的数组,再维护一个前缀和,二分找到位置直接输出即可。的范围在 1000 以内,开一个桶把数量存下来暴力判断即可,这样就把。,剩下的情况就是 s 和 t 全部由 a 构成,判断大小即可。个数的运算量缩小到了。

2025-04-14 15:26:15 230

原创 Codeforces Round 871 Div. 4

就是最多的那种情况除以第二多的,即中间那层的节点数量,如果只有两种,说明最里面的和中间的节点出度恰好相同,只需要对第二多的数量减一即可。根据题意可以看出,所有节点的出度最多有三种情况,最多的那种显然是最外层的点,如果有三种出度情况,赛时感觉递归会超时,实际上根据主定理算一下并不会。

2025-04-14 15:10:32 215

原创 整点巧克力

经典最小值最大,考虑二分,注意 check 函数里对最后一天的判断。

2025-04-08 13:20:03 164

原创 小q的数列

根据二进制的性质,最早出现的显然是从低位到高位全部是 1 的情况,答案为。在二进制下 1 的个数。

2025-04-08 11:11:24 169

原创 Codeforces Round 886 (Div. 4)

样例解释大概告诉怎么做了,二分答案即可,注意边界的设置,赛时边界想复杂了。整体偏简单,E 二分边界想复杂了,F 一开始读错题了,以为第。不难发现答案的那一段区间一定是连续的,采用双指针扫一遍即可。直接暴力就可以,由于调和级数的复杂度是。的,因此算法的总复杂度为。

2025-04-07 16:40:29 231

原创 01分数规划

并不需要高级数据结构,对答案二分即可。注意本题为实数域上的二分,用。函数,不断逼近答案即可。假定当前二分的答案为。才可能是最后的答案。

2025-04-07 14:20:16 738

原创 模板--快速幂

【代码】模板--快速幂。

2025-04-07 14:10:18 83

原创 递归典例---汉诺塔

总次数:回顾移动的过程,不难发现,对于。

2025-04-03 22:49:36 416

原创 快速排序&求第k小的数

每轮过后,如果第 k 个元素在左区间,就只排左区间,如果在右区间,就只排右区间,否则说明第 k 个元素已经在这两段区间的中间,即找好的自己的位置,直接返回即可。快排原理:每次选一个基准,大于基准的放右边,小于基准的放左边,直到全部有序。采用快排,不难发现排序的过程可以舍弃很多对结果没有用的区间。的数都是大于等于基准的,剩下的都已经有序。里的数都是小于等于基准的,每轮排序完可以保证,

2025-04-01 19:27:27 217

原创 归并排序&求逆序对

即求归并排序的合并过程中,左半区间不为空时,选择右半区间时,左半区间元素的个数和。分治思想的完美体现。

2025-04-01 18:24:58 211

原创 子序列自动机

子序列:从原字符串中删除任意个(可以为零、可以为全部)字符得到的新字符串。对于给定的仅由小写字母构成的字符串。

2025-02-24 15:28:02 175

原创 [NOIP2008 普及组] 排座椅

用两个数组分别表示每一行、列可以隔开多少对爱说话的小朋友即可,由于按编号升序输出,因此先找出行列所在的位置再按编号进行排序即可。

2025-02-19 14:00:58 133

原创 [NOIP 1998 提高组] 拼数

就可以证明我们cmp排序后得到的答案就是最优解,即证明传递性,,否则更改顺序一定会更优,因此下面只需要证明,对于。将每个数用字符串的形式读进来,对于任意两个数。简单证明:假设最后的答案为。,任意相邻的两个一定满足。,对最后的答案来说,

2025-02-18 22:55:30 919

原创 flip game

思路:将每一行的数据看成一个二进制串,可以发现如果想要达成相同的颜色,由第一行的操作可以确定接下来所有行的操作,因此我们可以枚举第一行所有可能的操作,由于 m 比较小,外层循环只需要枚举 2^m -1,时间不会爆。在具体操作时采用二进制,用 a 数组和 b 数组将两个相反的棋盘存入,这样只需将两个数组跑同一个函数即可。

2025-02-13 21:42:27 226

原创 [SCOI 2005] 扫雷

一开始想了半天无从下手,看了题解发现每个格子只有放与不放两种情况,而通过第一个格子的情况就可以把整个地图都给推出来,因此最后的答案只能是0,1,2。但实现check的过程一开始写的暴力,有很多特判把自己写懵了,参考了题解的递推写法,很巧妙。

2025-02-12 17:22:59 191

原创 双指针(尺取法)

思路:暴力枚举左右端点显然会超时,采用双指针,L维护左端点,R维护右端点,从总区间的左边开始维护,做前缀和,大于 S 时看是否需要更新答案并将 L 右移,这样最多只需要访问两遍整个区间,复杂度为 O(n)。题意:给定长度为n的正整数数列以及正整数S,求出总和不小于S的连续子串的长度的最小值,如果解不存在,输出0。

2025-02-11 21:17:19 207

原创 带权中位数(变化量)

证明:假设不是,向左移动一格,左边的人少移动一格,右边的人多移动一格,但左边的人的数量小于人数的一半,右边的人数量多于人数的一半,显然不是更优解;同理,向右移动一格,右边的人少移动一格,左边的人多移动一格,此时左边的人多于人数的一半,右边的人小于人数的一半,也不是更优解,因此结论得证。,把每个点作为集合点对应的距离都找出来找出最小的即可,这样需要维护一个人数的前缀和数组。结论:按位置排好序后对人数做前缀和,人数恰好超过总人数一半的位置就是距离最小的点。先假设第一个点是集合点,算出对应的距离,记作。

2025-02-11 20:19:51 264

原创 CQOI2009 中位数

的数量就是这个位置对答案的贡献,累加即可,可以将 0 的情况单独处理,存储数量时由于前缀和可能为负数,采用 map。的位置为分界,向前做一遍前缀和,记录下每个前缀和出现的次数,再向后做一遍前缀和,比如后面某个前缀和是。

2025-02-11 15:59:32 411

原创 校门外的树

法1:记录下每个区间的左右端点,将区间按照左端点从小到大排序,枚举一遍区间,求出被拔走的树的数量,再用总的减去被拔走的即可。数据范围增大后,暴力行不通,这里有两种方法。或者利用差分的思想,先做差分,再做前缀和。对数据范围较小的情况,直接暴力枚举即可。法二:离散化,再利用差分的思想。

2025-02-11 14:47:02 177

原创 枚举刷题记录

一开始没有思路,后来发现只要知道左上角和右下角的点就可以确定一个正方形,枚举即可。注意判断边长大小的时候采用sqrt会有精度的问题,需要直接用平方避免误差。由于数据范围很小,可以开多重循环。

2025-01-20 21:05:10 184

原创 CF Round 971 Div4

首先,将 x 轴与 y 轴上移动的距离分开考虑,计算出需要移动的次数,根据两个次数的关系考虑需不需要多进行一次移动即可。就是后缀大于前缀的最后一个,先二分找到 i 再判断谁最小即可。点(0,10)是 y 轴上的点()。,可以发现能构成的三角形只有两种。注意题目对 y 坐标的限制,由于。最小的情况只有两种情况,设。

2024-09-25 08:38:25 359

原创 牛客周赛 Round 57

找出在直线上方、直线下方和直线上的点,先让上下互联,再用直线上的点去连上面的和下面的,最后让同一组的互相连接。的范围以及答案的范围,可以先枚举出来所有在答案范围内的只有一位是1的。枚举每条边看是不是相同颜色,如果相同答案就+1。,再对这些数进行子集枚举,组合出所有可能的。

2024-08-29 12:09:00 656

原创 牛客小白月赛99

因此将质数存到一个集合里,对每个序列判断能不能筛掉其中的质数,最后输出最小的质数即可。先从终点开始遍历,标记能到达终点的列和行,再从起点开始遍历,看是否能走到标记的行和列上。可以证明 ans 一定是一个质数,如果是合数的话。的倍数,与题意要求的最小矛盾。个质数,线性筛即可。

2024-08-24 21:54:36 561

原创 算法学习笔记-----线性筛

顾名思义,在线性的时间里筛选出质数,核心在于每次用合数的最小质因子筛去这个合数,时间复杂度为。的最小质因子,所以必须跳出,这保证了每一个合数都是由其最小质因子筛掉。

2024-08-24 15:00:50 1599

原创 CF Edu Round 169

简单贪心,两人每次都会选序列中最大的数,先排序,然后依次选,选完后用 k 来缩小差距,扫一遍 Bob 选的数让其加到与当前回合 Alice 选的数一样大即可,直到把 k 用完或扫完序列为止。) 个点,再插入一个点,要求所有点到该点的距离比到其他点都要小,求有没有这样的点。先求出交集,再判断一下左右边界是否被包围即可。显然,只有 n=2 的时候才有这样的点。

2024-08-17 15:20:54 308

原创 CF Round 966 Div3

给定一个字符串,判断是不是大于等于102的形式,例如1019-> 1019。简单模拟即可,需要特别注意指数为个位数的情况有没有前导 0。1−n的座位供车上的人选,第一个人可以任意选,其他人必须选左右至少有一个有人的座位,默认 0 和 n+1 位置没有人,求有没有人不按要求坐。简单模拟,注意多测的初始化。

2024-08-16 20:05:41 397

原创 算法学习笔记-----图论基础

除了 1 之外可能还有入度为 0 的点,因此要在跑拓扑排序前先把这些点对结果的影响消除。拓扑排序只能在 DAG 上进行,有向才能确定删除的顺序,无环才能保证排序过程正确进行,如果有环的话会导致排序到某一步出现没有入度为 0 的点。拓扑排序的结果不唯一,例如在上图中,a-e-b-c-d 或 a-b-e-c-d 或 a-b-c-e-d 都是正确的答案。求食物链的总数,必须从生产者开始,到最高级消费者结束,模拟拓扑排序的过程即可。拓扑排序:每次选入度为 0 的点,删除它和它的出边。两种遍历:dfs,bfs。

2024-08-14 22:03:19 605

原创 牛客周赛 Round 55

【代码】牛客周赛 Round 55。

2024-08-13 11:27:02 403

原创 2024牛客多校2

遍历上下两条路径即可,如果上下两条路可以同时向右走,那么,每个点可以由左边直接过来,也可以从另一边绕路过来,这样可能会更远。打表发现,将 x 化成二进制后,将 x 最低位的 1 变成 0 一定满足条件。即当 x 不是 2 的幂时,满足条件的 y=x-lowbit(x),x 是 2 的幂时无解。前缀和,考虑对所有的操作做一个前缀,问题变成能不能找到一段区间使得区间和为。,注意查询的时候不能从前往后遍历,这样会有重复的情况,比如此时遍历的。简单动态规划,由于向左走和向右走互逆,对于每个点只考虑向右走的情况。

2024-08-11 18:06:10 338

原创 算法--斯特林数

表示 n 个元素划分成 k 个非空集合的方案数。将 n 个元素划分为 k 个非空集合,求方案数。因此第二类斯特林数的递推式为。

2024-08-10 00:14:29 649

原创 2024牛客多校1

下面分析满足条件的子序列为1的序列的性质,假设满足条件的子序列的长度为 k ,即奇数的个数为 k,那么这 k 个数全部化为二进制可以对应出一个 m*k 的数表,每行对应了一个数的二进制,首先最后一列肯定全部为 1。观察数据范围可以发现,一定至少有 n 个奇数,从二进制的角度来考虑, AND 和为1,最后一位只能是 1,不妨假设满足条件的序列中有 k 个数在满足条件的子序列中,那么不在子序列中的数就是 n-k 个,对于不在子序列中的数,二进制的最后一位一定是0,剩下的随便填,共。

2024-08-08 22:32:14 1653

原创 CF刷题记录

考虑先用所有的花硬币来买,再用普通硬币替换对应面值的花硬币,如果仍有多余,再用普通1元硬币来替换k元的花硬币即可。

2024-08-08 00:16:42 187

原创 算法---二分答案

【代码】算法---二分答案。

2024-08-07 23:37:31 353

原创 牛客周赛Round54

的做法,枚举每个位置能到达的所有位置,bfs 即可。每块布告有选或不选两个选项,01背包。由于 n

2024-08-07 14:04:26 246

原创 洛谷刷题记录---------暴力枚举

对于一个 n*m 的矩形,他所含的所有矩形的数量为n∗m,矩形数=正方形数 + 长方形数,对于正方形,我们枚举每个顶点作为右下方的顶点,数量为minij,然后长方形的数量就等于总数减去正方形的数量。

2024-07-26 13:01:14 523

原创 算法----------排序

时排序终止,因为此时已经确保了 flag 左侧的元素一定小于等于 flag,右侧的元素一定大于等于 flag,分别对两侧区间再次快排即可。让左指针从左往右移动,右指针从右往左移动,直到两个指针都移动到边界。

2024-07-25 18:04:55 238

原创 洛谷刷题记录------高精度

同理,当 t < n 的时候,由于一共有 n-1 个数,我们分配到 n - 1 - t 个数的时候就把 这 t 个 1 分配完了,这实际上相当于删去了 2 + 3 + ……这时也就是 sum - n ≠ 1 的时候的情况,当 sum - n = k ( k ≠ 1)时,只需要删除 2 + 3 +。+ n + (n+1) ,让 sum 首次大于 n,sum - n = 1 的时候就是 t = n 的时候,这时候只要把序列中的 2 删去,然后将最后一个数 +1 即可满足条件。

2024-07-24 19:11:37 1586

原创 牛客周赛 Round 52

由于相同的两个数的异或为0,所以先统计相同的正数的个数,由于负数可以用来消正数,也可以自己消,所以相同的负数最好都用来消正数。采用贪心,首先让相同的正数互相消,然后留下单个的正数用负数来消。首先确定被 1*3 铺满的 n 的大小,也就是 t =对于第一条性质,负数之间一定可以互相抵消,所以先消正数。两数的异或小于等于0,一个为正数或0,一个为负数。另外,由于异或和加法的交换律,并不需要考虑 i<j。采用优先队列,循环到队列为空即可。与 a 比较大小即可。

2024-07-22 17:26:01 326

空空如也

空空如也

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

TA关注的人

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