摘要: 扩展欧几里得算法:对方程 ax + by = gcd(a, b) ,该算法可以找出这个方程的一对整数解 (x, y) ,这里的 x 和 y 不一定是正数,也可能是负数或零。算法代码如下: 上面的代码仅仅是可以求出方程的一组解,我们还得求出其他解,我们可以经过推导可以得出这个方程的通解为 (x+kn, 阅读全文
posted @ 2018-07-25 09:32 DyastySun 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 在比赛中我们会遇到形如 (A/B)%MOD 的式子(比如说组合数学中求组合数),但是由于取模对除法没有分配律,所以我们只能乖乖的先算 A/B 再对结果进行取模吗?当A、B较小的时候还行,当A、B很大的时候就不适用了,因为A/B会丢失精度。我们可以将上述式子改写一下 (A/B)%MOD 改为 (A * 阅读全文
posted @ 2018-07-24 20:47 DyastySun 阅读(411) 评论(0) 推荐(0) 编辑
摘要: 题目大意:有n头牛,两头牛之间可以进行比赛,给出m场比赛的结果,问,有几头牛的战力排名可以确定? 典型的flody求传递闭包问题,之前没仔细想,各种花式拓扑排序,没弄出来。后来才想起是flody 若一场比赛,牛a战胜了牛b,则我们建立一条从a到b的有向边。把每场比赛我们都这么统计一下,就能得到一张有 阅读全文
posted @ 2018-07-24 16:36 DyastySun 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 最小生成树有两种算法:Kruskal算法 和 Prim算法 算法一:Kruskal算法 基本思想就是:每次选择目前剩余的边中的权值最小的边,若将此边加入图中,不会形成环,则可以加入图中,否则舍弃。判断是否会形成环可以使用并查集算法。 以 HDU - 1879 题为例(题目链接:https://vju 阅读全文
posted @ 2018-07-24 16:07 DyastySun 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 算法一:Floyed算法 O(n^3) 这个算法复杂度有点高,所以我们推荐下一个算法。 算法二:Dijkstra算法 O(n^2) : 求某个结点到其它所有结点的最短路,但无法用于存在负权边的图 这个算法复杂度低一些,主要思想就是先设定起点 dis[i] = 0, mark[i] = 1; 然后对剩 阅读全文
posted @ 2018-07-23 21:20 DyastySun 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一个n位的整数,要求删除其中的d个数字,使得剩下的部分最大化。 有简单的做法,我们可以注意到,高位对一个数字的是有绝对的影响力的,所以我们需要保证高位足够大,我们可以这样贪心求解,我们对这n个数字从前往后考虑: 若后一个数字比前一个数字大,则前面这个数字肯定需要删除,并且删除之后我们还得和 阅读全文
posted @ 2018-07-22 09:02 DyastySun 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 一般的做法就是写一堆if,但是由于题目中的限制比较多,所以陷阱也很多,很容易漏掉一些情况 这里我们采用暴力的方法去实现 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int n, k, cnt; 5 string s0, s1, s2; 阅读全文
posted @ 2018-07-04 17:00 DyastySun 阅读(251) 评论(0) 推荐(0) 编辑