摘要:
由于 \(m \le 2 \times 10^{5}\),所以可以把有黑格子的行扔到一个 map 里面,然后再用一个 set 存储当前能走到哪些格子。按照题意暴力转移,开两个 vector in 和 out,分别存储哪些格子要删掉,哪些格子要加入。 #include <bits/stdc++.h> 阅读全文
摘要:
使用队列存储每一个船上的每一个人,当一条新的船到达时,把之前超时的人弹出队列,然后输出答案。 #include <bits/stdc++.h> #define ll long long using namespace std; struct node { int timee,country; }q[ 阅读全文
摘要:
首先这道题肯定不能暴力枚举,我们要思考其他算法。 我们可以给每一条边编一个号。然后从根开始遍历这棵树,当一条边的编号比他祖先到他祖先的祖先的那条边的编号还要小时,就说明顺序错了,要再等一轮。 这个就简单了,直接 dfs 就行,注意答案要加 \(1\)。 #include <bits/stdc++.h 阅读全文
摘要:
贪心。 数据范围 \(n \le 10^{6}\),因此我们要用时间复杂度为 \(\mathcal{O}\left( n \right)\) 的算法来解决这个问题。 思路 从左至右扫一遍序列,如果遇到 \(10\) ,则要将这个 \(0\) 交换到前面的位置。由于是字典序最小,\(0\) 应该尽量在 阅读全文
摘要:
基本概念 这是一个杨辉三角。 记 \(a_{i,j}\) 为第 \(i\) 行第 \(j\) 列的数。 \(a_{i,j} = a_{i-1,j-1} + a_{i-1,j}\) 示例代码 #include <bits/stdc++.h> using namespace std; int n; in 阅读全文
摘要:
动态规划好题。 对于此题解,不懂的问题可以私信笔者。 前置知识 解题方法 用 \(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 阅读全文