随笔分类 - 题解
摘要:由于 \(m \le 2 \times 10^{5}\),所以可以把有黑格子的行扔到一个 map 里面,然后再用一个 set 存储当前能走到哪些格子。按照题意暴力转移,开两个 vector in 和 out,分别存储哪些格子要删掉,哪些格子要加入。 #include <bits/stdc++.h>
阅读全文
摘要:贪心。 数据范围 \(n \le 10^{6}\),因此我们要用时间复杂度为 \(\mathcal{O}\left( n \right)\) 的算法来解决这个问题。 思路 从左至右扫一遍序列,如果遇到 \(10\) ,则要将这个 \(0\) 交换到前面的位置。由于是字典序最小,\(0\) 应该尽量在
阅读全文
摘要:动态规划好题。 对于此题解,不懂的问题可以私信笔者。 前置知识 解题方法 用 \(dp_{i,j}\) 表示前 \(i\) 个数选择了若干个数按位与之后为 \(j\) 的子序列个数。 接下来思考转移。 想到这里,你会发现按位与没有逆运算,一次我们要正推,例如 \(f_{i+2}=f_{i}+f_{i
阅读全文
摘要:这道题其实挺有意思,多测里面还套了个多测。 思路就是用向量模拟删除过程,具体请看代码里的注释。 #include <bits/stdc++.h> using namespace std; int k,q,a[105]; void solve() { int n; cin>>n; vector<int
阅读全文