摘要:
本题的描述:城市联盟,最短距离。。 使人想到了prim求MST,再一看数据范围:完全图!,那么一定得用prim,因为只有5000个点,所以不加优化的prim就能过。 include include include include include include using namespace std 阅读全文
摘要:
对于没有重复元素的全排列来说,存在如下的对应关系 X=an (n 1)!+an 1 (n 2)!+...+ai (i 1)!+...+a2 1!+a1 0! ai为整数,并且0num[j]){ t++; } }k+=t fac[n i]; } return k; } void recontor(in 阅读全文
摘要:
本题的思想很好,正难则反 首先如果暴力枚举每个数的约数个数,一定会超时,那么我们就从约数的角度考虑,题目中问的是1~n的约数个数和,那么我们就枚举约数,看每个约数在1~n中出现过几次。 include include include include include include using nam 阅读全文
摘要:
高精度GCD include include include include include include using namespace std; void init(int num[]){ char s[10005]={0}; scanf("%s",s); num[0]=strlen(s); 阅读全文
摘要:
同余方程 形如 $ax \equiv b \pmod n$ 的式子称为线性同余方程。对于这样的式子有解的充要条件是 $gcd(a,n) \mid b$ . 于是扩展gcd求解 将原方程化为一次不定方程 $ax+ny = b$ . 利用扩展欧几里得算法求解不定方程 $ ax + ny = b$ 的整数 阅读全文
摘要:
模意义下的组合数计算 直接利用Pascal公式 ◦ n,k ≤ 1000 ◦ 对模数没有要求 定义直接算逆元 ◦ k较小 ◦ 模数为质数 预处理阶乘逆元 ◦ n,k≤ 10s ◦ 模数为质数 错位排列 表述为:编号是1、2、…、n的n封信,装入编号为1、2、…、n的n个信封,要求每封信和信封的编号不 阅读全文
摘要:
尺取法: 顾名思义,像尺子一样取一段,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案。之所以需要掌握这个技巧,是因为尺取法比直接暴力枚举区间效率高很多,尤其是数据量大的时候,所以尺取法是一种高效的枚举区间的方法,一般用于求取 有一定限制的区 阅读全文
摘要:
因为本题的数据范围很小,所以可以预处理一个二维数组,O(1)查询,但是这是一道区间上的题,并且gcd有区间可加性,所以想到了用线段树来维护,然而此题并不用修改,ST表有着比线段树更小的常数。 include include include include include include define 阅读全文
摘要:
这道题是一道背包问题,考虑一个背包, 显然如果我们直接设dp[i]表示前i个使差值最小所需的最少翻转次数,是具有后效性的。 所以我们将直接求最值,改为求某个值是否可行,这种求最值转变为求可行性的思想是非常实用的。 状态 dp[i][j]表示使用前i个物品修改得到差值j的最小步数。 第一步求出原来两个 阅读全文
摘要:
本题非常有趣。 (n^6) 枚举四个端点,每次遍历矩阵求解。 (n^4) 先处理前缀和,枚举四个端点,每次比较前缀和和正方形面积。 (n^3) 枚举左上方端点,在枚举边长,前缀和优化 (n^2logn) 枚举左上方端点,发现条件是单调的,于是二分边长 (n^2) DP做法,枚举右下端点,若该点是0, 阅读全文
摘要:
首先有序化垃圾被丢入的时间,然后用背包的解法, 一维数组f[high]=life 表示在垃圾堆high高度的时候,奶牛可以存活life的时间 对于每件物品,循环从d~0 如果这个高度的生命值不小于这个垃圾丢下来的时间 如果 高度+这个垃圾的高度不小于d,就输出这个垃圾丢下来的时间 不然 这个高度+这 阅读全文