自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 每日一题~ Birthday Cake+19浙江省赛 I(字符串哈希,匹配)(哈希判断回文串,奇偶性质的博弈)

2.有形如 ABA 的串,这时,我们需要寻找 B 串的数量。对答案的贡献就是 B的数量。1.有多个A 串,对答案的贡献是 cnt*(cnt-1)/2。n 个字符串,两两组合,问有几对能形成 AA 串。我们使用哈希来处理字符串。

2024-07-21 23:10:08 95

原创 每日一题~cf 959 div1+div2 C(对于求区间的问题,枚举左端点。经典的套路)

表示 n 个数 ,(每个数大于等于1,小于等于2e5)g 表示 区间的和,当g>x 的时候,将 g 变成零。因为sum 是单增的,所以我们可以二分出来,第一个>x 的点,记为k;满足条件的r ,从 l 到 k-1 ,都是满足条件的 k 位的时候被清零了额。一般思路:枚举左/右端点,以0(小复杂度),可以是logn 或者是 log n^2。当然还有一些边界的问题。比较套路的题,因为询问的是子串,一共有n^2 中状态。枚举左端点l ,看有多少满足题意的r。当k+1 位 的时候 ,相当于 l=k+1。

2024-07-20 10:56:21 107

原创 每日一题~div4 952补题 E+F+G

(其实就是 在长的方向上 选出一定连续长度的 的不同取法,在宽的方向,在高的方向。因为x y z 的范围小 只有2000.所以我们可以枚举长 和宽 ,高通过体积计算。所以上面的结果减去 cnt^l (这样计算包含了l位 和l位以下的,把0放前面就可以)n 至少是l+1位,那么l位以及 以下的数字是不符合的。显然的,要满足这个等式,那么n的每一位上的数 和k相乘都不能进位。一开始,所有攻击都不处在cd时间内,问击杀boss的最少的回合数。n最多是r位,先不考虑左边界的问题。注意n 是左闭右开的。

2024-07-17 16:36:26 283

原创 每日一题~ABC 362 C Sum = 0 (没什么技巧和知识点的简单题 做不出来,什么实力>_<)

我首先就注意到 ,区间 可以分为 左右端点全是正的,和左右端点 全是 负的,还有 一正一负的情况(这种的可以取到零)。所以我就想 计算出来 取正的最大 最小值,取负的最大最小值,之后不够的 有 一正一负 来补。(当然我现在反应过来,可以开结构体,把index 存储起来,),赛时的时候觉得做不了,就没写。在每个区间内选出一个数字出来(左右端点可以选),使得这些数 的和为0.之后遍历区间,尝试将区间由原来的 右端点,变成左端点或者中间的数值。具体的看代码,想明白就是很简单的一道题。

2024-07-15 15:24:30 160

原创 每日一题~ cf div3 957 D+E(若只dp,暴力枚举)

典型的动规 dp[i] 代表 到达i 所要游的最少的米数,从两个地方转移。现在已知 n,那么我们可以枚举 a 的数值,和最终结果的位数 来确定b的值。n 长的字符 ,m k 可以跳跃的最大距离(每次跳跃的距离1

2024-07-14 23:58:42 403

原创 每日一题~1969积木大赛,国王的游戏(贪心+高精度),奶牛玩杂技

因为左手上的数都是大于等于1的,所以 越到 后面,积越大。我们现在看右手数值,因为左右的累积是越来越大的,所以应该将右手数值大的放后面,换言之,右手数值小的在前面。要使最大值最小,(咋一听,有点二分的感觉,但实际上是贪心)要使得最大值最小,也就是削弱每位大臣的奖励。每次可以选择连续的一段区间,区间内的数都加1,询问至少多少次,能够将n 个0,转化成 给出的序列。综上,看完题目,我们可以隐隐感觉出来,左右手小的排在前面。如果右边比左边低,那么在操作左边的时候,右边的已经满足了。只想到了分治的思路。

2024-07-14 14:41:58 409

原创 每日一题~p4447(贪心)

二分查找最后一组,是因为 后开的组,人数少,把a[i]接入 最后一组,会使得 该组人数 增多。用b数组记录每组的最大实力值**(因为每组的最大值 决定了当前元素是否能够 进入 这个组)**一串数字,数值相邻的数字可以划分为一组。问 人数最少的组,的最大值是多少。如果找到的值等于 a[i]-1,那么a[i]接到该组。在b 数组种 二分查找 小于等于 a[i]-1的。4 就应该 接到 {3},而不是{2,3}对a排序之后枚举a[i],用c数组记录每组的人数。否则就 ,重新开一组。

2024-07-12 17:01:22 182

原创 每日一题~abc356(对于一串连续数字 找规律,开数值桶算贡献)

第 i 位 的 1 的出现周期是 2^(i+1) ,其中前一半是0,后一半是1.(数量是 2^i个)题意:对于给定的n,m。计算0~n 每一个数和m & 之后,得到的数 的二进制中 1的个数的和。我们只需要计算 在 1-n这些数上,有多少个数 第i位 为1.因为是连续的自然数,每一位上1 的出现 必然存在某种规律。那么整的部分算完了,接下来算 散 的那一部分。对于整除的那一部分,第i位的贡献是。我们从 第零位 开始计数。

2024-07-10 21:05:10 266

原创 每日一题~牛客练习赛123 B(鸽巢原理)非常经典的两两相消问题!

因为剩下糖果的数量都小于隔板数(因为我们的隔板数是糖果最多的数量),所以同种的糖果不会在一个隔间内。假设剩下小球的数量为sum,其中最大的数量为k.(这里的k,怎么求:我们保留小球数量的最大值和次大值,因为当ai为最大值时候,k为所有小球中的次大值)贪心的想,对于第i种小球,我们肯定先让剩下的小球两两消耗。找出数量最多的那一种糖果,假设数量为k,那么可以看成k个隔板。根据我们上一题的推理,当s>=k-1的时候,存在相邻的两两不同的序列。不妨假设 剩余的糖果 为(不同的字母代表不同种类的糖果)

2024-07-10 09:40:42 595

原创 栈的匹配问题

假如我们 将左括号 放在一起,当遍历到右括号的时候,这个右括号应该和离他最近的左括号匹配。也就是最晚遍历到的左括号。有效的括号 是匹配左右括号,本题是匹配相邻元素,最后都是做消除的操作。当然这道题也可以用 双指针来维护,区间的st 和ed,只不过细节很多。平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 )。该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * )。在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了,

