随笔分类 -  ACM/算法笔记

摘要:STL头文件:#include<queue> 优先队列: 默认从大到小排列:priority_queue<node>q; 自带的比较函数 priority_queue<int, vector<int>, less<int> > q;//等价于默认,从大到小排 //greater<int> 从小到大排 阅读全文
posted @ 2016-07-21 13:28 水郁 阅读(13352) 评论(4) 推荐(2) 编辑
摘要:这句语句是用来取消cin的同步,什么叫同步呢?就是iostream的缓冲跟stdio的同步。如果你已经在头文件上用了using namespace std;那么就可以去掉前面的std::了。取消后就cin就不能和scanf,sscanf, getchar, fgets之类同时用了,否则就可能会导致输 阅读全文
posted @ 2016-05-30 17:12 水郁 阅读(3121) 评论(0) 推荐(1) 编辑
摘要:题意 链接给你一个n*m的地图,'#'代表墙,‘.’代表可走的,1代表1号机器人,2代表2号机器人,机器人可以上下左右移动到非墙的位置,但不能走到另一个机器人身上。问能否交换1和2的位置。 分析 如果1和2之间有路径且路径上某个点的度大于2,那就是YES,如果1和2的路径构成一个回路也是YES。其他 阅读全文
posted @ 2016-05-16 22:23 水郁 阅读(390) 评论(3) 推荐(0) 编辑
摘要:定义 欧拉函数ϕ(n)是不超过n且和n互质的正整数的个数。 下面直观地看看欧拉函数: n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 φ(n) 1 1 2 2 4 2 6 4 6 4 10 4 12 6 8 定理 定理0 算术函数f如果满足对于任意两个互质的正整数m和n, 阅读全文
posted @ 2016-03-27 00:04 水郁 阅读(4638) 评论(6) 推荐(4) 编辑
摘要:火车上看的一篇文章。写得真是简单易懂。 (选自《数论妙趣——数学女王的盛情款待》第六章 开门咒) 费马小定理有多种证法,以同余证法最为简短而精致。 任意取一个质数,比如13。考虑从1到12的一系列整数1,2,3,4,5,6,7,8,9,10,11,12,给这些数都乘上一个与13互质的数,比如3,得到 阅读全文
posted @ 2016-02-28 18:01 水郁 阅读(8861) 评论(0) 推荐(4) 编辑
摘要:题 题意 求1到n长度的n根棍子(3≤n≤1000000)能组成多少不同三角形。 分析 我看大家的递推公式都是 a[i]=a[i-1]+ ((i-1)*(i-2)/2-(i-1)/2)/2; 以i 为最大边,第二边为i-1、i-2、...2 的三角形分别有 i-2个、i-3、... 、1个,总共就有 阅读全文
posted @ 2016-02-18 01:41 水郁 阅读(925) 评论(0) 推荐(0) 编辑
摘要:题 题意 求a关于m的乘法逆元 分析 a x ≡ 1 (mod m) 等价于 ax+my=1 求x的最小正数(不能是0,我就WA在这里了)。 gcd(a,m)!=1 时x不存在。 所以用扩展gcd就可以求了。 代码 阅读全文
posted @ 2016-02-16 20:22 水郁 阅读(224) 评论(0) 推荐(0) 编辑
摘要:满足 a * k ≡ 1 (mod p) 的k 叫做 a关于p的乘法逆元。另一种表达方法是 k ≡ a-1 (mod p) 逆元在密码学中有广泛应用,AES密码体系的字节替代就是运用了逆元。(不知道说的smg) 应用: 我们知道(a+b)%p=(a%p+b%p)%p (a*b)%p=(a%p)*(b 阅读全文
posted @ 2016-02-16 19:39 水郁 阅读(1748) 评论(0) 推荐(1) 编辑
摘要:重要的事实: 当代计算机1s内可做10^7左右次计算 配置好的机器可到k*10^7~10^8 当代计算机1s内可做10^7左右次计算 配置好的机器可到k*10^7~10^8 复杂度 阅读全文
posted @ 2016-02-14 01:22 水郁 阅读(520) 评论(0) 推荐(0) 编辑
摘要:内容: 对n个点(n<=450),已知他们的边,也就是相邻关系,求任意两个点的最短距离。 代码: 证明:参考 对于0~k,我们分i到j的最短路正好经过顶点k一次和完全不经过顶点k两种情况来讨论。 不经过顶点k的情况下,d[k][i][j] = d[k-1][i][j]。 经过顶点k的情况,d[k][ 阅读全文
posted @ 2016-02-14 00:52 水郁 阅读(483) 评论(0) 推荐(0) 编辑
摘要:题 题意 两个数列,一个有n个数,另一个有m个数,让你最多交换两次两个数列的数,使得两个数列和的差的绝对值最小,求这个差的绝对值、最少交换次数、交换数对 分析 交换0次、1次可得到的最小的差可以枚举出来。 交换两次,如果枚举就超时了。 我们预处理把第一个数列两两组合的所有情况存储起来为u数组,并且按 阅读全文
posted @ 2016-02-12 16:43 水郁 阅读(674) 评论(0) 推荐(0) 编辑
摘要:gcd算法: 通过辗转相除求最大公约数 #include<stdio.h> int gcd(int a,int b){ return a%b==0?b:gcd(b,a%b); } int main(){ printf("%d",gcd(15,18)); return 0; } 扩展gcd算法: 对于 阅读全文
posted @ 2016-02-06 14:48 水郁 阅读(389) 评论(0) 推荐(0) 编辑
摘要:一、scanf和gets 1.不同点: char string[50]; scanf("%s",string); //当遇到回车,空格和tab键会自动在字符串后面添加'\0',但是不能接受回车,空格和tab键,他们仍会留在输入的缓冲区中。 gets(string); //遇到回车认为输入结束,并用' 阅读全文
posted @ 2015-12-18 13:19 水郁 阅读(559) 评论(0) 推荐(0) 编辑
摘要:快速幂算法思想:迭代/二进制 我们知道一个公式:a*b%c=(a%c*b%c)%c 如果要求ab%c: 一、迭代 当b为奇数:ab%c=((a2)b/2*a)%c,记k=a2%c,那就是求(kb/2%c*a)%c 当b为偶数:ab%c=(a2)b/2%c,记k=a2%c,那就是求kb/2%c 然后问 阅读全文
posted @ 2015-12-13 11:09 水郁 阅读(941) 评论(0) 推荐(0) 编辑
摘要:关于KMP算法的原理网上有很详细的解释,我试着总结理解一下: KMP算法是什么 以这张图片为例子 匹配到j=5时失效了,BF算法里我们会使i=1,j=0,再看s的第i位开始能不能匹配,而KMP算法接下来就去比较T[2](next[5]=2)和S[5] next数组什么意思? 就是当t[i]不匹配时, 阅读全文
posted @ 2015-12-03 22:35 水郁 阅读(2149) 评论(0) 推荐(0) 编辑
摘要:参考:http://bbs.byr.cn/#!article/ACM_ICPC/11777 OJ上的一些水题(可用来练手和增加自信)(poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期: 一.基本算法 阅读全文
posted @ 2015-11-29 21:40 水郁 阅读(8836) 评论(1) 推荐(5) 编辑
摘要:调用: 阅读全文
posted @ 2015-11-29 17:03 水郁 阅读(428) 评论(0) 推荐(0) 编辑
摘要:思想: 1.构建最大堆 2.把根节点和最后一个节点交换,,把堆长度-1,也就不考虑放最后的最大的元素了,再构建最大堆 3.现在第二大的元素在根节点了,我们再重复步骤2,直到堆长度为1 调用: 阅读全文
posted @ 2015-11-29 14:08 水郁 阅读(424) 评论(0) 推荐(0) 编辑
摘要:我们都知道斐波那契数列是: F0=0 F1=1 Fi=Fi-1+Fi-2 当i≥2 0 1 1 2 3 5 8 13 21 34 55 它有什么应用呢? 与集合子集 斐波那契数列的第n+2项同时也代表了集合{1,2,...,n}中所有不包含相邻正整数的子集个数。 黄金分割 随着数列项数的增加,前一项 阅读全文
posted @ 2015-11-29 09:40 水郁 阅读(558) 评论(0) 推荐(0) 编辑
摘要:最近在看算法导论中文版,第一部分的基础知识里有许多数学上的知识,多重对数函数就是其中一个我不太熟悉的知识。 多重对数函数的定义是: lg*n=min{i≥0:lg(i)n≤1} lg*2=1 lg*4=2 lg*16=3 lg*65536=4 lg*265536=5 也就是说呢, lg(1)16=l 阅读全文
posted @ 2015-11-29 08:59 水郁 阅读(2636) 评论(0) 推荐(0) 编辑

……