03 2024 档案

摘要:(一) 数学题。 根据 \(C\) 的值,可以得出 \(x\) 和 \(y\) 有 \(s1+s\) 个相同的数位和 \(s2\) 个不同的数位。 \(s1\) 是 \(C\) 的二进制中 \(0\) 的数量,\(s2\) 是 \(C\) 的二进制中 \(1\) 的数量。 \(x\) 和 \(y\) 阅读全文
posted @ 2024-03-31 11:21 Jerry_heng 阅读(16) 评论(0) 推荐(0) 编辑
摘要:(一) 可能因为我太菜了,感觉 D>E。 用 \(vis_i\) 表示 \(i\) 是否出现,\(sum_i\) 表示当前集合大小。 用 vector 维护出现的区间的端点。 将 \(sum\) 数组前缀和即可。 (二) AC 代码。 #include<bits/stdc++.h> #define 阅读全文
posted @ 2024-03-31 11:11 Jerry_heng 阅读(15) 评论(0) 推荐(0) 编辑
摘要:(一) 这题可以运用同余的性质,预处理出每一位 \(s_k=10^k \bmod\ 998244353\)。 记录输入的每一位 \(a_i\),第一位的下标 \(be\),最后一位下标 \(en\)。 对于操作 1,\(ans=ans\times10+x,en=en+1\)。 对于操作 2,\(an 阅读全文
posted @ 2024-03-28 08:23 Jerry_heng 阅读(8) 评论(0) 推荐(0) 编辑
摘要:(一) 由于要从小到大输出,所以用两个二维优先队列 \(ans1\) 和 \(ans2\) 对应操作 \(2\) 和 \(3\)。 注意:操作三要去重!这里用 map 解决。 (二) AC 代码(略卡常)。 #include<bits/stdc++.h> #pragma GCC optimize(2 阅读全文
posted @ 2024-03-28 08:23 Jerry_heng 阅读(3) 评论(0) 推荐(0) 编辑
摘要:(一) 如果 \(x\bmod n=y\bmod n\),那么 \(|x-y|\) 是 \(n\) 的倍数。 所以这道题就变成了找没对数的差的最大公因数。 (二) AC 代码。 #include<bits/stdc++.h> #define int long long using namespace 阅读全文
posted @ 2024-03-28 08:22 Jerry_heng 阅读(3) 评论(0) 推荐(0) 编辑
摘要:(一) 先找出符合 \(a_i \ge a_{i+1} \ge a_{i+2}\) 的所有 \(i\)。 将问题按左端点(或右端点)排序。 对于每一个问题,找出最左的符合条件的 \(l\) 和最右的符合条件的 \(r\)。 由于时间会超,\(r\) 用二分搜。 然后一般的 \(ans\) 就是给定区 阅读全文
posted @ 2024-03-28 08:22 Jerry_heng 阅读(9) 评论(0) 推荐(0) 编辑
摘要:(一) 一般情况下,当 \(n\) 为 \(m\) 的倍数时,可以无限进行下去。 所以题目就转化成了问 \(n\) 的最小的大于 \(1\) 的因数是否 \(\le m\)。 (二) AC 代码 #include<bits/stdc++.h> #define int long long using 阅读全文
posted @ 2024-03-28 08:22 Jerry_heng 阅读(2) 评论(0) 推荐(0) 编辑
摘要:(一) 如果你上过初二科学课的话,你一定会知道:物体排开水的体积 \(\times\) 水的密度 \(=\) 物体的质量。 物体密度比水大时,排开水的体积等于物体体积。 物体密度比水小时,排开水的体积等于物体质量 \(\div\) 水的密度。 (二) AC 代码。 #include<bits/std 阅读全文
posted @ 2024-03-28 08:22 Jerry_heng 阅读(7) 评论(0) 推荐(0) 编辑
摘要:(一) 相当于问你能否将 \(m\) 拆成奇特的 \(n\) 进制是每一位是 \(1\) 或 \(0\) 或 \(-1\)。 然后就用这题的方法拆分。 先对 \(n\) 取余。 如果余 \(0\),直接继续。 如果余 \(1\),\(m=m-1\)。 如果余 \(-1\),\(m=m+1\)。 否则 阅读全文
posted @ 2024-03-28 08:21 Jerry_heng 阅读(13) 评论(0) 推荐(0) 编辑
摘要:(一) 直接模拟。 用 \(l\) 和 \(r\) 记录当前左端点和右端点编号。 用 \(step\) 记录步数。 用 \(slnow\) 和 \(srnow\) 记录有超过的数以及当前累加和。 用 \(sl\) 和 \(sr\) 记录从左到右和从右到左的和。 (二) AC 代码。 #include 阅读全文
posted @ 2024-03-28 08:21 Jerry_heng 阅读(2) 评论(0) 推荐(0) 编辑
摘要:(一) 如果存在符合条件的构造的话,\(x=k,y=n-k\) 肯定是其中一组。 此时只要判断 \(y\) 是否大于 \(x\)。 (二) AC 代码。 #include<bits/stdc++.h> #define int long long using namespace std; int n, 阅读全文
posted @ 2024-03-28 08:21 Jerry_heng 阅读(3) 评论(0) 推荐(0) 编辑
摘要:(一) 这题,可以用一种类似于 BFS 的方法。 一开始,先把 \(1\) 号点放入队列。 用 \(head\) 和 \(tail\) 记录当前未处理的头和尾。 对于每一个点,查找符合的点,放入队列。 (二) AC 代码。 #include<bits/stdc++.h> using namespac 阅读全文
posted @ 2024-03-28 08:21 Jerry_heng 阅读(7) 评论(0) 推荐(0) 编辑
摘要:(一) 显而易见。 \(Z_n+Z_{n-1}-2Z_{n-2}\) \(=(Z_{n}-Z_{n-2})+(Z_{n-1}-Z_{n-2})\) \(=n^n+n^k+2\times (n-1)^{n-1}+2\times(n-1)^k\)。 然后套进快速幂模板。 (二) AC 代码。 #incl 阅读全文
posted @ 2024-03-28 08:20 Jerry_heng 阅读(4) 评论(0) 推荐(0) 编辑
摘要:(一) 可以看成把一个数用二进制表示。 如果 \(n\le2^k-1\) ,都可以取,输出 \(n+1\)。 否则可以取 \(0\sim2^k-1\),输出 \(2^k\)。 (二) AC 代码。 #include<bits/stdc++.h> #define int long long using 阅读全文
posted @ 2024-03-28 08:20 Jerry_heng 阅读(4) 评论(0) 推荐(0) 编辑
摘要:(一) 一段一段找。 固定左节点 \(l\),右节点 \(r\) 越远越好。 然后 \(l=r+1\) 继续搜。 如果 \(l\) 和 \(r\) 的距离不小于 \(k\): 新增 \(1+2+...+(r-l+1-k+1)=\frac{(r-l+2-k)\times(r-l+3-k)}{2}\) 阅读全文
posted @ 2024-03-28 08:19 Jerry_heng 阅读(2) 评论(0) 推荐(0) 编辑
摘要:(一) 比赛结束前 \(5\) 分钟才调出来。 二分答案。先排序,然后从左往右搜,看是否能在 \(3\) 次以内处理完。 由于是绝对值,控制左右数之差 \(\le\) 选定的数 \(x\)。 每次固定左节点 \(l\),搜右节点 \(r\),越远越好。 搜完后 \(l=r+1\),继续搜。 特判 \ 阅读全文
posted @ 2024-03-28 08:19 Jerry_heng 阅读(5) 评论(0) 推荐(0) 编辑
摘要:(一) 通过有饼干的位置的行的最大最小值,列的最大最小值确定矩形范围。 然后在这个范围里搜索,如果不是 # 就输出坐标。 (二) AC 代码。 #include<bits/stdc++.h> using namespace std; int n,m,l=INT_MAX,r,u=INT_MAX,d; 阅读全文
posted @ 2024-03-28 08:19 Jerry_heng 阅读(1) 评论(0) 推荐(0) 编辑
摘要:(一) 直接用二分找出大于输入的 \(l\) 和 \(r\) 的数。 利用前缀和快速求出中间的几块的睡眠时间和。 然后处理最左边和最右边两块的睡眠时间。 二分可以用 upper_bound 直接解决。 (二) AC 代码。 #include<bits/stdc++.h> using namespac 阅读全文
posted @ 2024-03-28 08:19 Jerry_heng 阅读(5) 评论(0) 推荐(0) 编辑
摘要:(一) 由异或的性质知,如果 \(a \oplus b=c\),那么 \(a \oplus c=b\)。 对于每一个数 \(a\),搜它前面有几个 \(b=a \oplus x\)。 坑点:要开 long long,数组有开大一点。 (二) AC 代码。 #include<bits/stdc++.h 阅读全文
posted @ 2024-03-28 08:18 Jerry_heng 阅读(2) 评论(0) 推荐(0) 编辑
摘要:(一) 每次先减到不能除为止。 然后比较是除 \(k\) 花费少,还是 通过不断减 \(1\) 花费少。 当 \(n<k\) 时只用减到 \(1\) 就行了。 特判 \(k=1\)。 (二) AC 代码。 #include<bits/stdc++.h> #define int long long u 阅读全文
posted @ 2024-03-28 08:18 Jerry_heng 阅读(3) 评论(0) 推荐(0) 编辑
摘要:(一) 先对于小的数据全排列,发现每一个都是 \(1,2,\dots,x,n,n-1,\dots,x\) 类型的(我也不知道为什么)。 然后暴力枚举 \(x\),统计答案。 (二) AC 代码。 #include<bits/stdc++.h> #define int long long using 阅读全文
posted @ 2024-03-28 08:18 Jerry_heng 阅读(8) 评论(0) 推荐(0) 编辑
摘要:小学奥数题。 和相等,要让乘积尽量大,那么就要用尽量多的 \(3\)。 这是为什么呢,因为 \(3\) 最接近于 e。 设要取尽量多的值为 \(ans\)。 \(ans^\frac{n}{ans}\) 最大,即 如果 \(n \bmod 3=0\),那么 \(ans=3^\frac{n}{3}\)。 阅读全文
posted @ 2024-03-28 08:17 Jerry_heng 阅读(6) 评论(0) 推荐(0) 编辑
摘要:(一) 可以将 \(x\) 转为二进制。 考虑一个数的二进制 \((1\dots10\dots0)\)。 其中,第一个省略号中有什么不确定,第二个省略号里都是 \(0\)。 易得,每个数都可以看成这种形式。 那么可以每次去掉最后一位的 \(1\),易证减去的数是原数的因数。 最后会得到形如 \((1 阅读全文
posted @ 2024-03-27 12:33 Jerry_heng 阅读(3) 评论(0) 推荐(0) 编辑
摘要:(一) 枚举对角线。 然后分别找正在对角线上方的点与对角线端点构成三角形面积的最大值。 和在对角线下方的点与对角线端点构成三角形面积的最大值。 如果所有点都在同侧,那么不算。 通过过两点直线的解析式求出另一点在直线的哪一侧。 (二) AC 代码。 #include<bits/stdc++.h> #d 阅读全文
posted @ 2024-03-27 12:32 Jerry_heng 阅读(25) 评论(0) 推荐(0) 编辑
摘要:(一) 对于第一个问题,直接搜出字符串中有多少个仅由 \(0\) 或 \(1\) 组成的串组成的。 对于第二个问题,每个串只有一个能选,然后选择顺序有所不同,具体看代码。 (二) AC 代码。 #define int long long #define md 998244353 using name 阅读全文
posted @ 2024-03-27 12:29 Jerry_heng 阅读(2) 评论(0) 推荐(0) 编辑
摘要:CSP Day 0 从余姚坐高铁到杭州,高铁站里全是同学。 高铁里面上了一节网课,临时补补。 到宾馆,考场就在楼下,点了份 KFC,睡大觉。 Day 1 早餐还是 KFC,西式快餐从来不会拉肚子(确信)。 J 开 J 组题,第二题挺熟悉的。 第三题调了 30 分钟。 第四题写了个玄学SPFA+dp, 阅读全文
posted @ 2024-03-27 12:29 Jerry_heng 阅读(24) 评论(0) 推荐(0) 编辑
摘要:学校尖子班 \(65\) 人。 我的分数 平均分 名次 语文 96 100 40+ 数学 108 102 33 英语 112 ? 17 科学 139 149 62(shit) 社会 91 ? 44 总分 548 ? 52 阅读全文
posted @ 2024-03-27 12:29 Jerry_heng 阅读(14) 评论(0) 推荐(0) 编辑
摘要:要求:动漫(最好ys)女角色 欢迎参加!!! 阅读全文
posted @ 2024-03-27 12:28 Jerry_heng 阅读(13) 评论(0) 推荐(0) 编辑
摘要:(一) 由于每次把子节点的权值加到父节点中,深度越深影响越大。 将 \(1\) 号节点视作父节点,不难发现,同一深度的节点对其贡献度相等,都为 \(1\times now\ val\)。 因为 \(10^{100}\) 极大,所以统计每层权值和,从深往浅扫。 (二) AC 代码。 #include< 阅读全文
posted @ 2024-03-27 12:28 Jerry_heng 阅读(6) 评论(0) 推荐(0) 编辑
摘要:(一) 因为 \(2^{n}+2^{n}=2^{n+1}\)。 设取的三个数为 \(2^i\),\(2^j\),\(2^k\),\(i\le j \le k\)。 因为 \(2^i+2^j>2^k\),所以 \(j=k\)。(反证法易证) 此时 \(i\) 任意取。 注意不要重复取。 将答案分为两类 阅读全文
posted @ 2024-03-27 12:27 Jerry_heng 阅读(5) 评论(0) 推荐(0) 编辑
摘要:(一) 从 \(i\) 到 \(j\) 有两种走法,一种是用 \(a_j-a_i\) 的代价,一种是用 \(1\) 的代价,前提是 \(j\) 是 \(i\) 最近的。 显然如果符合条件选第二种。 先考虑从左向右走。(和从右向左相同) 考虑走到了节点 \(i\),如果 \(a_{i+1}-a_{i} 阅读全文
posted @ 2024-03-27 12:26 Jerry_heng 阅读(11) 评论(0) 推荐(0) 编辑
摘要:(一) 直接暴力!!! 对于每一个数,枚举它能生成的数。 然后对于每一个可能的答案,开长度为 \(k\) 的优先队列维护,同时统计操作次数和。 时间复杂度为 \(Θ(\log^2_2n)\)。 惊讶地发现顺便把双倍经验给切了。(卡过) (二) AC 代码。 #include<bits/stdc++. 阅读全文
posted @ 2024-03-27 12:25 Jerry_heng 阅读(1) 评论(0) 推荐(0) 编辑
摘要:(一) 不太好想。(我看了题解才会) 当 \(k>2\) 时,可以选两次相同的 \(i\) 和 \(j\)。再将生成的数做差。 当 \(k=1\) 时,直接 \(Θ(n^2)\) 枚举。 当 \(k=2\) 时,先枚举第一次的 \(i\) 和 \(j\),再用 lower_bound() 实现查找第 阅读全文
posted @ 2024-03-27 12:25 Jerry_heng 阅读(11) 评论(0) 推荐(0) 编辑
摘要:把字符串从小到大排序,插到字典树中。 将字典树每个节点记录以该节点为倒数第二个字符的字符串,用 vector 存储。 将字符串长度小的向长度大的连边。 最后形成有向无环图,跑拓扑最长路即可。 处理最长路看 P1807。 阅读全文
posted @ 2024-03-27 12:25 Jerry_heng 阅读(2) 评论(0) 推荐(0) 编辑
摘要:(一) 每次下注,要么赚 \(y\times (k-1)\),要么亏 \(y\)。 由于不知道什么时候会输,每次都下能赚回前面所有的金额好了。 第一次下 \(1\) ,共下 \(x+1\) 次。 (二) AC 代码。 #include<bits/stdc++.h> using namespace s 阅读全文
posted @ 2024-03-27 12:24 Jerry_heng 阅读(5) 评论(0) 推荐(0) 编辑
摘要:考虑使 \(a_i>a_j,a_{i+1}<a_{j+1}\) 或 \(a_i<a_j,a_{i+1}>a_{j+1}\)。 AC 代码。 #include<bits/stdc++.h> using namespace std; int t,n,a[100010]; int main(){ scan 阅读全文
posted @ 2024-03-27 12:24 Jerry_heng 阅读(8) 评论(0) 推荐(0) 编辑
摘要:(一) 题意转化为求 \(i<j\) 且 $a_j\le a_i $ 的有序对 \((i,j)\) 数。 二维偏序,容易想到用树状数组或归并排序做。 (二) AC 代码(树状数组)。 #include<bits/stdc++.h> #define int long long using namesp 阅读全文
posted @ 2024-03-27 12:24 Jerry_heng 阅读(19) 评论(0) 推荐(0) 编辑
摘要:(一) 考虑对每一种颜色单独求解。 对于一次第 \(k\) 种的“循环”,美丽度会加上 \[\sum_{i=1}^{a_k}C_{n}^{i}\times v_k^{i}=(v_k+1)^{a_k}-1 \]相信大家都学过二项式定理。 “循环”次数取决于其他珠子是否出现,即 \(2^{\sum_{i 阅读全文
posted @ 2024-03-27 12:23 Jerry_heng 阅读(2) 评论(0) 推荐(0) 编辑
摘要:(一) 虽说代码较长,但非常好理解,还是最优解(公开的就两个)。 考虑对每个数单独算贡献,循环枚举与它进行运算的数的长度,然后确定那个数的位置即可,再乘以出现的数位对应的贡献,如出现在倒数第二位就乘 \(10\)。 难度应该不到绿。 (二) AC 代码。 #include<bits/stdc++.h 阅读全文
posted @ 2024-03-27 12:23 Jerry_heng 阅读(5) 评论(0) 推荐(0) 编辑
摘要:(一) F<E。 显然是线段树,虽然分块也能过。 每个线段树上的节点记录最大值,第二大值,最大值个数,第二大值个数。 合并操作注意值相等的情况。 (二) AC 代码。 赛事写得有点乱。 #include<bits/stdc++.h> #define int long long using names 阅读全文
posted @ 2024-03-27 12:22 Jerry_heng 阅读(3) 评论(0) 推荐(0) 编辑
摘要:(一) 用 map 记录出现次数即可。 这 D 有点水啊。 (二) AC 代码。 #include<bits/stdc++.h> #define int long long using namespace std; int n,m,cnt,a[200010]; map<int,int>mp; sig 阅读全文
posted @ 2024-03-27 12:22 Jerry_heng 阅读(4) 评论(0) 推荐(0) 编辑
摘要:(一) 注意到 \(x_i\) 的绝对值 \(\le n\)。 那么统计每一个位置的血量和。 先从靠近的击杀必定最优,剩余的子弹用 \(sum\) 存储。 还是直接上代码吧。 (二) AC 代码。 #include<bits/stdc++.h> #define int long long using 阅读全文
posted @ 2024-03-27 12:22 Jerry_heng 阅读(11) 评论(0) 推荐(0) 编辑
摘要:(一) 数据范围较小,三重循环枚举选的数,用 map 存储可能的和即可。 (二) AC 代码。 #include<bits/stdc++.h> #define int long long using namespace std; int n,m,l,q,a[110],b[110],c[110]; m 阅读全文
posted @ 2024-03-27 12:22 Jerry_heng 阅读(5) 评论(0) 推荐(0) 编辑
摘要:(一) 这次 ABC 有点水。 每个数记录前面那个数,和后面那个数。 对于每个数,开个数组记录值,用 map 记录一个值的位置 (二) AC 代码。 #include<bits/stdc++.h> #define int long long using namespace std; int pre[ 阅读全文
posted @ 2024-03-27 12:20 Jerry_heng 阅读(5) 评论(0) 推荐(0) 编辑
摘要:(一) 首先交换相同字符不改变字符串形态,那么就先统计是否有相同字符。 交换不同字符容易证明不同操作后字符串各不相同。 用前缀和或后缀和维护 \(i+1\) 到 \(n\) 中与 \(i\) 位置字符不同的数量。 (二) AC 代码。 #include<bits/stdc++.h> #define 阅读全文
posted @ 2024-03-27 12:19 Jerry_heng 阅读(9) 评论(0) 推荐(0) 编辑
摘要:(一) 注意到,\(c\) 可能 \(<1\)。 主要考虑操作后的变化量。 当 \(c=1\) 时,不会改变序列。 当 \(c>1\) 时,和最大即为增加最多。那么求出最大子段和,再乘上 \(c-1\) 即为变化量。 当 \(c<1\) 时,将序列每个数取反即可。 (二) 我因为不会最大字段和挂了 阅读全文
posted @ 2024-03-26 20:56 Jerry_heng 阅读(5) 评论(0) 推荐(0) 编辑