2024-07-08 11:03:03 239

原创 滑动窗口的最大值(单调队列)

队列没有必要维护窗口里的所有元素,只需要维护有可能成为窗口里最大值的元素就可以了,同时保证队列里的元素数值是由大到小的。不得不感叹一下,力扣官方题解的质量真好。

2024-07-08 10:40:50 126

原创 滑动窗口(同向的双指针)

我一开始 认为 是 n*m.在每一次移动指针的时候,都要判断 我们选出来的区间是否还符合条件,我意识 认为 ,每次判断是o(n),也就是遍历一遍t数组的时间复杂度。对于一个符合条件的子数组,以r结尾的 小的子数组 有长度为1,2,一直到 r-l+1的长度。但实际上,我们判断的时间复杂是 t数组中,O(符号的种类),所以最多也就是128。等碰到题,不会的时候,在想吧。-核心:左右 双指针(l,r)在起始点,R向右逐位滑动循环。这道题 主要 想说的是,时间复杂度的计算。m是s的长度,n是t的长度。

2024-07-08 08:52:41 274

原创 每日一题~oj(贪心)

我们从前往后扫一遍,第一个数的贡献是确定的,第二个数的贡献是最小的。那么基于第二个数的val,求第三个数的val。得到的最小值,就是最优的。以此类推下去,得到总val的最小值。每一个数的贡献 是基于前一个数的贡献 来计算的。只要保证这个数的前一个数的贡献是最优的,那么以此类推下去,整体的val就是最小的。对于位置 i来说,如果 不选她,那她的贡献是 vali-1 *2,如果选他 ,那么她的贡献是 ai.

