算法题目记录
- 格式
1 | // 题目来源 , 什么算法 |
2023-11-27
异或树
cf CF1658D2 388535 (Hard Version) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
1 | int T,l,r,a[N],cnt,trie[N][30],b[N]; |
floyd
预赛
1 | for(int k = 1; k <= n; ++k){ |
拓扑排序
1 | auto dfs = [&](auto &&dfs, int u, int from) -> void { |
2023-11-28
拓扑排序
CF CF1593E Gardener and Tree - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
1 | void toposort() { |
分治
leetcode 932. 漂亮数组 - 力扣(LeetCode)
奇数 + 偶数 等于 奇数
题目的原理, 可以进行映射处理, 所有,对于每一层
1 | class Solution { |
构造题
构造题目, 需要大胆猜测, 这里说全部加起来为0, 这有点难想, 但是转换更小的情况取思考) 我们设 b i + 1 = ai, bi = ai + 1, 这样子就会好像很多了
2023-11-29
数据结构 , 规律
a[i] = i + 1这种处理数据结构的方式, 可以解决那种 一个点, 后面的所有点, 移动到另外一个点的后面, 而且需要记录节点编号
1 |
|
2023-11-30
逆序对
1 |
|
回文串
CF CF1555D Say No to Palindromes - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
一开始就可以取考虑 循环 串的方向,
然后我们发现一个字符串如果不按照 abc 的全排列构成的循环串 就不可能实现回文
所以考虑把当i个字符串变成abc 全排列的一种,需要消耗多少费用, 然后来解决这个问题。(别再当蠢猪了)
1 |
|
数学
CF CF1542C Strange Function - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
如果一个数, 可以被 1, 2, 3, 4, 5 , 6 除, 那么这个数最小是多少, 1 * 2 * 3 * 4 * 5 * 6, 然后一个这个单位增加的数, 依旧满足这个特征, 那么我们就可以计算出来, 一个数x里面有多少个 可以 被 1 ~ 6 相除的个数
2023-12-1
构造题, 字符串
CF Erase and Extend (Hard Version) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
直接从长度为 0 开始往后构造数组就好了
1 | int main() { |
数学
CF CF1603B Moderate Modular Mode - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
1 |
|
2023-12-3
思维题
leetcode 100153. 需要添加的硬币的最小数量 - 力扣(LeetCode)
- 一开始想成了背包问题,实际上不是, 考虑一个情况, 如果 你能凑出前m个元素, 当前元素是x,
- 如果x 《= m, 那么 【1, m + x】,你都可以凑出来
- 否则, 我们在添加一个m, 尽可能扩大元素, 使得后面的x 《= m
1 | class Solution { |
滑动窗口 模拟题
leetcode 100145. 统计完全子字符串 - 力扣(LeetCode)
- 这道题目, 一开始就往 哈希的方向去想, 但是这是错误, 因为 当前cur 可能可以与多种情况进行匹配(分类思考能力不行),
- 实际上这题就是枚举 不同字符的个数, 这个时候窗口的长度就已经固定住了, 那么就直接最基础的滑动窗口就可以过掉了
1 | class Solution { |
数学
leetcode 100146. 统计感冒序列的数目 - 力扣(LeetCode)
- 没时间看了
- 就是第一种是 序列之间各个元素之间的插入顺序(然后这个时候插入的元素还没有指定是序列中的哪一个元素),然后第二部在对同一个序列之内进行方案计算
1 | fac[0]=1; |
2023-12-4
数学题
考虑下面几个等式
我们就可以推出结论, 然后二分判断 即可
1 | map<pair<int,int>,vector<int> >V; |
模拟题
题目思路不难想, 但是代码有点难写, 就在结尾设置可以绕圈的地方就好了
1 | void solve() { |
2023-12-5
二分
- 想到了二分,但是不知道怎么写check函数, 实际上,就是把他能走到的边界算出来就好了
模拟题
- 知道怎么做,但是就是打不出来代码, 实际上观察可以发现, 满足添加的模型一定满足 (a[i] <= (a[(i + 1) %n])) <= 1或者 (a[i] >= (a[(i + 1) %n])) <= 1
- 然后就好搞了
思维题
- 实际上这题 你可以这么想如果我想要进位, 那么就得dig就是当前位加上10, 那么对于下一位因为进位了, 所以我可以少要1, 但是你的dig 还是多出来了 9个, 我们不可能从前面省下来
2023-12-6
线段树
CF Ones and Twos - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) CodeTON Round 7 (Div. 1 + Div. 2, Rated, Prizes!) A - E - 知乎 (zhihu.com)
1 |
|
2023-12-7
线段树 思维
反正就是线段树各种骚操作就完了
1 |
|
2023-12-8
数学题
CF CF1889B Doremy’s Connecting Plan - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
只能说太强了, 根本想不出这个解法