随笔分类 - 算法
摘要:基数排序 基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。 具体做法是:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有
阅读全文
摘要:n皇后问题描述 在一个n×n的国际象棋棋盘上放置n个皇后,使得她们中任意两个之间都不会互相“攻击”,即任意两个皇后不可以放在同一行、同一列、同一斜线上。 输入:n 输出:有多少种满足条件的放置方法。 回溯法 解空间 利用约束条件,一维数组即可。 x[i] 表示第i行的皇后的列数为x[i]。 约束条件
阅读全文
摘要:时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K Special Judge, 64bit IO Format: %lld 题目描述 Eddy likes to play cards game since there are always lot
阅读全文
摘要:Problem Description people in USSS love math very much, and there is a famous math problem . give you two integers n,a,you are required to find 2 inte
阅读全文
摘要:欧拉通路的判定 有向图:图连通,有一个顶点出度大入度1,有一个顶点入度大出度1,其余都是入度等于出度。 无向图:图连通,有两个奇数度顶点,其余都为偶数度顶点。 欧拉回路的判定 有向图:图连通,所有顶点入度等于出度。 无向图:图连通,所有顶点都是偶数度。 struct Edge { int v,nex
阅读全文
摘要:RMQ RMQ算法,是一个快速求区间最值的离线算法,预处理时间复杂度O(n*log(n)),查询O(1)。 概念:RMQ(Range...
阅读全文
摘要:版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...
阅读全文
摘要:LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现 首先是最近公共祖先的概念(什么是最近公共祖先?): 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点。 换句话说,就是两个点在这棵树上距离最近的公共祖先节点。
阅读全文
摘要:转 趣写算法系列之--匈牙利算法 2013年07月18日 13:39:59 Dark_Scope 阅读数 100344 版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/Dark_Scope
阅读全文
摘要:原 乘法逆元详解【费马小定理+扩展欧几里得算法】 2018年...
阅读全文
摘要:三种情况: 1.有限小数:小数点后面的数除以10n (n为小数位数)。 2.纯循环小数(类似0.44444…):循环节除以(10n-...
阅读全文
摘要:ϕ(x):1到x中与x互质的数的个数. 欧拉函数公式: ϕ(x)=x(1-1/a1)(1-1/a2)…(1-1/an). ...
阅读全文
摘要:定义:费马小定理(Fermat Theory)是数论中的一个重要定理,其内容为: 假如p是质数,且Gcd(a,p)=1,那么 a(p...
阅读全文
摘要:二分 概念:二分,是二分查找的简称,又叫折半查找,是一种用于快速查找的工具,也可以说是一种技巧与思想。 前提:数组必须是顺序结构。 ...
阅读全文
摘要:sort函数的调用需要头文件#include 从小到大排: 例如:a[50]={2,3,5,1,-1},想让它按照从小到大的顺序排列...
阅读全文
摘要:#GCD 原理:类似辗转求余 两种方法: 1.循环 int main(){ int a,b; scanf("%d%d",...
阅读全文
摘要:#快速幂 作用:快速求幂,这个快体现在哪些方面呢?举个例子,2^5 朴素算法就是将2连乘5次,需要计算5次,而用快速幂的话,就是将5拆成二进制,5=(101)2,那么就相当于是 2的1乘2的平方乘2的0乘2的一次方乘2的1乘2的0次方,计算了三次,所以快速幂更快。 int fust_pow(int
阅读全文
摘要:#快速乘 原理:由于计算机底层设计的原因,做加法往往比乘法快的多,因此将乘法转换为加法计算将会大大提高(大数,比较小的数也没必要)乘法运算的速度,除此之外,当我们计算a*b%mod的时候,往往较大的数计算a*b会超出long long int的范围,这个时候使用快速乘法方法也能解决上述问题. 快速乘
阅读全文
摘要:#前缀和 公式:ans[i]=ans[i-1]+a[i] 例题: 描述:已知两个正整数a和b,求在a和b之间(包含a和b)的所有整数的十进制表示中1出现的次数。 输入:多组数据(不超过100000组),每组数据2个整数a,b(1<=a,b<=1000000). 输出:每组答案占一行。 题目理解:如果
阅读全文
摘要:#傻瓜方法 思路:按照素数的定义,除了1和它本身没有其他的因数,就是素数。 #include<stdio.h> int main() { int i,n; while(scanf("%d",&n)!=EOF) { for(i=2;i<n;i++) if(n%i==n) break; if(i==n)
阅读全文