10 2021 档案
摘要:B. Tairitsu 首先很容易想到一个加边后 DAG 上 DP 的做法。这个做法是 \(O(n^2)\) 的,考虑如何优化。 DAG 上 DP 的本质是一种刷表法,如果我们换成填表法会不会好一些呢? 设 \(f(i)\) 表示以 \(i\) 结尾的最长合法子序列的长度,\(O(n^2)\) 转移
阅读全文
摘要:题外话 给大家讲个笑话,这四题写一起是因为别人送了一场校内模拟赛,结果赛后发现 Subtask 还要自己加,T3 的 SPJ RE 了,T4 的数据包还和 T3 发重了 COCI 2019-2020 #6 Trener 题目里有一个关键条件:前一个字符串必须是后一个字符串的子串。 这意味着,只要后一
阅读全文
摘要:带有选拔性质的阶段性测试 Day -1 大部分人都在机房电竞,我随机刷了几道 CF 保持状态。虽然我这个阶段的人好像也没什么状态可言。 下午 4 点钟回家休息 Day 0 早晨起来一看手环的表带扣断了。自闭。不过倒是还能带,先将就着 上午在家休息 + 准备必要物品。 下午两点半上车,三点出发。车上看
阅读全文
摘要:A 比较阅读理解。。读懂了还好 int n, p; std::vector<std::string> vs; int main() { std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> p; rep (i,
阅读全文
摘要:C. Bear and String Distance 简单题,直接从距离范围最宽广的字母开始选,每次贪心选最大的。 const int MAXN = 1e5 + 10; int n, k; char ss[MAXN]; struct E { char s, t; int id; } es[MAXN
阅读全文
摘要:C. Not Equal on a Segment 脑子转不动,结果想了半天才做出来。。 有一个性质:\(a \geq b\) 且 \(a \leq b \Leftrightarrow a = b\) 所以我们需要维护一个区间最小值 \(\mathrm{minn}\) 和区间最大值 \(\mathr
阅读全文
摘要:思维路径: xor 运算的特性 “是否不同” 相同会消掉 前缀和思想(处理区间查询、树上路径查询) 逐位处理 从高位到低位贪心 HDU 4825 Xor Sum 板子题。 将所有数字二进制从高位到低位插入 Trie 中,从高到低贪心地能取到 1 就取 1. const int MAXN = 1000
阅读全文
摘要:在回家的车上打的,效果挺差。 A 一遍 AC。 std::string ss; int main() { cin >> ss; int n = (int) ss.size(); if (ss[n - 1] == 'r' && ss[n - 2] == 'e') cout << "er" << end
阅读全文
摘要:C. Pearls in a Row 直接贪心做即可。 但是注意如果最后一段不合法,要把最后一段合进上一段,如果整个序列都不合法就无解。 #易错警示:仔细考虑无解条件,可能还有别的坑。 const int MAXN = 3e5 + 10; int n, aa[MAXN]; int lisan[MAX
阅读全文
摘要:A B 都是垃圾题,不说了。 C. The Labyrinth 和之前做过的某道题相似,用 DFS 确定一下每个位置属于哪个联通块,然后确定一下每个 * 周围有哪几个联通块,去重可以直接 std::set 实现。 const int MAXN = 1000 + 10; int n, m; int g
阅读全文
摘要:A 读完题总是会楞一下,然后才开始写。 一遍 AC。 const int MAXN = 100 + 10; int n, p, q; char ss[MAXN]; int main() { scanf("%d %d %d", &n, &p, &q); scanf("%s", ss); for (in
阅读全文
摘要:更新到:Educational Codeforces Round 10 题解 树上问题 与某一点的子树有关的,思考树形 dp,dsu on tree 如果是某个点与所有点有关,对所有点求答案,就考虑换根 dp。能换根的前提是 dp 方程可以轻松地修改(取 / 不取某一个子树)(1 2) 与某两个点有
阅读全文
摘要:打得很烂,预计 1500 只拿到了 700,甚至比 VP 打得还要差。 A 一遍 AC。 int main() { int x = read(); if (x % 100 == 0 && x > 0) puts("Yes"); else puts("No"); return 0; } B 一遍 AC
阅读全文
摘要:A 一遍 AC。 int main() { int a, b, c; cin >> a >> b >> c; for (int i = a; i <= b; ++i) { if (i % c == 0) { cout << i << endl; return 0; } } cout << -1 <<
阅读全文
摘要:A. USB Driver 脑抽了居然升序排序。。愣了几秒才发现 一遍 AC。 const int MAXN = 100 + 10; int n, aa[MAXN]; int main() { std::ios::sync_with_stdio(false); cin.tie(0); cout.ti
阅读全文
摘要:A. Seismic magnitude scales 一遍 AC。 int a, b; int main() { std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> a >> b; if (a > b) std::sw
阅读全文
摘要:A. Extract Numbers 有一说一这题挺毒的,乍一看是个垃圾模拟其实要处理的东西还蛮多,而且我还决定了要边读入边处理,再加上 Vim 用的还不熟练,写着写着就写急躁了。因此我总共写了 17 分钟,换了两种写法才过。 一遍 AC。 #错误警示:心态很重要,细节也要想清楚。Think twi
阅读全文
摘要:A. Four Digits 一遍 AC。 int n; int main() { scanf("%d", &n); std::string str = std::to_string(n); while (str.size() != 4) str = '0' + str; printf("%s\n"
阅读全文
摘要:A. 牛牛的方程式 数学题。 考虑 \(ax + by = c\) 有解的充要条件是 \(c|\mathrm{gcd}(a, b)\),于是 \(ax + by\) 可以表示的所有整数即为 \(\mathrm{gcd}(a,b)t\) 代入原式:\(\mathrm{gcd}(a,b)t + cz =
阅读全文
摘要:A. Tricky Sum 居然没有一眼秒掉。。自闭了 1 到 n 的和很好算,小于等于 n 的所有 2 的幂次之和也很好算,把后面那个东西减两次就做完了。 一遍 AC。 int main() { std::ios::sync_with_stdio(false); cin.tie(0); cout.
阅读全文
摘要:数据结构 线性结构 单调队列 滑动窗口优化 DP 例题 LOJ 10180. 「一本通 5.5 练习 1」烽火传递 给定一个数轴,上面有 n 个点,选中每个点有一定代价,现要求连续的 m 个点中至少选一个,求最小代价。 /** * * 考虑 dp * 设 dp[i] 表示选择第 i 个来保证 [1,
阅读全文
摘要:C++ 程序设计 STL 模板 std::set #include <set> T 为已重载了 operator < 的类型 定义: std::set<T> st; 插入元素: T New_Elem; st.insert(New_Elem); 若元素已存在则什么都不会发生。 删除元素: T Exis
阅读全文
摘要:1092E Minimal Diameter Forest 解题报告 直接手玩猜贪心策略:把直径的中点(如果有两个,取任意一个)互相连接起来,而且一定是连成菊花图最优。 取哪个作为菊花图的中心点呢?继续手玩可以猜到,一定是直径最大的联通块的直径中点。 证明也很显然。 代码实现 const int M
阅读全文
摘要:我一直是不喜欢对一个题单独开一篇文章的,但是这次例外,因为本来要一块写的其他题我实在是补不动了。 解题报告 本题的一个难点就在于如何处理卡线情况。 于是考虑先枚举这个东西:枚举卡线的人中,最后一位进队的编号是几;再枚举分数线。 有了这两个信息,我们就可以轻松算出每个人进队的概率是多少。 还有一个就是
阅读全文
摘要:HDU 3680 Naughty Fairies (Also POJ 3278 Catch That Cow) 解题报告 首先 \(m > n\) 直接输出 \(m - n\),因为你只能每次做减法。 同时这给我们提供了一条重要原则:在操作过程中不能让 \(m\) 比 \(n\) 大太多。 乘法是个
阅读全文
摘要:Codeforces 1272F Two Bracket Sequences 解题报告 一个听他们说好像很“套路”的做法。可惜我不会。 设 f[i][j][k] = {i', j', k'} 表示匹配了 S 的前 i 位,T 的前 j 位,有 k 个多余的左括号没有匹配,需要的括号最少是多少,这个状
阅读全文
摘要:模拟赛遇到了一道字符串匹配题,用 Hash 暴力拿了 50,赛后才知道是 KMP 板子题,发现自己 KMP 一直没学会过,于是有了这篇文章。 不适合新手入门,只适合学过的人复习。 KMP 算法学习笔记 约定记号 字符串 \(S\) 为主串,也就是要在 \(S\) 中查找其他串。 字符串 \(P\)
阅读全文