实验室
十里鲸落说
这个作者很懒,什么都没留下…
展开
-
二分
-二分 例如:数列a[7]={1,7,7,13,14,19,28},想要找到19的下标,可以暴力循环也可以使用hash 下面介绍第三种方法,二分(非递增数列或者非递减数列使用时会缩小很多时间复杂度) 我们可以先把这7个数分成两份1,7,7,13,和14,19,28,左边最大值<19,左边部分直接舍弃,再对右边部分进行重复分,取得这种循环。 部分代码如下: int l=0,r=6; while...原创 2018-11-28 16:11:03 · 125 阅读 · 1 评论 -
尺取法
-尺取法 转载自http://blog.chinaunix.net/uid-24922718-id-4848418.html 有这么一类问题,需要在给的一组数据中找到不大于某一个上限的“最优连续子序列” 于是就有了这样一种方法,找这个子序列的过程很像毛毛虫爬行方式比较流行的叫法是“尺取法”。 给长度为n的数组和一个整数m,求总和不小于m的连续子序列的最小长度 n = 10,m = 15 5 1 3...转载 2018-11-22 22:41:39 · 108 阅读 · 2 评论 -
GCD最大公约数
-GCD 已知两个正整数a,b求最大公约数。 (a,b)可以写成a=b* q1+r1的形式(q1,r1都是实数)(a,b)的GCD即为(b,r1)的GCD 所以b=r1* q2+r2; r1=r2* q3+r3; …… rn=rn+1* qn+2; 所以最大公约数为qn+2。 证明:(a,b)的GCD即为(b,r)的GCD (a=b * n+r) 设v为a,b的公约数 a=tv,b=...原创 2018-11-22 20:56:21 · 195 阅读 · 1 评论 -
快速幂
- 快速幂 快速幂和快速乘(点击这里了解快速乘)所运用的思想基本一致(都是转化成二进制),故这里不做过多解释。 ab,将b化为二进制,ab=x1 * a1 * x2 * a2 * x4 * a4 * … 代码如下: int fast_pow(int a,int b,int c) { int ans=1; a%=c; while(b) { if(b%2) ans=(ans%c*a%...原创 2018-11-22 20:25:11 · 82 阅读 · 0 评论 -
同余定理
- 同余定理 a * b%c=(a%c) * (b%c)%c; (a+b)%c=(a%c+b%c)%c; (a-b)%c=(a+c-b)%c; 注意注意!!!!!! 同余定理只适用于+,—,*,绝对绝对不适用于÷!!!原创 2018-11-22 20:08:11 · 177 阅读 · 1 评论 -
快速乘
- 快速乘 基本原理 由于计算机底层设计的原因,做加法往往比乘法快的多,因此将乘法转换为加法计算将会大大提高(大数,比较小的数也没必要)乘法运算的速度,除此之外,当我们计算a*b%mod的时候,往往较大的数计算a*b会超出long long int的范围,这个时候使用快速乘法方法也能解决上述问题.(来自其他帖子) int fast_mul(int a,int b,int c) { int ...原创 2018-11-22 19:59:31 · 112 阅读 · 1 评论 -
前缀和
- 前缀和 (参考了另外一篇博客) ans[i]=ans[i-1]+a[i];(先把公式写这里) 例如:已知两个正整数a,b,求在a和b之间(包含a和b)(1<=a<b<=1000000)的所有整数的十进制表示中1出现的次数,输入多组数据,不超过100000组,每组答案占1行。 如果把a,b之间每个数的1都找出来,再相加,毫无疑问要时间超限。所以我们要改变方法,先写一个被调函数,...原创 2018-11-22 16:43:12 · 146 阅读 · 1 评论 -
素数打表
-素数打表 最初学c语言的时候,我们学了两种求素数的方法: 例如:从键盘上输入一个大于1的正整数m,判断它是不是素数,是输出yes,不是输出no 方法1: for(i=2;i<=m-1;i++) if(m%i==0) break; if(i==m) printf("yes\n"); else printf(&qu原创 2018-11-22 16:37:14 · 270 阅读 · 0 评论 -
hash
- hash 假如有这么一个题,有一个b[100000],数组里面的每个元素的值大于0小于100000(不重复),现在输入一个数据t,代表接下来要输入的数据数量,每个数据占一行,t小于等于10000,设后来输入的数据为a,(1<a<100000),若数组b存在a,输出yes,否则,输出no。 如果按照我们最初学的,代码将是下面这个样子: for(i=1;i<=t;i++) { ...原创 2018-11-22 16:28:24 · 117 阅读 · 1 评论 -
EOF
- EOF EOF是一个计算机术语,为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。通常在文本的最后存在此字符表示资料结束。 在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码...原创 2018-11-22 16:23:24 · 267 阅读 · 0 评论 -
sort
-sort 初学数组,我们都知道数组排序可以用选择法,也可以用冒泡法,今天介绍一个更加方便简单的函数sort sort在c++ 中使用,可以有2个或3个参数 头文件 #include< algorithm > using namespace std; 2个参数: 例如: a[50]={-1,2,4,3,1},执行sort(a,a+5),就会变成{-1,1,2,3,4} 3个参数 先定义...原创 2018-11-28 16:32:41 · 133 阅读 · 1 评论