摘要:
题意 一个数列,每次操作把一个位置改成 1, 每次操作后,求数列中有多少段连续的 1。 思路 分类讨论,考虑每次操作的位置的左右两边的数(只是两个数): 左右两边的数都是 0:...0 1 0... 这个位置单独构成一段,答案加一。 左右两边的数都是 1:...01...1 1 1...10... 阅读全文
摘要:
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$ 的因数 阅读全文