随笔分类 - 未分类
摘要:应 zzj 要求。 思路 1:暴力 没什么好说的吧…… 分离出每一位,去掉 $9$,再转化成 $9$ 进制即可。 核心代码: int f(int x) { int a[10], c = 0, r = 0; while(x) a[++c] = x % 10, x /= 10; for(int i =
阅读全文
摘要:权值树状数组是啥? 这是一种当半个平衡树使的树状数组,值域小或不强制在线(两者只需满足其一)时可以用。 平衡树的一系列操作时间复杂度均为 $O(\log n)$ ($n$ 是值域)。 (如果值域大,可以把操作离线下来然后离散化) 然鹅要开权值数组,所以空间复杂度 $O(n)$。 怎么搞? 以平衡树板
阅读全文
摘要:A 前缀和上课讲过了,说一下 $dp$。 思路很简单,$dp_i$ 为以 $i$ 结尾的最大子段和。 分类讨论前面的数取不取,则有 $dp_i=\max(a_i,a_i+dp_{i-1})$。 那么答案就是 $\max dp_i$。 #include <iostream> using namespa
阅读全文
摘要:是这样的:我想要学亿学类似 pb_ds 那样的东西,然后: 你会发现 bdfs 几乎啥也搜不出来 所以,就有了这篇文章。 algorithm aligned_buffer.h alloc_traits.h array_allocator.h atomicity.h bitmap_allocator.
阅读全文
摘要:这是啥? 栈是一种数据结构,遵循先入后出(FILO)原则。 具体来说,可以把栈想象成一堆书。 如果要把一本书放进书堆里,就要把这本书放在这堆书的最上面。 如果要拿出书堆中的一本书,就要从这堆书的最上面拿出这本书。 代码怎么写? 手写栈用数组模拟即可,这里不再过多介绍。 如果要使用 STL 栈,需要
阅读全文
摘要:栈 普通栈 P1739 P1449 单调栈维护单调子序列 P2866 P2947 P5788
阅读全文
摘要:看几个常见问题: Q1: 这题连状态都没有,怎么搜? A1: 从低位到高位一位一位地搜,把当前的数字当成状态。 Q2: $10^{10}$,质数怎么筛? A2: 先写个正常的筛: for(int i = 2;i <= 10000000;++i) {if(!np[i]) pri[cnt++] = i;
阅读全文
摘要:基本思路都是一样的:扫一遍桶,算 $\sum^{199}_{i=0} \sum^{a_i-1}_{j=1} j$ ($a$ 是桶) 我们知道, T2直接把数 $\bmod 200$ 扔进桶里是会 WA0pts 的(痛失100pts) 因为很明显如果 $i$ 是 $<200$ 的正数,那么 $i\bm
阅读全文
摘要:A 科普 getline 在 OI 中,经常用 getline(cin, s) 读入一行(包含空格)到 s 中。 string::find 假如有两个叫 a,b 的 string。 那么 a.find(b) 返回 b 在 a 中第一次出现的位置的下标。 如果 b 没有在 a 中出现过,返回 -1。
阅读全文
摘要:前置知识:线段树求区间最大值 思路 先考虑暴力的做法: 开一个桶 $cnt$,记录当前区间内的值出现个数。 我们可以发现,每次区间移动后,不需要重新统计, 只需要把 $cnt[$新加入区间的值$]$++,$cnt[$退出区间的值$]$--即可。 询问时输出出现次数最多的值的个数,也就是 $cnt$
阅读全文
摘要:引入 给你一个矩阵,你需要维护一种数据结构,要 $O(1)$ 询问子矩阵和,应该怎么写? 我们都知道,一维的子段和可以前缀和维护,可以考虑把前缀和扩展到 2 维。 假设二维前缀和矩阵是 $s$,也就是 $s_{xy}=\sum\limits_{i=1}^x\sum\limits_{j=1}^ya_{
阅读全文
摘要:概念: 可见山,不可见山:字面意思。 块:两个可见山之间的部分。参考下图: $inv_x$:$x$ 的逆元。 前置芝士: 逆元 只需知道 $\dfrac a b\bmod P=(a\bmod P)×(inv_b\bmod P)\bmod P$ 即可。 求积公式 为了方便表达,$∏\limits_{i
阅读全文
摘要:考场脑抽T2读错题了 T1 签到题。 模拟大家都会,下面是 $O(1)$ 做法: #include <iostream> using namespace std; int w, k, a, n; int main() { cin >> w >> k >> a >> n; if(n > k) cout
阅读全文
摘要:T1 正常模拟即可,下面 code 的判断保证时间晚的答案不会被更新。 #include <iostream> using namespace std; int n, ans, maxn = -1, r[100050]; int main() { cin >> n; for(int i = 0, a
阅读全文
摘要:Updated on 2022.9.12 微云 另外请确保按照网上的教程操作(并在学校老年机上下载.NET),网盘中并没有配置。 如果语言是英语,按 Ctrl+Shift+P,输入 display,找到 Configure Display Language,选择中文(简体)即可
阅读全文
摘要:I boomed IOI T1 原题。 T2 又双叒叕是原题。 这是 $n\log n$ 的。
阅读全文
摘要:I AK IOI 这题把T3和T4放到了前面,所以建议阅读顺序 3-4-1-2。 T1 我把每个结论隔开了,看着应该会好一点。 我们知道,生成树就是给非根的每个结点找一个父亲。 如果 $x$ 的父亲是 $y$,那么它们之间的边权是 $lcm(x,y)≥x$。 我们知道,当 $y$ 是 $x$ 的因数
阅读全文
摘要:不算很难,但环境问题卡死一堆人。 T1 众所周知,一场比赛需要一道签到题。 #include <iostream> #include <string> #include <algorithm> using namespace std; string s; int main() { cin >> s;
阅读全文
摘要:个人认为最难的一次。 T1 只需要注意: 最好把除了 $k$ 的变量开 double。 其他正常带式子即可。 T2 这里介绍一个 STL 函数:find_first_of。 如果 s,t 是 string 类型的,那么就可以用 s.find_first_of(t) 来得到 s 中第一个被 t 包含的
阅读全文
摘要:Information Onceaweek Inzhizhen boomed again and again T1 经典数论几何题。 一个最基本的贪心策略就是先横向摆(此时还剩一个 $n×(n\bmod m)$的空)。 然后再在空里竖着摆(此时剩 $(n \bmod m)^2$ 的空),就摆不下了。
阅读全文

浙公网安备 33010602011771号