自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小小小草儿的博客哟

追梦,启航

  • 博客(13)
  • 问答 (2)
  • 收藏
  • 关注

原创 【ACM】找第K大数

给出一组数字,数字个数为N,找到其中第K大的数字。(N>= K)int a[maxn]中maxn=32768*1024/4;解法一:读入所有数据,用快速排序 时间复杂度O(N+N*logN)#include <cstdio>#include <algorithm>#define maxn 1000000+5using namespace std;int T[maxn];bool cmp(in

2016-12-20 20:30:54 1168

原创 【ACM】整数唯一分解定理

n是大于一的任意正整数。(称为标准分解式)其中pi为素数,质数ai为正整数(如果ai=0,相当于乘一,没有意义的)。标准分解式是唯一且一定存在的。(素因子的乘积顺序不考虑)下面给出几个简单的判别式:整数a能被2整除的充要条件是a的末尾数字为偶数。整数a能被3整除的充要条件是a的各位数字之和能被3整除。整数a能被5整除的充要条件是a的末尾数字为0或5 。整数a能被11整除的充要条件是a的奇位数

2016-12-18 22:00:57 3401

原创 【ACM】手动实现线性队列

队列的实现可以基于数组实现,也可以基于单链表实现。 下面给出数组实现,为防止队列多次进行插入和删除操作导致的前面的数组空间被浪费,采用循环队列的方式。声明一个队列类,这里要注意maxn的大小,因为是循环队列,所以不用太大。如果太大,类又是在main函数中定义的,就有可能导致栈溢出。class Queue{public: Queue(); int PUSH(in

2016-12-15 20:01:51 494

原创 【ACM】利用积性函数实现的各种线性筛法

一:线性素数筛 一般的素数筛思路就是选择出小素数,然后划去小素数得到整数倍,这就是”埃拉托斯特尼筛法”,这种方法会同一个元素进行多次筛选。因此有了另一种优化的线性素数筛法。主要思想是:每一个合数都可以进行质因数分解,所有任何一个合数都可以由最小素因子进行唯一标记。代码如下:void quick_prime(int n){ memset(prime,0,sizeof(prime));

2016-12-11 15:05:51 939

原创 【C++学习】构造函数和析构函数

前言 我们不能通过对结构体列表初始化的方式对类的对象初始化。因为在类中,有的数据成员的访问权限是私有的,然后只有本类中的成员函数才能对类中的私有数据成员进行访问,因此只有通过设计合适的成员函数,才能对对象正确的初始化。(如果一个类中的所有数据成员都是公有的,就能采用列表初始化的方式,但是也就违背了类设计的初衷—-数据隐藏)一:构造函数:1.构造函数 一般来说,最好是在创建对象的时候就进行初始化。

2016-12-10 21:41:13 424

原创 【ACM】快速排序

思想: 快速排序(quick sort)是对冒泡排序的一种改进,通过一趟排序把即将排序的数据分割为独立的两部分,其中一部分的数据都比另外一部分的所有数据都要小。然后再按照这种方法对这两部分数据分别进行快速排序,递归完成整个排序过程。它采用的是一种分治策略,也就是分治法。 分析: 快速排序的时间复杂度为O(nlogn),而且排序效率在同为O(nlogn)的几种排序算法(如归并排序,堆排序)中效

2016-12-10 18:44:03 772

原创 【ACM】最小生成树(Kruskal算法)

算法简介: Kruskal算法又叫做加边法,采用的并查集的思想。克鲁斯卡尔算法只需要对边进行访问,所以算法的时间复杂度只和边的数量有关系,时间复杂度为O(eloge),其中e是边的数量。 算法过程: 1.将图中所有的边按照权值进行排序。 2.将图中的每一条边进行遍历,找出权值最小的边(注意:不能与已经加入到最小生成树集合的边构成环),如果符合要求,则把该边加入到最小生成树的集合中。 3.重

2016-12-09 21:56:00 796

原创 【ACM】并查集

并查集是一种树形的数据结构,用于处理一些不相交的集合的合并及查询问题。 集就是让每一个元素构成一个单元素的集合,也就是按照一定的顺序将属于同一组的元素的集合进行合并。模板代码如下:int pre[1000]; //并查集数组int Find(int x){ int r = x; //假设根节点是自身,然后通过循环进行查找x的根节点 while(pre[r] != r)

2016-12-09 20:20:45 465

原创 【ACM】最小生成树(Prim算法)

算法分析: prim算法适合稠密图,时间复杂度为O(n^2),时间复杂度与边的条数无关。 概念: 边带有权值的图称为带权图或者网,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权。 1.最小生成树(MST):权值最小的生成树。 2.构造最小生成树应该满足一下两个性质: 尽可能的选取权值小的边,但是不能构成回路。 选取n-1条恰当的边连通n个顶点。MST性

2016-12-09 20:04:51 912

原创 【ACM】中国剩余定理(CRT)

中国剩余定理是求解一次线性同余方程组的方法。中国剩余定理: 假设整数m1,m2, … ,mn两两互素,则同余方程组 有整数解。 设 是m1,m2,m3…mn的乘积,并设 是除了mi以外的n-1个整数的乘积。 设是Mi模mi的逆元(数论中的倒数)。那么在模M下的解是唯一的。 模板代码如下:void Extend_Euclid(int a,int b,int& x,int& y){

2016-12-09 16:40:24 699

原创 【ACM】线性筛选欧拉函数

如果是求一个数字的欧拉函数,可以在时间复杂度为O(sqrt(n))求出。但是如果要求前n个数的欧拉函数,按照上述的思路,时间复杂度就是O(n*sqrt(n))。 因此采用一种线性时间的方法筛选欧拉函数值,完成打表。本方法需要一下的几个性质: (p为质数) 1.phi[p]=p-1,因为1-p中只有p与本身不互质。 2.如果i mod p = 0,则 phi[i*p] = p *ph

2016-12-07 20:10:11 787

原创 【ACM】欧拉函数

欧拉函数是小于等于n的数字中与n互质的数字的数目。 欧拉函数的公式如下: 其中x不为0,p1…pr表示x的所有质因数。 特殊的,φ(1)=1(唯一和1互质的数(小于等于1)就是1本身)。 注意:每种质因数只一个。(对任意整数都可以进行素数分解,任意素数幂之积) 性质如下: 欧拉函数是积性函数,若m,n互质,φ(mn)=φ(m)φ(n) 。 若n是质数p的k次幂,φ(n)

2016-12-07 18:56:17 472

原创 【ACM】欧几里德算法

欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数。定理:两个整数的最大公约数等于其中较小的那个数和两个数相除余数的最大公约数。gcd(a,b) = gcd(b,a mod b)上述表达式中a>b。限制gcd(a,b) = gcd(|a| , |b|),也就是对非负整数进行了讨论。证明方法: (百度百科:a可以表示成a = kb + r(a,b,k,r皆为正整数),则r = a mo

2016-12-03 20:32:03 419

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除