2024-07-07 08:59:16 190

原创 每日一题~ (判断是否是合法的出栈序列)

遍历序列,如果当前这个值a小于 栈顶的值,说明它还未进栈(因为我们是按照顺序进栈的),所以我们将 一些元素进栈,知道a进栈。将 1-n 按照顺序进栈,问 输入的序列是否是合法的出栈序列。经过这个操作之后,现在的栈,是a进来之后即以后的情况了。所以 ,这个时候 如果栈顶元素是a,那么是合法的。

2024-07-06 23:04:45 265

原创 每日一题~ leetcode 402 (贪心+单调栈)

这个贪心的推导在leetcode上已经很明确了。

2024-07-06 19:35:14 221

原创 每日一题~ abc356 dfs

最多100个测试,所以数据开到105够用了,因为至多15把钥匙,a数组存放的是,钥匙的使用情况 的十进制,最大是2^15,int 最大的范围大概是是 31次方左右,所以用int就够了。这个复杂度的理由是,__builtin_popcount() 遍历输入整数的每一位,统计其中 1 的数量。因为一个整数的位数是与其大小的对数成正比的,所以时间复杂度是。函数是 GCC 的内置函数,用来计算一个整数中 1 的个数,也称为汉明重量(Hamming weight)。O(logn),其中 n 是输入整数的位数。

2024-07-02 23:39:24 181

原创 每日一题~贪心(和贪心磕上了)洛谷1090糖果合并

