c++(Acm培训)
张张同学!
其实路上风再大也没有关系。
展开
-
东北林业大学acm大一培训(vector)
1. vector直接翻译为“向量”,一般说成“变长数组”,也即“长度根据需要而自动改变的数组。在竞赛中,有些题目需要定义很大的数组,这样会出现“超出内存限制”的错误。比如,如果一个图的顶点太多,使用邻接矩阵就会超出内存限制,使用指针实现邻接表又很容易出错,而使用vector实现简洁方便,还可以节省存储空间。使用vector,首先需要添加vector头文件,即#include ,同时,必须要有“using namespace std”。2. 定义一个 vector 的方法如下:vector nam原创 2020-06-29 23:40:06 · 507 阅读 · 0 评论 -
东北林业大学acm培训(迭代器和set)
1.set 翻译为集合,是一个内部自动有序且不含重复元素的容器。set 最主要的作用就是自动去重并按升序排序,因此遇到需要去重但是又不方便直接开数组的情况。set 中的元素是唯一的,其内部采用“红黑树”实现。使用 set 前,必须先添加 set 头文件,即 #include ,同时,必须要有“using namespacestd”。定义一个 set 的方法如下:set name;其中,typename 可以是任何基本类型或者容器,name是集合的名字。2.3.3,count的使原创 2020-06-29 23:37:57 · 441 阅读 · 0 评论 -
东北林业大学acm大一培训(素数筛)
1.不知名筛选 筛法的思想是去除要求范围内所有的合数,剩下的就是素数了,而任何合数都可以表示为素数的乘积,因此如果已知一个数为素数,则它的倍数都为合数。2.埃氏筛 合数的倍数一定会在筛素数倍数时候被筛掉,所以只筛素数就好,只把质数的素数筛掉 就是找到一个质数,把它的倍数全部标记为合数。但是你会发现有的数字会被标记多次,比如 12 被 2 ,3 ,都标记,这样会浪费时间。3.线性筛 素数筛可 以优化,普通的线性筛法虽然大大缩短了求素数的时间,但是实际上还是做了许多重复运算,比如23=6,在原创 2020-06-29 23:29:35 · 272 阅读 · 0 评论 -
东北林业大学acm大一培训(六)(队列)
1队 列 的 定 义队列就是允许在一端进行插入,在另一端进行删除的线性表。允许插入的一端称为队尾,通常用一个队尾指针r, r指向队尾元素,即r r总是指向最后被插入的元素;允许删除的一端称为队首,通常也用一个队首指针f, f指向排头元素的前面。初始时 f=r=02 队列的基本操作:(1)初始化队列 queuevis ,定义一个队列(2)入队 vis.push(x)(3)出队 vis.pop()(4)判断队列是否为空 vis.empty()(5)判断队列中元素的数量vis.size()(6)得原创 2020-06-29 23:22:04 · 496 阅读 · 0 评论 -
东北林业大学acm大一培训(五)(二进制与枚举)
算数位运算:1、与(&):对于指定的两个数A=60(0011 1100)B=13(0000 1101)执行一下操作 A&B=12(0000 1100)就是对二进制每一位进行了一次与操作,同为1,结果为1,否则为02、或(|):对于指定的两个数A=60(0011 1100)B=13(0000 1101)执行一下操作 A|B=61(0011 1101)就是对二进制每一位进行了一次或操作,同为0,结果为0,否则为13、非 按位取反(~):对于指定的一个数A=60原创 2020-06-28 23:18:59 · 384 阅读 · 0 评论 -
东北林业大学acm培训大一(四)(gcd与lcm)
1.基础知识点2.取模运算的运算规则(a + b) % p = (a % p + b % p) % p(a - b) % p = (a % p - b % p) % p(a * b) % p = (a % p * b % p) % pa ^ b % p = ((a % p)^b) % p 【a的b次方】3.欧几里得算法又叫辗转相除法,用来求得两个数的最大公约数,记作gcd(a,b)其原理如下:4.那么,怎么用程序实现欧几里得算法?实际上我们可以写两种形式的辗转相除:递归和非递归。非递归的原创 2020-06-28 23:15:01 · 531 阅读 · 0 评论 -
东北林业大学Acm培训大一(三)(暴力枚举)
Description给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。比如给定1 4 3 2 9 7 18 22,得到的答案是3,因为2是1的两倍,4是2个两倍,18是9的两倍。Input输入包括n组测试数据。每组数据包括一行,给出2到15个两两不同且小于100的正整数。每一行最后一个数是0,表示这一行的结束后,这个数不属于那2到15个给定的正整数。Output对每组输入数据,输出一行,给出有多少个数对满足其中一个数是另一个数的两倍。Sampl原创 2020-06-28 23:08:37 · 1521 阅读 · 0 评论 -
东北林业大学大一acm培训(二)(排序与cmp)
排序 sort。•sort是c++自带函数•复杂度 n*log(n)•包含在头文件•#include的c++标准库里•函数有三个参数•1.要排序的数组的起始地址•2.数组的结束地址•3.第三个参数是排序的方法,可以不写,默认是从小到大•sort(a,a+n) -----默认从小到大排序•比如 int a[ ]={2,7,1,5,0} 五个数•我们可以写成 sort(a,a+5)•从小到大排序可以写成•sort(a,a+n,less<要进行排序的数据类型>())原创 2020-06-28 23:05:00 · 378 阅读 · 0 评论 -
东北林业大学acm大一培训(一)(结构体与数组)
1,结构体 :在存储和处理大批量数据时,一般会使用数组来实现,但是每一个数据的类型及含义必须一样。如果需要把不同类型、不同含义的数据当作一个整体来处理,如 1000 个学生的姓名、性别、年龄、体重、成绩等,怎么处理呢?C++ 提供了结构体(struct)来解决这类问题。2. C++ 中的结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。使用结构体,必须要先声明一个结构体类型,再定义和使用结构体变量。结构体类型的声明格式如下:struct 类型名{ 数据类型1 成员名1原创 2020-06-28 23:00:16 · 330 阅读 · 0 评论