
算法-一
CoderFly
如果现在不努力,那跟咸鱼有什么区别。
展开
-
contor expansion
康托展开:公式:X=a[n](n-1)!+a[n-1](n-2)!+…+a[i]*(i-1)!+…+a[1]*0! 其中a[i]为当前未出现的元素中是排在第几个(从0开始)。 用于将一组排列映射为一个值。 例如一个字符串 s=”dbac”。 a[4]=3.d>b,d>a,d>c. 从0开始它排第三。 同理 a[3]=1,a[2]=0,a[1]=0。 X(s)=3*3!+1*2!+0*1!原创 2016-03-09 21:47:00 · 409 阅读 · 0 评论 -
LIS O(nlogn)
题目:51nod 1134 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1134 2 <= N <= 50000 N^2肯定要超时的。 动态规划思想,dp[i]表示长度为i的LIS的最小结尾。 如一组数:5 1 6 8 2 4 5 10 初始dp[1]=5,因为1<5, 更新dp[1]=1。6>1,更新dp[2原创 2016-03-11 12:17:40 · 788 阅读 · 0 评论 -
拓展欧几里得/乘法逆元
d=gcd(a,b)=ax+by 先看代码void extend_gcd(int a,int b,int& d,int& x,int& y){ if(!b) { d=a; x=1; y=0; } else { extend_gcd(b,a%b,d,y,x); y-=x*(a/b)原创 2016-04-20 20:30:33 · 493 阅读 · 0 评论 -
O(nlog(n)) LCS 白书 P66例题27 UVa10635
ab两个字符串,将a字符串重新编号为 则b字符串可根据a字符串编号 例如: a={1,7,5,4,8,3,9} b={1,4,3,5,6,2,8,9} a编号为{1,2,3,4,5,6,7} b重新编号为{1,4,6,3,0,0,5,7} (第二个编号为4是因为原来b中的4在a中位置为4) 0表示在a中没有出现过 然后用nlogn复杂度的LIS解决#include <iostre原创 2016-09-19 18:57:02 · 624 阅读 · 0 评论 -
组合数取模(待补充)
const ll M=1e5+3;ll fac[100005]; //阶乘ll inv_of_fac[100005]; //阶乘的逆元ll qpow(ll x,ll n){ ll ret=1; for(; n; n>>=1) { if(n&1) ret=ret*x%mod; x=x*x%mod;原创 2016-12-18 12:35:46 · 400 阅读 · 0 评论 -
O(N)求1~N逆元
ll inv[N];void init(){ inv[1] = inv[0] = 1; for(int i = 2;i < N;i++) inv[i] = inv[mod%i]*(mod-mod/i)%mod;}原创 2017-03-01 15:46:14 · 416 阅读 · 0 评论 -
求组合数
const int maxn=2e5+10;ll fac[maxn],inv[maxn];void init(){ fac[0]=1; for(int i = 1; i <= maxn-10; ++i) fac[i]=fac[i-1]*i%mod; inv[maxn-10]=powmod(fac[maxn-10],mod-2); for(int i = maxn原创 2017-03-03 09:48:35 · 521 阅读 · 0 评论 -
读入挂
static inline int Rint() { struct X{ int dig[256]; X() { rep(i,'0','9'){ dig[i]=1;dig['-']=1; } } }; static X fuck; int s原创 2017-03-29 09:14:05 · 606 阅读 · 0 评论