这道题,代码挺容易的。凭借直觉就能ac.(可以很容易的感性的认知到 先进行合并的数,累计的次数次数多。每个 节点 代表一个数字堆,当然叶子节点,代表的就是最开始的那一列数(从题目中 读入的数)。一列数,两两合并,每次合并的代价是两堆的和。问将所有的堆合成一堆,最少的代价。可以发现,后面的深度不大于前者(也就是说 深度的排列 是不降的)我们按照 从左往右马,从下往上 的方式去 写出每个数的深度。之后一直在里面重复取出最小的两堆,在push进去。合并之后的新堆,也要push进堆里里面。

2024-07-02 21:27:07 285

原创 每日一题~贪心(相邻两个数不超某个值+线段覆盖)

所以如果我们吃掉第一个里的,只会减少一个分组的量,而如果吃掉第二个里的,可以减少2个分组的量。首先第一个糖果盒是只有一个分组的(和第二个), 而第二个糖果盒却有两个分组(和第1个/和第3个);在一个数轴上有n条线段,现要选取其中k条线段使得这k条线段两两没有重合部分,问最大的k为多少。对于一个时间节点,我们要选择右端点最 靠前的的线段,这样就会选择其他线段的时间范围就大一点。显然放右端点最靠左的线段最好,从左向右放,右端点越小妨碍越少。其他线段放置按右端点排序,贪心放置线段,即能放就放。

2024-06-26 15:06:24 163

原创 每日一题~洛谷2241(数学)

我们先固定长,求宽边线段段数,也就是求m长的线段分成1,2,3,…(1+2+3+4+…1对应的就是线段长为m的个数,2对应的是m-1,以此类推。不能直接这样写,觉得自己的ans是long long ,但其实后面的n,m都是int在计算时后面爆了,即使前面时long long 也不行的。正方形上述的特殊情况,长边线段段数为(n-i+1),宽边为(m-i+1)i 的范围为[ 1 , min ( n , m ) ](m - n) % p = ((m%p - n%p) + p) %p(加p是为了防止出现负数)

2024-06-05 17:09:38 307

原创 每日一题~oj p1140 循环数

整数长度 意味着 要使用 高精度数和低精度相乘。

2024-06-04 22:22:25 327

原创 每日一题~cf650 A(洛谷 wathman)容斥

这里的意思是 ,(x,y)会和前面 横坐标相同的点 组成一对,会和前面纵坐标相同的点 组成一对。但是对于 坐标相同的点,我们重复计算了,所以还要再开一个map,记录重复坐标的点的数量和信息。公式化简一下 就知道,我们要找 横坐标相等 或者 纵坐标相等的 一对点。所以开两个map,一个记录横坐标的个数,一个记录纵坐标的个数。当然也可以 直接在遍历点的时候,处理重复点的信息。依次为曼哈顿距离,欧式距离的公式。最后减去,多加的就可以了。n个数字,定义了三元组,这个也许 更简单一点?

2024-05-31 17:08:20 289

原创 每日一题~ CF5778 Modulo Sum(鸽巢原理,背包,前缀和)

最后看考虑n个元素,也就是考虑所有的元素,余数为0的时候,若为true则存在答案,否则无答案。因为长度为n的数组,有n个非空前缀和,而mod m的余数,一共有m个,从0 到m-1.对于物品i来说,dp[i][ve[i]] 为true,相当于只选ve[i]这一个元素。如果dp[i-1][j]为真,那么dp[i][j]也为真,相当于不选ve[i].dp[i][j]是bool 类型,代表的是 考虑前i个物品,是否能产生余数为j。dp[i][(j+ve[i])%m]也为真,相当于选了ve[i]

2024-05-31 16:03:34 377

原创 每日一题~P1134阶乘问题(零与2,5 的爱恨情仇,阶乘末尾0的个数)

先来个开胃小菜。

2024-05-30 18:03:58 844

原创 每日一题,[AGC001B] Mysterious Light,递归

射出两条射线之后,问题就变成了从一个平行四边形中不断射来射去,可以递归解决子问题。

2024-05-29 17:02:06 152

原创 每日一题~区间合并(贪心),矩阵旋转求和(坐标之间的关系)

每日一题

2024-05-28 22:01:28 281

原创 01背包,多重背包,打家劫舍, dp模板

dp,背包,打家劫舍问题,买卖股票问题,子序列问题

2024-05-01 22:15:10 374 2

原创 BFS()

的路径(因为每一次所有点都是向外扩张一次,你先遇到,就一定是最短的了),bfs先找到的一定是最短的,但是如果是加权边,这样就会出问题,bfs实际找的是边数最小的解,但是因为加权了,这个解到根节点的距离不一定是最短的。直接找被包围的0是困难的,我们直接找为被包围的0,做上标记。最坏的情况下,bfs要寻找所有到可能节点的所有路径,因此时间复杂度是0(v+e)v是节点的数目,e是边的数目;要注意的是,要特判起点等于终点的情况,因为我们是从第一个点开始扩展的,没有考虑起点等于终点的情况。

2024-04-12 21:55:56 729

原创 枚举+dfs

枚举 dfs

2024-04-05 10:27:52 629 1

原创 简单数论(质数筛,快速幂,乘法逆元(费马小定理))

质数筛,快速幂,费马小定理。

2024-02-29 17:52:18 612

原创 单调栈介绍和简单应用

大致的思路,将当前的元素与栈顶的元素作比较,如果前者大于后者,那么栈顶的元素找到了右边第一个比自己大的数,所以就要出栈,栈里面可能还有之前遍历数组只进栈没出栈的元素(这也就意味着,他们没有找到那个比自己大的数)所以当前元素要和栈内所有元素都比较一遍,能出栈的就出栈了。更直白来说,就是用一个栈来记录我们遍历过的元素,因为我们遍历数组的时候,我们不知道之前都遍历了哪些元素,以至于遍历一个元素找不到是不是之前遍历过一个更小的,所以我们需要用一个容器(这里用单调栈)来记录我们遍历过的元素。这个元素的结果就定了。

2024-02-19 21:33:22 772 1

原创 PTA L2-019 悄悄关注

PTA L2-019 stl map set

2024-02-13 08:16:02 194

原创 ETOJ 1052: 气球数量(水题,适合初学map)

适合初学map的水题

2024-02-12 11:33:06 246 1

原创 L1-058 6翻了

L1-058 6翻了

2024-02-09 15:55:25 148

原创 PTA L1-059敲笨钟

L1-059 敲笨钟 练习string 库函数使用

2024-02-09 15:14:28 269

空空如也

空空如也

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

TA关注的人

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