- 博客(7)
- 收藏
- 关注
原创 取模问题
由费马小定理可推出:(1/a)%m = a^(m-2)%m其中m为素数 && a 整除 b那么,(a/b)%m 就可以变成 a * b^(m-2)%m如果m太大,可以使用快速幂(1) % 运算符% 只用于整型的计算,后一个数不能是0,参与运算的数据可正可负。对于x%y ,计算之后结果的正负与 x 的符号相同,如果前者是较小的数,后者是较大的数,那么,结果直接为...
2019-10-09 10:36:47
552
原创 求树的直径或两端点
树的直径概念:一颗树上存在的最长路径。一:两次bfs求树的直径先从任意一点P出发,找离它最远的点Q,再从点Q出发,找离它最远的点W,W到Q的距离就是是的直径int bfs(int s){ memset(dis, 0x3f, sizeof dis); queue<int> q; q.push(s); dis[s] = path[s] = 0...
2019-10-05 23:25:37
432
原创 求排列组合
在LINUX环境下可以用__int128ll arr(int n, int m)//排列{ ll res = 1; for (int i = 0; i < m; i++) { res = res * (n - i); } return res;}ll com(int n, int m)//组合{ ll res = 1; m = min(m, n - m); ...
2019-10-05 22:42:34
176
原创 最短路总结
最短路问题不仅指最短路,还包括最长路一,求多源最短路(即任意两点间的最短路) 弗洛伊德算法: 时间复杂度为O(n^3)void floyd(){ for (int k = 1; k <= n; k++) for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) d[i][j] = min(d[...
2019-10-03 22:58:50
142
原创 利用kmp求字符串的最小循环节
根据next数组,字符串的最小循环节为L = len - next[len]若len % L == 0 ,则说明字符串由若干个完整的循环节构成,周期为T = len / L否则,字符串由若干个完整的循环节和一个不完整的循环节构成,不完整的循环节长度为len % L,构成完整的循环节需要加 L - len % L 个字符#pragma comment(linker,"/STACK:1024...
2019-09-28 23:36:03
1017
原创 求一个数的因子数和因子和
//记录因子数int count(int n){ int ans = 1; for (int i = 2; i * i <= n; i++) { if (n % i == 0) { int s = 0; while (n % i == 0) { n /= i; s++; } ans *= (s + 1); } } if...
2019-09-28 22:49:15
318
原创 数组排序后相邻数的最大差值
题目:输入N个数,求这N个数排序后,相邻数的最大差值。时间复杂度为O(n). 我们可以用桶排序的思想, 把N个数分到 N + 1个桶中,然后我们用桶存连续长度的一个范围的数,每个桶负责的范围是(maxn - minn)/ N(maxn是序列中最大的数,minn是序列中最小的数), 如果一个数为num,那么这个数应存进(num - minn) * N ...
2019-09-27 13:55:04
719
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人