ACM-常用函数
常用函数
luyehao1
ACMer
展开
-
最长上升子序列(模板)
转载请注明出处:http://blog.csdn.net/u012860063最长递增子序列(Longest Increasing Subsequence)下面我们简记为:LIS。假设存在一个序列d[1..9] = 2 1 5 3 6 4 8 9 7,我们可以很轻松的看出来它的LIS长度为5。但是如果一个序列太长后,就不能直接看出来了!下转载 2017-11-02 14:42:56 · 161 阅读 · 0 评论 -
树的重心
定义:对于一个 n 个节点的无根树,找到一个点,使得把树变成以该点为根的有根树时,最大子树的节点数最小。性质:以树的重心为根的有根树,最大子树大小不超过。( 即树的高度 <= log(n) )思路:先随意以一点为根,dfs处理每个节点的子树大小 siz[i] ,dfs回溯到 i 点时计算以 i 为根的情况下,最大子树大小为:maxsubtree = m...原创 2019-04-16 11:21:24 · 204 阅读 · 0 评论 -
质因数分解板子(可对long long大小的数进行分解)
板子(有随机性):#include <cstdio>#include <iostream>#include <cmath>#include <map>#include <algorithm>using namespace std;typedef long long ll;const int MAX = 1e5 + ...原创 2019-12-12 16:17:32 · 551 阅读 · 0 评论 -
质因数分解、约数个数、约数和
背景:暴力求 n 的约数个数、约数和的复杂度为 ,往往不能符合题目时限要求。但这个通过质因数分解来优化时间。质因数分解:性质:一个数 n ,最多只存在一个质因子。因此,我们只需要预处理出以内的质数(1e5以内质数大概4000+个)。遍历这些质数,若n%p==0,那么n/p,直到n%p!=0。最后如果 n 还大于 1 ,那么这个剩下的 n 一定也是质数。设,...原创 2019-04-09 11:27:59 · 1875 阅读 · 0 评论 -
C++大数板子
#include <bits/stdc++.h>using namespace std;// base and base_digits must be consistentconstexpr int base = 1000000000;constexpr int base_digits = 9;struct bigint{ // value == 0 is rep...转载 2018-09-15 18:47:45 · 290 阅读 · 0 评论 -
判断两个整数是否互质
判断两个整数互质的方法 概念:公约数只有1的两个数叫做互质数。根据互质数的概念可以对一组数是否互质进行判断。如:9和11的公约数只有1,则它们是互质数。求商判断法:用大数除以小数,如果除得的余数与其中较小数互质,则原来两个数是互质数。如:317和52,317÷52=6……5,因余数5与52互质,则317和52是互质数。#include<iostream>using nam...转载 2018-07-15 15:59:13 · 17143 阅读 · 0 评论 -
归并排序求数组逆序对个数
#include <iostream>#include <string.h>#include <stdio.h> using namespace std;const int N = 1005; int a[N],tmp[N];int ans; void Merge(int l,int m,int r){ int i = l; ...转载 2018-07-26 11:35:05 · 172 阅读 · 0 评论 -
求逆元
方法一:ll extendGcd(ll a, ll b, ll &x, ll &y) { ll ans, t; if (b == 0) { x = 1; y = 0; return a; } ans = extendGcd(b, a%b, x, y); t = x; x = y; y = t - (a / b)*y; return ans;}ll i...原创 2018-04-18 22:46:45 · 165 阅读 · 0 评论 -
STL中二分查找函数
1. binary_search(b.begin(),b.end(),n)//返回得是bool值,也适用于数组,用于判断有没有找到。#include <iostream>#include <cstdio>#include <vector>#include <algorithm>using namespace std;int main()...原创 2018-03-25 21:28:25 · 379 阅读 · 0 评论 -
素数O(n)打表
#include<iostream> #include<string.h> #include<stdio.h> #include<stdlib.h> #define maxn 10000000 bool visit[maxn+1000000]; int prime[maxn],n; ///pri...转载 2018-03-19 16:30:05 · 362 阅读 · 0 评论 -
牛顿迭代法实现开根号
理解:如何通俗易懂地讲解牛顿迭代法求开方?实现:牛顿法实现开根号根据牛顿迭代的原理,可以得到以下的迭代公式:X(n+1)=[X(n)+p/Xn]/2一般性的编程方法如下:double sqr(double n) { double k=1.0; while(abs(k*k-n)>1e-9) { //精度自己控制 k=(k+n/k)/2; } ...转载 2018-03-11 20:46:18 · 9499 阅读 · 0 评论 -
组合数板子
1. 预处理:#include<cstdio>const int N = 2000 + 5;const int MOD = (int)1e9 + 7;int comb[N][N];//comb[n][m]就是C(n,m)void init(){ for(int i = 0; i < N; i ++){ comb[i][0] = comb[i][i]...原创 2018-03-09 20:20:57 · 759 阅读 · 0 评论 -
最大公约数、最小公倍数(辗转相除)
最大公约数、最小公倍数(辗转相除)原创 2017-11-14 15:17:34 · 1122 阅读 · 0 评论