acm
Tosim_02
当勤精进,慎勿放逸
展开
-
乘法爆int的解决方法
在某些算法中,a*b mod m ,a*b可能就会爆int参考快速幂的算法,把a*b看作b个a相加LL multi(LL a,LL b,LL m) { LL ans = 0; a %= m; while(b) { if(b & 1) ans = (ans + a) % m; b原创 2017-09-27 06:57:20 · 1368 阅读 · 0 评论 -
处理 a/b (mod m) 且 b | a 的求解
结论:证明:原创 2017-09-27 07:05:05 · 881 阅读 · 0 评论 -
逆元详解
数论逆元是指 a*x = 1 (mod m) x为最小的整数第一种,费马小定理,要求m为素数用快速幂求pow(a,m-2) (mod m)int power(int a,int b){ int ans = 1; a %= m; while(b){ if(b&1) ans = ans * a % m; b >>= 1;原创 2017-09-27 08:45:43 · 697 阅读 · 0 评论 -
欧拉函数
介绍求(1,m)区间内与m互质的数的个数公式其中p1, p2……pn为x的所有质因数,x是不为0的整数。 φ(1)=1(唯一和1互质的数(小于等于1)就是1本身)。 注意:每种质因数只一个。 比如12=2*2*3那么φ(12)=12*(1-1/2)*(1-1/3)=4变式一:若n是质数p的k次幂, ,因为除了p的倍数外,其他数都跟n互质。变式二:欧拉函数是积性函数——若m,n互质, 特殊性质:原创 2017-09-27 16:57:20 · 302 阅读 · 0 评论 -
POJ-3295-递归计算表达式
/* poj-3295-递归模拟 每执行完一个操作,更新下一个可计算的位置n,初始为0 遇到变量,n就等于当前坐标+1,返回变量真假*/#include<stdio.h>#include<string.h>char wff[105];int len;bool p,q,r,s,t;int n;bool judge(char op,bool w,bool x){原创 2017-11-07 20:23:43 · 461 阅读 · 0 评论 -
蓝桥杯-九宫重排-bfs+康托展开+逆序数判断
/* 蓝桥杯-九宫重排 坑点:用map或set记录状态是否被访问过要logn复杂度 需要将一个状态按照康托展开,变成一个数字,再用数组记录是否被访问 再优化:对于一个九宫格,去掉空格那格,若两状态的逆序数奇偶性不同,则无法互相到达 证明:通过12345678.状态上下左右移动空格,计算逆序数的增减情况,可以知道上下左右移动 操作的逆序数改变都是偶数,所以原创 2017-11-10 13:32:57 · 1141 阅读 · 0 评论 -
判断欧拉路径和欧拉回路
判断欧拉路径和欧拉回路无向图连通欧拉路径:度数为奇数的点有0个或2个欧拉回路:度数为奇数的点有0个有向图连通欧拉路径:有两个点入度不等于出度,其他点入度等于出度,且一个点入度-出度=1,另一个点出度-入度=1,出度大的为起点;或者所有点入度等于出度欧拉回路:所有点入度等于出度判断连通并查集 dfs原创 2017-09-26 19:22:01 · 2991 阅读 · 0 评论 -
hdu-2485-bfs+dfs
#include<stdio.h>#include<string.h>#include<queue>#include<vector>using namespace std;const int INF = 0x3f3f3f3f;struct Node{ int id; int step; Node(){} Node(int a,int b):id(a),ste原创 2017-11-06 13:02:52 · 268 阅读 · 0 评论