- 博客(288)
- 收藏
- 关注
原创 CF 921 div2 e
采用类似于分块的做法处理 2 查询 ,中间的利用线段树直接计算,两边少算的部分利用等差数列公式计算。但是注意在线段树上做查询的时候左区间要 +1 , 因为左区间上的val并不代表这个点的值,而是一段区间的值放在了这个港口上,这个点本上的值是0,要选的是从港口 + 1开始。本质上不是一个很困难的题目,只要是我调代码能力太拉了。通过map实现查询的大于和小于的点,迭代器要先--右边多算的是从[r + 1 , nex]左边少算的是从[l , nex]
2024-01-29 23:28:32
542
原创 根号分治
根号分治本质上来说就是暴力的做法,问题的规模和数字的大小成反比,所以我们可以在问题规模较小时,采用暴力的方法转移,当问题规模较大时,通过别的方式,一般是采用空间换时间的方法,实现快速的转移。s[d][i] 前 i 项 公差为d的加权和 s[d][i] = s[d][i - d] + i / d * a[i]前缀和为 a[s + (k - 1) * d] * (s + (k - 1) * d / d = s / d - 1 + k。当转移规模较小时,采用1 ,当转移规模较大时,采用2。
2024-01-17 21:27:05
583
原创 主席树的板子
先思考全局查询的时候,就是看第k大是在左边的区间还是右边的区间‘现在改成[l , r] 上的查询的就通过维护1-i的线段树实现。大致就是利用前缀和的思想去寻找区间第k大。
2023-11-22 12:59:00
264
原创 CF1325D ( 异或和和性质
先构造一个 u 然后如果全部构造一个相同的数 1 v - u 次 ,如果v-u是奇数,那么很显然是构造不出来的, 如果v - u 是偶数 那么可以构造两个 (v - u)/ 2。如果 u ^ (v - u) / 2 + (v - u)/ 2 == v 那么就可以合并,只需两个数就可以完成构造。下面暴力讨论 u (v - u)/ 2 (v - u) / 2;很明显异或值恒为 u。
2023-11-20 19:42:28
153
原创 abc 329 e ( dfs
因为后操作可以覆盖原先的操作,不停找新的能覆盖的区间(区间里至少有一个字母变成 #),进行覆盖,新覆盖的区间可能对前面的k个位置有影响,在搜索前k个位置的覆盖情况。考虑能否将串s还原为 ###########
2023-11-20 11:53:58
205
原创 abc 325 d
1.如果现在处于待机状态,没有可做的,就直接跳转时间到下一个可做的地方。4.拿出堆顶,(当前可做且时间最早的),更新时间和答案。贪心策略是当前可做的所有物品中,选择结束时间最早的,2.将当前时间下,所以可做的都加入进来,3.将已经超时且未作的出堆,没机会做了。直接排序后每次选前面的做并不正确。
2023-10-29 10:06:36
214
原创 CF1322B
或者 b[i] + b[j] >= (1 << i + 1) + (1 << i);那么考虑两两相加后 , 第 i 位能否有 奇数个 1 进行异或。提取前i位 a[x] % (1 << i + 1)考虑每一个位能否贡献1。然后用双指针维护一下。
2023-10-22 21:43:48
73
原创 P1266 速度限制 ( dij分层 + 图上dp
其实并不是真的建立分层图,只是有分层图的思想,或者是dp思想在里面。dp[i][j] // 到达 i 点速度是 j 的花费。
2023-10-17 22:43:20
1029
1
原创 P4185 [USACO18JAN] MooTube G (并查集 + 离线
只有大于等于k的可以被推荐,所以每次将g[i].val >= k 的加入并查集,保证所构成的树/森林中所有的边权都是大于等于k的。跟我想法差不多,就是先离线下来,从大到小排列,
2023-10-17 22:38:22
175
原创 P3067 Balanced Cow Subsets G(折半搜索
对于分三组的处理,是通过 1 , -1 ,0 (左 , 右 , 无)考虑前一半分组情况 左a右b 后一半分组情况 左c右d。于是搜索中维护两组差值就可。折半搜索前一半和后一半。抄别人的题解的一天捏。
2023-10-16 10:31:20
77
原创 abc324 e
枚举i的每一位 ,如果s[i] = t[l] l++ , 后缀同理。对s 进行预处理 , s 能匹配多少个t的前缀 和 后缀 ,字符串拼接后能不能形成子序列 t,考虑suf 和 pre 处理,然后经典 双指针或者二分搞一下,
2023-10-15 10:38:59
178
1
原创 abc324 d
直接枚举满每个数的平方,如果数字数量是满足的,那么就可以对s进行排列得到。猪脑过载时刻,属于是全排列陷阱,全排列大概最大只能到 9!
2023-10-15 09:53:21
53
原创 arc 166 a
可以证明只有当 X中a的数量 = y中a的数量 且对于 Xk <= Yk (X中第k个A的下标 小于等于 Y的第k个A下标)X[i] = Y[i] = C 时的点是不能动的 , 以次为边界,将字符串进行分割,每一段都要分别满足。这种情况用amin代表有多少个A没被分配到 ,不断统计X中a的数量 , Y中出现就 -1。amax统计a + c 的数量, 如果Y中出现 a 就 - 1 ,首先将考虑只有ab的时候,可以发现a是可以不断向右移动的。2.a+c 太少了,在某一个点就不够分 ,
2023-10-10 22:47:26
248
原创 edu 156 div2 c
当s[i] < s[i-1] 将i-1删除这样s[i] 就会到 i-1的位置。观察删除后的字符串,发现并不需要从头开始计算,只需要从连接处在进行比较,观察到 再前面的位置使得字典序改变,字典序最小。可以通过一个单调栈进行维护,或者单链表也可以。先考虑如果让变化后的字符串最小,考虑。计算一下最多删除多少个数。
2023-10-10 22:15:58
218
原创 div 902 b ( 贪心
考虑每个人都要被叫醒,那么使每个人被叫醒的花费最少 , 于是花费小的人肯定要尽量多使用,于是能用小于p的花费就使用 , 如果不够,那么剩下的人就直接用p叫醒。因为有 p 那么只有小于p的花费的人才是做贡献的。挺有思维的一个b我感觉哈哈哈。
2023-10-10 21:56:33
112
原创 abc 323 e (背包dp
a/b 关于p的逆元 (a * x)% p 其实x就是b的逆元。本质上就是一个枚举子集的问题 ,无限背包的思想属于是。s[ i ] 表示第 i 秒刚好有一首曲子结束的概率。然后就是求逆元的问题。
2023-10-08 12:23:30
163
原创 P9714 「QFOI R1」摸摸
首先操作1 会将整个数组变成一个回文数组 , 变成一个回文数组后 进行两次操作2 和 进行一次操作1 + 2 是等效的。所以我们只需要考虑何时进行这次操作 观察到 b 不超过 2000 ,也就是最多也就进行2000次操作。在进行操作1后 就只需验证剩下的操作能否成功。本质上来说好像就是个枚举的题目。
2023-10-06 17:20:59
189
原创 P1972 [SDOI2009] HH的项链(树状数组
将查询区间按照右端点为第一关键字 左端点为第二关键字,从小到大排序,如果一个石头在之前已经出现过,那么就将这个石头的种类尽量放到右边。同时开一个数组记录每个种类的石头的位置,这个种类石头的出现的上一位的种类数减去1。如果维护前缀的种类就是这个题的难点,用树状数组实现离线查询。
2023-10-05 19:47:32
98
原创 P3052 [USACO12MAR] Cows in a Skyscraper G ( 状压dp
【代码】P3052 [USACO12MAR] Cows in a Skyscraper G ( 状压dp。
2023-10-05 17:53:58
76
原创 P4544 [USACO10NOV] Buying Feed G ( 单调队列dp
【代码】P4544 [USACO10NOV] Buying Feed G ( 单调队列dp。
2023-10-02 17:38:24
81
原创 abc322 d ( 枚举 + 几何 + 状态压缩
最后枚举三个图形的所有二进制情况 x ^ y ^ z == f。处理平移后的图形,将这个图形用二进制压缩一下,16个格子压缩成16位。然后枚举这个图形所有的移动情况,最多向左右上下移动3个,属于是长知识了,关于枚举这个图形的摆放。首先你得知道这个图形旋转的公式,
2023-10-01 22:21:30
317
原创 牛客 ( 计算几何
圆心的计算公式是抄的 , 然后这题想到枚举圆心很简单,三点定圆。考虑这个圆心经过了n 个点 那么这个圆心就会出现。然后就是考虑哪个圆心出现的次数最多,
2023-09-30 18:06:22
136
原创 P4124 [CQOI2016] 手机号码(数位dp
不同的数的dp状态其实只有那个limit不同,把limit放在状态外就能实现一次memset。这题具体的就是要记录两位数字,其他的就和一般数位差不多。
2023-09-30 15:16:06
121
原创 abc 321 f (背包
考虑每新加入一个物品,那么dp[i] = dp[i] + dp[i-x];这个是需要从后往前遍历,因为你修改的时候,只添加了一个物品x ,所以你的dp[i-x] 是没修改前的值应该,类似01背包的滚动。考虑删除一个物品 那么 dp[i] = dp[i] - dp[i-x] 删除一个物品后,那么dp[i-x] 中的一个x就不能对dp[i]有贡献了,这个是需要从前往后递推的,去掉x的i方案数 = 原来的 i 方案数 - 现在 (i - x) 的方案数 (达不到i的方案数)计数类dp的背包dp。
2023-09-26 09:34:04
75
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人