- 博客(39)
- 收藏
- 关注
原创 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
原创 Codeforces Round 886 (Div. 4)
样例解释大概告诉怎么做了,二分答案即可,注意边界的设置,赛时边界想复杂了。整体偏简单,E 二分边界想复杂了,F 一开始读错题了,以为第。不难发现答案的那一段区间一定是连续的,采用双指针扫一遍即可。直接暴力就可以,由于调和级数的复杂度是。的,因此算法的总复杂度为。
2025-04-07 16:40:29
231
原创 01分数规划
并不需要高级数据结构,对答案二分即可。注意本题为实数域上的二分,用。函数,不断逼近答案即可。假定当前二分的答案为。才可能是最后的答案。
2025-04-07 14:20:16
738
原创 快速排序&求第k小的数
每轮过后,如果第 k 个元素在左区间,就只排左区间,如果在右区间,就只排右区间,否则说明第 k 个元素已经在这两段区间的中间,即找好的自己的位置,直接返回即可。快排原理:每次选一个基准,大于基准的放右边,小于基准的放左边,直到全部有序。采用快排,不难发现排序的过程可以舍弃很多对结果没有用的区间。的数都是大于等于基准的,剩下的都已经有序。里的数都是小于等于基准的,每轮排序完可以保证,
2025-04-01 19:27:27
217
原创 [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
原创 2024牛客多校2
遍历上下两条路径即可,如果上下两条路可以同时向右走,那么,每个点可以由左边直接过来,也可以从另一边绕路过来,这样可能会更远。打表发现,将 x 化成二进制后,将 x 最低位的 1 变成 0 一定满足条件。即当 x 不是 2 的幂时,满足条件的 y=x-lowbit(x),x 是 2 的幂时无解。前缀和,考虑对所有的操作做一个前缀,问题变成能不能找到一段区间使得区间和为。,注意查询的时候不能从前往后遍历,这样会有重复的情况,比如此时遍历的。简单动态规划,由于向左走和向右走互逆,对于每个点只考虑向右走的情况。
2024-08-11 18:06:10
338
原创 2024牛客多校1
下面分析满足条件的子序列为1的序列的性质,假设满足条件的子序列的长度为 k ,即奇数的个数为 k,那么这 k 个数全部化为二进制可以对应出一个 m*k 的数表,每行对应了一个数的二进制,首先最后一列肯定全部为 1。观察数据范围可以发现,一定至少有 n 个奇数,从二进制的角度来考虑, AND 和为1,最后一位只能是 1,不妨假设满足条件的序列中有 k 个数在满足条件的子序列中,那么不在子序列中的数就是 n-k 个,对于不在子序列中的数,二进制的最后一位一定是0,剩下的随便填,共。
2024-08-08 22:32:14
1653
原创 洛谷刷题记录---------暴力枚举
对于一个 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关注的人