07 2020 档案

摘要:第一次dfs为后序遍历 第二次dfs将所有边反向,从编号最大的顶点开始(也就是原图缩点后形成的DAG根节点所在的强连通分量),由于边反向后,不能由这个强连通分量访问到其他强连通分量的顶点,而强连通分量内部之间的顶点不受影响,所以每一次dfs所遍历到的所有顶点形成一个强连通分量 通过这种算法得到的强连 阅读全文
posted @ 2020-07-31 16:37 fxq1304 阅读(87) 评论(0) 推荐(0)
摘要:SG函数 $mex$运算:$mex$运算是一个施加于集合的运算,表示最小的不属于这个集合的非负整数。例如$mex{0,1,3}=2,mex{1}=0,mex{}=0$ $SG$函数:对于任意状态$x$,$SG(x)=mex({SG(y)|$$y$是$x$的后继状态$})$ 当$SG(x)==0$时$ 阅读全文
posted @ 2020-07-30 17:03 fxq1304 阅读(218) 评论(0) 推荐(0)
摘要:###巴什博弈 有$n$个石子,两个人轮流取石子,每次只能取$[1,m]$个,没有石子可取的一方失败,判断胜败 判断方法 \(r=n%(m+1)\),$r$不为零,先手胜,$r$为零,后手胜 ###威佐夫博弈 有两堆石子,每个人轮流从任意一堆中取出至少一个或者同时从两堆中取出同样多个石子,没有石子可 阅读全文
posted @ 2020-07-30 16:14 fxq1304 阅读(240) 评论(0) 推荐(0)
摘要:具有胜败游戏的基础 通过分析各个状态的胜败条件,判断必胜态和必败态,是具有胜败游戏的基础。 首先判断最终状态的胜败(比如两人轮流取硬币,没有硬币可取的一方失败,则硬币数$x==0$为必败态) 如果某个状态的后继状态中存在必败态,则这个状态为必胜态 如果某个状态的后继状态全部为必胜态,则这个状态为必败 阅读全文
posted @ 2020-07-29 16:45 fxq1304 阅读(464) 评论(0) 推荐(0)
摘要:###$burnside$引理 \(N(G,C)=\frac{1}{|G|}\sum_{f\in G}|C(f)|\) 对于一个置换$f$,如果一个染色方案$s$经过置换$f$之后不变,则称$s$为$f$的不动点 如果置换$f$的不动点数目为$C(f)$,则等价类的数目为所有$C(f)$的平均值 # 阅读全文
posted @ 2020-07-29 01:19 fxq1304 阅读(102) 评论(0) 推荐(0)
摘要:min-max容斥 min-max容斥是指给定集合$S$,设$max(S)$表示$S$中的最大值,$min(S)$表示集合中的最小值,则有 \(max(S)=\sum_{T\subseteq S}(-1)^{|T|-1}min(T)\) 相关题目 hdu4336 Card Collector 有$n 阅读全文
posted @ 2020-07-29 00:40 fxq1304 阅读(102) 评论(0) 推荐(0)
摘要:倍增lca 预处理每个节点的深度,从节点$u$向上跳$2^k(0\leq k\leq \log n)$步所能到达的节点编号 预处理时间复杂度$O(n\log n)$ 查询时间复杂度$O(\log n)$ const int maxn=40010; int depth[maxn],fa[maxn][2 阅读全文
posted @ 2020-07-28 00:32 fxq1304 阅读(40) 评论(0) 推荐(0)
摘要:莫比乌斯反演公式 莫比乌斯反演是一种通过公式简化运算的方法 如果需要求解的是$f(n)$,可以找到另一个符合条件的函数$F(n)$,通过反演公式计算出$f(n)$ 莫比乌斯反演公式: \(F(n)=\sum_{d|n}f(d)\Rightarrow f(n)=\sum_{d|n}\mu (d)F(\ 阅读全文
posted @ 2020-07-27 00:24 fxq1304 阅读(70) 评论(0) 推荐(0)
摘要:容斥原理 设有$n$个集合$A_i(1\leq i\leq n)$ \(|\cup A_i|=\sum_{1\leq i\leq n}|A_i|-\sum_{1\leq i<j\leq n}|A_i\cap A_j|+\sum_{1\leq i<j<k\leq n}|A_i\cap A_j\cap 阅读全文
posted @ 2020-07-26 19:51 fxq1304 阅读(97) 评论(0) 推荐(0)
摘要:###1. \(n!=a*p^k\) 将$n!$表示成$a*p^k(a\nmid p)$的形式,其中$p$为已知的素数,求参数$a$和$k$的值 由于在$n!$中能够被$p$整除的数的个数为 \(n/p+n/p^2+n/p^3+\cdots+n/p^{\log _pn}\) 所以可以在$O(\log 阅读全文
posted @ 2020-07-25 23:07 fxq1304 阅读(202) 评论(0) 推荐(0)
摘要:线性同余方程 线性同余方程是形如$ax\equiv b(mod\ m)$的方程。 求解方法: 如果$gcd(a,m)==1$,则$a^{-1}$存在,此时可以直接通过逆元求解,\(x=a^{-1}*b\) 但是如果$gcd(a,m)\neq 1$,也就是逆元不存在,方程依然可能有解,设$d=gcd( 阅读全文
posted @ 2020-07-24 14:31 fxq1304 阅读(360) 评论(0) 推荐(0)
摘要:排列 \(A_{n}^{r}=\frac{n!}{(n-r)!}\) 当$r>n$时,\(A_{n}^{r}=0\) 圆排列:\(A_{n}^{r}=\frac{n!}{r(n+1)!}\) 组合 \(C_{n}^{r}=\frac{n!}{r!(n-r)!}\) 当$r>n$时,\(C_{n}^{ 阅读全文
posted @ 2020-07-23 17:26 fxq1304 阅读(110) 评论(0) 推荐(0)
摘要:01分数规划 01分数规划就是给出$n$个二元组$(v_1,w_1),(v_2,w_2),\cdots,(v_n,w_n)$,选出具有$k$个元素的集合$S$,使得$\frac{\sum_{i\in S}v_i}{\sum_{i\in S}w_i}$最大(或者最小)。 求解的基本方法是二分答案。 判 阅读全文
posted @ 2020-07-22 17:14 fxq1304 阅读(123) 评论(0) 推荐(0)
摘要:hdu3976 Electric resistance 传送门 题意 给出$n(n<=50)$个节点,$m(m<=2000)$个电阻,两个节点之间最多有一个电阻,计算整个电路的等效电阻。 题解 以每个节点的电压为未知数,根据基尔霍夫电流定律(每个节点的流入电流等于流出电流),为每个节点建立方程。 设 阅读全文
posted @ 2020-07-21 18:06 fxq1304 阅读(121) 评论(0) 推荐(0)
摘要:hdu1430 魔板 传送门 一个含有数字[1,8],两行四列,具有八个方块的魔板可以进行三种变换: A.交换上下两行 B.循环右移一列 C.中间4个方块顺时针旋转 计算从初始状态到目标状态变换次数最小的方法中,字典序最小的那种。 康托展开+bfs预处理 将初始状态全部映射为"01234567",目 阅读全文
posted @ 2020-07-20 17:16 fxq1304 阅读(118) 评论(0) 推荐(0)
摘要:康托展开和逆康托展开是一个全排列到一个自然数的双射。$n$个数有$n!$种全排列,康托展开表示的是当前的排列在所有全排列中,按照字典序排位的顺序。 康托展开可以用来构建哈希表,压缩空间。 计算方法: \(cantor[x]=a[n]*(n-1)!+a[n-1]*(n-2)!+a[n-2]*(n-3) 阅读全文
posted @ 2020-07-20 16:09 fxq1304 阅读(113) 评论(0) 推荐(0)
摘要:高斯消元可以用来求解未知数个数与方程个数相等的线性方程组 无解或者有无穷多解时返回0,有唯一解时返回1 时间复杂度$O(n^3)$ const int maxn=60; double a[maxn][maxn],ans[maxn]; int gauss(int n,int m){ for(int r 阅读全文
posted @ 2020-07-19 21:34 fxq1304 阅读(54) 评论(0) 推荐(0)
摘要:hdu1043 Eight ###题意 给定一个$3*3$的棋盘,含有数字$[1,8]$以及一个字母$x$表示空格,每一步可以将空格和上下左右四个相邻位置的数字交换,判断是否可以将棋盘变成图中所示的目标棋盘,如果可以,给出一种移动空格的方案。 1 2 3 4 5 6 7 8 x ###题解 如果初始 阅读全文
posted @ 2020-07-16 16:08 fxq1304 阅读(9) 评论(0) 推荐(0)
摘要:###中国剩余定理 问题 求解同余方程组 $$\left{\begin x\equiv a_1(mod\ m_1)\ x\equiv a_2(mod\ m_2)\ x\equiv a_3(mod\ m_3)\ \cdots\ x\equiv a_n(mod\ m_n)\ \end\right.$$ 阅读全文
posted @ 2020-07-15 20:29 fxq1304 阅读(92) 评论(0) 推荐(0)
摘要:hdu2089 不要62 传送门 ###题意 计算区间$[n,m](0<n\leq m<1e6)$中不包含62和4的数的个数 ###题解 数位$dp$ 预处理$n,m$的数位,从高位到低位进行数位$dp$。 $dp[i][0]$表示直到第$i$位,$62$和$4$都没有出现,既不含$62$也不含$4 阅读全文
posted @ 2020-07-14 18:34 fxq1304 阅读(27) 评论(0) 推荐(0)
摘要:hdu4335 What is N? 传送门 题意 给定$b(0\leq b<p),p(1\leq p\leq 1e5),m(1\leq m\leq 2^{64}-1)$,计算有多少$n$满足: $$\begin n^{n!}\equiv b(mod\ p)\ 0\leq n\leq m \end$ 阅读全文
posted @ 2020-07-13 22:03 fxq1304 阅读(32) 评论(0) 推荐(0)
摘要:圆形 struct circle{ //圆心 Point p; //半径 double r; circle(){} circle(Point _p,double _r){ p = _p; r = _r; } circle(double x,double y,double _r){ p = Point 阅读全文
posted @ 2020-07-11 00:33 fxq1304 阅读(28) 评论(0) 推荐(0)
摘要:多边形 struct polygon{ int n; Point p[maxp]; Line l[maxp]; void input(int _n){ n=_n; for(int i=0;i< n;i++) p[i].input(); } void add(Point q){ p[n++]=q; } 阅读全文
posted @ 2020-07-11 00:32 fxq1304 阅读(20) 评论(0) 推荐(0)
摘要:直线与线段 struct Line{ Point s,e; Line(){} Line(Point _s,Point _e){ s = _s; e = _e; } bool operator == (Line v){ return (s==v.s) && (e==v.e); } //根据一个点和倾斜 阅读全文
posted @ 2020-07-11 00:25 fxq1304 阅读(20) 评论(0) 推荐(0)
摘要:如果存在正整数$x$,使得对于给定的$a$和$m$,$ax\equiv 1(mod\quad m)$成立,则称$x$是$a$在模$m$意义下的逆元,记作$a^{-1}$。 逆元可以用来求解线性同余方程$ay\equiv b(mod\quad m)$,假设$a$在模$m$意义下的逆元存在,那么方程两边 阅读全文
posted @ 2020-07-10 23:40 fxq1304 阅读(86) 评论(0) 推荐(0)
摘要:欧拉函数 对于正整数$n$,欧拉函数是小于或等于$n$的正整数中与$n$互质的数的数目。 \(\varphi(1)=1\),除了1之外,所有正整数与它本身都不互质 对于质数$p$,\(\varphi(p)=p-1\) \(\sum_{d|n}\varphi(d)=n\),其中$d$是$n$的因数 欧 阅读全文
posted @ 2020-07-10 18:46 fxq1304 阅读(94) 评论(0) 推荐(0)
摘要:费马小定理 如果$p$是质数,则对于任意整数$a$都有$a^p\equiv a(mod\ p)$。这个定理称作费马小定理。 其中,$gcd(a,p)=1$的情况更常见: 若$p$为质数,并且$gcd(a,p)=1$,那么就有: \(a^{p-1}\equiv 1(mod\ p)\) 证明: 设集合$ 阅读全文
posted @ 2020-07-10 18:07 fxq1304 阅读(96) 评论(0) 推荐(0)
摘要:欧几里得算法 已知a和b,求出$gcd(a,b)$ 时间复杂度$O(\log n)$ \(gcd(a,b)*lcm(a,b)=a*b\) int gcd(int a,int b){ return b==0?a:gcd(b,a%b); } //优化 int gcd(int a,int b){ if(a 阅读全文
posted @ 2020-07-10 00:58 fxq1304 阅读(89) 评论(0) 推荐(1)
摘要:旋转卡壳就是使用一对平行线卡着凸包进行旋转,正好被卡住的一对点称为对踵点对。 逆时针枚举边的时候,对踵点对的变化也是逆时针的,所以当前边所对应的最远点可以紧接着上一次的继续计算。 旋转卡壳可以计算凸包的直径,时间复杂度为$O(n)$。 double rotatingCalipers(P* qs,in 阅读全文
posted @ 2020-07-08 19:12 fxq1304 阅读(37) 评论(0) 推荐(0)
摘要:凸包是指包围原点集的最小凸多边形的顶点组成的集合。 求凸包的时间复杂度为$O(n\log n)$ Graham scan算法 模板一:极角排序法 const int maxn=50010; P ps[maxn],qs[maxn]; //ps为原点集,qs为凸包中的点集 int square_dis( 阅读全文
posted @ 2020-07-06 23:24 fxq1304 阅读(61) 评论(0) 推荐(0)
摘要:计算几何基础 const double eps=1e-6; const double inf=1e20; const double pi=acos(-1.0); //符号函数 int sgn(double x){ if(fabs(x)<eps) return 0; if(x>0) return 1; 阅读全文
posted @ 2020-07-05 23:12 fxq1304 阅读(80) 评论(0) 推荐(0)
摘要:预处理 时间复杂度$O(n\log n)$ 区间最值查询 时间复杂度$O(1)$ int a[1010],st[1010][15],mini[1010]; void rmq_init(int n){ for(int i=1;i<=n;i++) st[i][0]=a[i]; for(int j=1;( 阅读全文
posted @ 2020-07-04 21:14 fxq1304 阅读(26) 评论(0) 推荐(0)
摘要:AC自动机应用于多模式串匹配,时间复杂度$O(n)$,其中$n$为文本串长度 AC自动机是在Trie上实现kmp,如果当前节点匹配失败,则从当前节点的fail指针指向的节点开始继续匹配 fail数组的构建可以通过bfs实现 const int maxn=1000010,maxm=10010,maxn 阅读全文
posted @ 2020-07-03 21:28 fxq1304 阅读(31) 评论(0) 推荐(0)
摘要:计算出字符串中以每个字符为对称中心的最长回文串的长度加$1$的值。 时间复杂度为$O(n)$。 #include<bits/stdc++.h> #define LL long long #define PII pair<int,int> #define PLI pair<LL,int> #defin 阅读全文
posted @ 2020-07-02 23:30 fxq1304 阅读(18) 评论(0) 推荐(0)
摘要:结论 通过NEXT数组,可以得到字符串的最小循环节。 设字符串s的结尾下标为i,NEXT[i]=j,如果$\left{\beginj\ne0\i%(i-j)==0\end\right.$成立,那么s[j+1,i]就是字符串的最小循环节。 简要说明 ———————— 1 x j ———————— y 阅读全文
posted @ 2020-07-01 23:43 fxq1304 阅读(230) 评论(0) 推荐(0)