随笔分类 -  常用技巧

python快速下载包
摘要:pip3 install pygame -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
180
0
0
回溯法
摘要:N皇后问题 递归: #include<iostream> #include<vector> #include<stack> #include<cmath> #include<cstring> using namespace std; typedef pair<int, int> P; int n,s
150
0
0
矩阵的幂
摘要:1. 通过逐项计算这个递推式,可以在O(n)的时间内算出答案。对于 n 的规模过大的话效率太低。通过求出通项也不行。斐波那契数列的通项为: 而用矩阵可以高效地求出第 n 项的值。 把斐波那契数列的递推式表示成矩阵就得到了下面的式子 记这个矩阵为 A,则有 因此只要求出 An 就可以求出 Fn 了。复
2106
0
0
坐标离散化
摘要:准备好 w * h 的数组,并记录是否有直线通过,然后利用深度优先搜索可以求出被分割出的区域的个数。但是这个问题中 w 和 h 最大为10000000,所以没办法创建 w * h 的数组。因此我们可以使用坐标离散化这一技巧。 如上图所示,将前后没有变化的行列消除后并不会影响区域的个数。 数组里只需要
395
0
0
折半枚举(双向搜索)
摘要:1. 从 4 个数列中选择的话总共有 n4 种情况,所以全都判断一遍不可行。不过将它们对半分成 AB 和 CD 再考虑,就可以快速解决了。从两个数列中选择的话只有 n2 种组合,所以可以进行枚举。先从 A、B中取出 a、b 后,为了使总和为 0 则需要从 C、D中取出 c + d = - a - b
381
0
0
弹性碰撞
摘要:首先考虑一下只有一个球的情况。这时只是单纯的物理问题。从高为 H 的位置下落的话需要花费的时间是,这样的话,在 T 时刻,令 k 为满足 kt ≤ T 的最大整数,那么 接下来考虑多个球的情况。乍一看,因为多个球之间会有碰撞,必须对物理运动进行模拟,事实上没有这个必要。回忆一下一个题目 “ Ants
630
0
0
集合的整数表示
摘要:在反转那篇文章中,为了尝试第一行的所有可能性,使用了集合的整数表现。在程序中表示集合的方法有很多种,当元素数比较少时,像这样用二进制码表示比较方便。集合{0, 1, ..., n-1} 的子集 S 可以用如下的方式编码成整数。 像这样表示之后,一些集合运算可以对应地写成如下方式。 (1) 空集Ø >
1195
0
0
反转(开关问题)
摘要:1. 对于一个特定的 K 如何求出让所有牛面朝前方的最小操作数。如果把牛的方向作为状态进行搜索的话,由于状态数有 2N 个,是无法在时限内得出答案的。 首先,交换区间反转的顺序对结果是没有影响的。此外,对同一区间进行两次以上的反转是多余的。由此,问题就转化成了求需要被反转区间的集合。先考虑一下最左端
560
0
0
尺取法
摘要:尺取法通常是指对数组保存一对下标(起点,终点),然后根据实际情况交替推进两个端点直到得出答案的方法。 1. 由于所有的元素都大于零,如果子序列 [s, t] 满足 as + .... at ≥ S,那么对于任何的 t < t' 一定有 as + .... at‘-1 ≥ S。 此外对于区间[ s,
376
0
0
二分搜索
摘要:二分搜索法是通过不断缩小可能存在的范围,从而求得问题最优解的方法。 1. 从有序数组中查找某个值 给定长度为 n 的单调非递减数列 a0......an,和一个数 k,求满足 ai ≥ k 条件的最小的 i,不存在的情况下输出n。 求满足某个条件C(x)的最小的 x 这一问题。对于任意满足C(x)
426
0
0
4. 位运算(快速幂)
摘要:1. typedef long long ll; ll mod_pow(ll x, ll n, ll mod){ ll res = 1; while(n > 0){ if(n & 1) res = res * x % mod; x = x * x % mod; n >>= 1; } return r
257
0
0
点击右上角即可分享
微信分享提示
深色
回顶
收起