- 博客(34)
- 收藏
- 关注
原创 蓝桥备考2023.11.25
数组大小必须为常量,但是对于不确定输入,即随机输入一组数时,无法确定输入的数组长度 按以下处理。continue可以在需要的地方临时结束循环的当前轮回,然后进入下一个轮回。由于作者急着去玩游戏,排序算法明天再写,也可能是后天,十大排序算法。至于其他函数,作者懒得去记,等用到的时候自己定义一个函数使用。该代码的运行结果是6 即在i为3的时候就退出了循环。选择语句过于简单,但是swich有点遗忘。或者定义数组a[n],n的值由键盘输入。而将其换为break则会为0。
2023-11-25 22:28:51 91
原创 第十六周总结
也是这学期最后一次总结博客了,acm课程也结束了,这周主要在经历了一周的刷题,有以下感受:1.背包问题大都都有固定的模板,所以做题之前一定要先审题,我自己总结成四步:(1)找到题目的条件(通过题中给出的物品及其他的数量来判断背包类型)(2)找到题目的目的(让我们求什么)(3)根据题意建立相应的背包方程(01背包的倒序,完全背包的正序等等等等都是解题的模板)(4)将其他代码根据题意补全(我觉得这一步才是最难的).........
2022-06-19 23:14:35 213 1
原创 第十四周总结
这周主要学习了dp动态规划的知识,动态规划也就是为了减轻运算的复杂程度所运用的,它可以让一个复杂度为n的次方数运算降低。也就避免了在求一个很大的数时出现的无法运行的情况。将子问题的各种情况都进行枚举,从中找到最优解。子问题的最优解组成原问题的最优解。和贪心一样,它相较于之前学的贪心一样,没有固定的模板,掌握了思想和基本题型思考方法就能够理解应用。......
2022-06-05 23:41:10 159 2
原创 第十三周总结
这周主要看了贪心的博客,看了很多不同的思路也看到了课上讲到的类似题目。总的来说这周题目难度太大,看着他们博客中给出的题解也需要看很久才能明白。以下就是对于我看的这几道题的感受。就是用贪心算法解决题目时,只考虑局部最优解,也就是说要用贪心算法解题,就要保证该问题的整体最优解可化分为一个个局部最优解。关于贪心算法的学习已经两周了,我也收获了不少,但还是对贪心算法的思想不够清晰,还是有所模糊。众所周知,贪心算法在几个基本算法是相对简单的算法了,思路也简单,每一步都能做出当前最好的选择。在老师布置贪心算法的
2022-05-30 00:18:42 116
原创 第十二周总结
这周主要做了最短路最小生成树的题目,这类题目相较于前两次的题目来说比较简单题目数量也少了很多,问题通过dijkstra、floyd、spfa。以下就是这周题目类型总结和不同用法1.dijkstra每次选择一个未访问过的到已经访问过的所有点的集合的最短路径,并用这个点进行更新,但是没办法解决负权的最短路径例子:[USACO09OCT]Heat Wave G - 洛谷使用dijkstra,首先用e来保存两点之间权值,vis来标记是否该点被用过,d[i]表示起点到i的最短距离。即总和最小就是最小。
2022-05-23 00:29:00 125
原创 第十一周总结
并查集补充:并查集题目主要难点在于如何由子类寻找父类,集合的合并。主要分为1:初始化。 2:查找父类。 3:让两个不关联的并查集关联起来。4:压缩路径,使子类全部向最高级父类直接联系拓扑排序就是对所有结点排序,寻找入度为0的点,再运行过程中不断修改入度,判断是否成环十分好用。经过两周对并查集的学习,我对于并查集处理问题有了更好的理解,下面就是我ac题目过程的感受。并查集的内容不多,大多数题目直接套用模板就可以求得。只针对不同题目思考的方式不同处理也有些差距。1.利用二分和并查集解决的题目:[US
2022-05-15 23:42:37 135
原创 第十周总结
第十周,因为上周没有提交博客,所以就有了很多时间来看博客和看并查集的例题。对于我来说,并查集是一个全新的知识,并查集的名字上可以看出他处理的是集合之间的关系:“合并”和“查找”。和运用集合的形式将元素关联起来。但是遇到并查集问题,一般我看到后第一感觉是用搜索来解决,有些题目也是真的可以用搜索来处理,但是在看博客以及上课的时候我知道了这些题目有搜索来处理的话,会过于复杂,从做题的角度来说用并查集会简单很多。这些情况也只能在下周做题来仔细地体会。对于并查集的处理,结点的处理是关键,通过根结点编号压缩路径
2022-05-08 16:00:00 148 1
原创 搜索类题目总结
对于广搜补充:广度优先搜索按照距开始状态由近及远的顺序进行搜索,因此可以很容易地用来求最短路径、最少操作之类的问题的答案。这个问题中,状态仅仅是目前所在位置的坐标。转移的方式为四方向移动。只要将已经访问过的状态用标记管理起来,就可以很好地做到由近及远的搜索,这个问题要求最短距离虽然到达终点时会停止搜索,可如果继续下去直到队列为空的话,就可以计算出各个位置的最短距离。此外,如果搜索到最后,如果依然无法实现,这个位置就是无法从起点到达的。用和d[x]和d[y]两个数组来表示四个方向向量。这样通过一个循环可.
2022-04-27 17:34:22 314 1
原创 周总结博客
这周主要看了50多篇博客,因为线下的原因看题的时间少了很多,对于学到知识的练习也少了很多。因为平时程序课上学习也对于stl中的运算符重载有了更深入的了解。这周也是对于深搜题目的总结································································································································p1451 求细胞数量这道题目的不同点是需要考虑细胞数字的上下左
2022-04-17 16:23:13 108
原创 周总结博客
这周主要看的是深搜内容,如何用递归实现深搜操作。在初级深搜中一般是处理寻找最短路径问题,这也是我这周主要看博客的重点。大约看了60多篇博客,对搜索类的题目进行了大量的练习。以下是本周看的题目及思考过程样例输入1: 41 2 4 713样例输出2:Yes样例输入2:41 2 4 715样例输出:No对于这个题的思路是深搜中一个数是否被选中的情况.并且涉及选中后总和的变化,故采用bool类型的dfs来判断是否选入某数,分为选入何不选入的情况#includ...
2022-04-10 22:19:34 222 1
原创 周总结2022/4/3
这一周主要学习了深度搜索和广度搜索的有关知识同时看了有关例题,弥补了上周对于深搜和广搜在实际应用方面的不足,看了大约四十篇博客,也刷了许多关于搜索的题目。回顾做过的题还会有很多意外收获,感觉还能提升解题的思维。由于之前理解的不够充分,回顾起来也很耗费时间。深度优先搜索的思路就是先找一个主线,然后回头找到每一个点的分支。这就是回溯法,所谓回溯法,就是每一点都有相同的特征,但状态不一样。当从头遍历到尾后,要原路返回,每次返回的那个点状态不一样。仔细想想,这个递归的思想是一致的。递归简单来说就是我调用我自己。
2022-04-03 19:24:11 295 1
原创 总结 2022/3/26
1.length函数用来取字符串的长度string sb="wangdayong";sb.length()=10;2.宏定义 define 补充#define是宏定义命令作用:替换,将字符串用宏名代替不参数的使用:#define wf 2//不加分号,此时wf=2带参数的使用(此时可以实现复杂运算,可带公式):#define wf(x) x+2;int m=2;m=wf(m);//此时m=4注意:#define Square(x) x*xfloat tem
2022-03-26 22:53:35 827
原创 周总结2022/3/19
#include<bits/stdc++.h>//万能头文件sync_with_stdio(false);//可以提升cin和cout的速度。!!!!!!!!!注意:但是在code blocks中需用:ios::sync_with_stdio(false);1.栈 stack只有一个出口,只有一个出口,先进后出。猜想:析构函数释放内存的顺序可能与栈有关。2.队列(queue)先进先出,从底部进入元素,从顶部取出元素。3.vector(动态数组)4.sort排序.
2022-03-19 17:56:34 289
原创 程序设计实验课
3.定义计数器类Counter。要求具有以下成员:计数器值;可进行增值和减值记数(每次增1或减1即可);可提供记数值。(要求使用构造函数对数据成员初始化)源代码:#include <iostream>using namespace std;class counter{ int i;public:counter(int a); void jia(); void jian(); int shuchu();};void counter::jia(){ i
2022-03-14 20:03:00 1090
原创 vector 用法
vector翻译为向量,即变长数组。使用vector,需要添加vector头文件:#include <vector>1.定义:单独定义一个vector:vector<typename>name;类似于定义了一个一维数组name[size]typename 可以是int double char vector set queuetypename是一个stl容器时,需要在>>前添加空格如果typename是vector的话,定义形式:vector<
2022-03-12 23:25:27 199 1
原创 用类表示X-Y平面直角坐标系上的点,编写程序,顺序读入一个四边形的4个顶点坐标,判别由这些顶点的连线构成的图形是否为正方形、矩形或其它四边形。
#include <iostream>#include <cmath>using namespace std;class Point{public: double x,y; void setxy() {cin>>x>>y;} double getx() {return x;} double gety() {return y;}};double d(Point d1, Point d2 ){...
2022-03-05 19:13:52 721
原创 定义三角形类,完成:为三边置值、取三边的值并输出、求三角形周长、求三角形面积、输出三角形周长和面积。
#include <iostream>#include <cmath>using namespace std;struct A{double x,y,z;double l,s;public: void l1() { l=x+y+z; cout<<l<<endl; } void s1() { double i=l/2; s=sqrt(i*(i-x)*...
2022-03-05 19:12:50 528
原创 二分答案。
利用二分思想解决具有单调性判定的问题二分答案法的使用范围典型:要求我们求出某种条件的最大值的最小可能情况或者最小值的最大情况使用前提:1. 答案在一个固定的区间内2. 难以通过搜索来找到符合要求的值, 但给定一个值你可以很快的判断它是不是符合要求3. 可行解对于区间要符合单调性, 因为有序才能二分嘛基本代码://第一个大于或等于x的数的下标int lower_bound(int x,int n,int a[]){ int lb=-1,ub=n; while(ub-l...
2022-02-20 21:13:43 190
原创 二分查找法
过程:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。计算公式:当顺序表有n个关键字时:查找失败时,至少比较a次关键字;查找成功时,最多比较关键字次数是b。注意:a,b,n均为正整数。用代码表示:Binary.
2022-02-20 21:07:56 199
原创 贪心算法C++
贪心算法又称为贪婪算法特点:可解决的问题通常大部分都有如下的特性:⑴ 有一个以最优方式来解决的问题。为了构造问题的解决方案,有一个候选的对象的集合:比如不同面值的硬币。⑵ 随着算法的进行,将积累起其它两个集合:一个包含已经被考虑过并被选出的候选对象,另一个包含已经被考虑过但被丢弃的候选对象。⑶ 有一个函数来检查一个候选对象的集合是否提供了问题的解答。该函数不考虑此时的解决方法是否最优。⑷ 还有一个函数检查是否一个候选对象的集合是可行的,也即是否可能往该集合上添加更多的候选对象以获得一
2022-02-13 18:34:03 811
原创 递推与递归
递推:知道初始条件,初始条件往上推直到求得目标解。递归起点一般由题目或者实际情况确定,不由递归关系推出。如果无法确定递归起点,那么递归算法就无法实现。可见,递归起点是递归算法中的重要一笔。核心代码:int main(){cin>>N;Bigint f[5010];f[1]=Bigirt (1);f[2]=Bigirt (2);for (int i3=3;i<=N;i++)f(i)=f(i-2)+f(i-1);f(N).print();return 0
2022-02-13 18:16:19 168
原创 子集枚举法
子集枚举法分为三种:增量构造法/位向量法/二进制法而在《深入浅出》中提到了二进制法二进制法类似于位向量法,同样也是枚举各个位置的状态,但这次用二进制表示,二进制长度为N,与原集合大小相同。二进制的第 i 位代表原集合中的第 i 位是否被选中,枚举各种情况。集合大小为N,就是2的N次种方式。此时要运用数学知识————并集、补集、交集、包含、属于等情况。 设A、B为两个集合的二进制表示,则 交集表示为 A & B 并集表示为 A | B 对称差集表示为 A ^ B 补.
2022-02-13 18:00:26 1138
原创 快速排序法
算法的大致过程是对于一个无序序列,找到一个 “哨兵数”,将序列中所有比哨兵数小的数字都在哨兵数的左边,所有比哨兵数大的数字都在哨兵数的右边;然后分别对哨兵数左边和右边再使用同样的方法找到新的哨兵数,并再次进行分类,直到集合不可分割为止。怎么选择哨兵呢?随便选,可以是第一个,可以是中间那个,也可以在序列中随机选择。选择好哨兵,然后从序列左端开始寻找第一个比哨兵大的数字从右边选择第一个比哨兵小的数字,然后交换这两个数,接着继续从左边找到比哨兵大的数字,右边比哨兵小的数字并交换。一直到将序列分为两组,左边序列都
2022-01-29 18:14:11 1098
原创 快速排序法
算法的大致过程是对于一个无序序列,找到一个“哨兵数”,将序列中所有比哨兵数小的数字都在哨兵数的左边,所有比哨兵数大的数字都在哨兵数的右边;然后分别对哨兵数左边和右边再使用同样的方法找到新的哨兵数,并再次进行分类,直到集合不可分割为止。怎么选择哨兵呢?随便选,可以是第一个,可以是中间那个,也可以在序列中随机选择。选择好哨兵,然后从序列左端开始寻找第一个比哨兵大的数字从右边选择第一个比哨兵小的数字,然后交换这两个数,接着继续从左边找到比哨兵大的数字,右边比哨兵小的数字并交换。一直到将序列分为两组,左边序列都.
2022-01-29 18:10:59 902
原创 递归函数有关知识
递归函数即自己调用自己的函数,常用于处理阶乘、杨辉三角、斐波那契数列等实现递归函数需要满足两个条件递归公式与递归条件(若没有递归结束条件可以用return1强制结束)例如求阶乘#include <iostream>using namespace std;long a(int n){ if (n == 1) return 1; else return n*a(n - 1);}//重复调用函数以求得阶乘int main(){ int n; c...
2022-01-27 19:00:26 583
原创 结构数组。。
结构数组可以是基本数据类型,也可以是已经定义的构造类型。当数组元素类型为结构类型时,称为结构数组。例如:struct S_type{int a;double x;};S_type S_ary[10];S_type是一个有10个元素的数组,元素类型是结构类型S_type,即数组中的每一个元素均包含两个成员。例如:S_ary[0].a S_ary[0].xS_ary[1].a S_ary[1].xS_ary[2].a S_ary[2].xS_ary[3].a
2022-01-26 23:36:00 300
原创 常用的math函数
使用math函数时需要在开头添加头文件<math.h>1.fabs(double x)//用于对double型变量取绝对值c++中:int abs(int i)c语言中:printf("%.2f\n",fabs(db));2.floor(double x)和ceil(double x)//用于double型变量的向下取整和向上取整,返回类型为double型c++中:向上取整 ceil()ceil(1.5)=2 ceil(0.5)=1 ceil(1)=1向下取整 flo
2022-01-25 21:59:44 1087
原创 辗转相除法计算最大公约数与最小公倍数
辗转相除法:if v>u 将变量u与v交换 (使大者u为被除数)while (u/v的余数r!=0) {u=v (使除数v变为被除数u) v=r (使余数r变为除数v)}输出最大公约数v(目前)最小公倍数l=u*v(原来)/最大公约数v1.计算最大公约数和最小公倍数源代码:#include <ios...
2022-01-25 00:37:09 967
原创 结构体与结构体变量
结构体类型的定义结构体是数目固定、类型可不同的数据项组合成的一个有机的整体。(即在结构体中可以同时出现int char double等不同的数据类型。)结构体是一种构造数据类型 用户在程序中自己建立所需的结构体类型一般形式:struct[结构体名]//注意:结构体名需要是合法标识符,可以省略。{类型名 成员名;//注意:成员名可以与程序中其他变量重名,互不干扰。类型名 成员名;......................};//注意例子:struct studen
2022-01-24 21:32:12 342
原创 acm入门-初读《深入浅出》
acm学习是一个不断深入的过程,初学acm是在学校acm协会组织的培训课。学长的讲解使我更加了解了acm的作用及学习方法。作为一个专业计算机的普通本科生,在大一入学就有许多优秀学子面向我们的演讲,他们也因acm竞赛的成功获得了报送资格。我逐渐了解到了acm。在acm协会的学长推荐及培训老师的推荐及要求下,我接触了《深入浅出》这本书,里面有具体acm入门内容。有些术语我甚至都没有在大一程序设计课上听到过。初读这本书是十分苦涩的。里面详细的描述了各种各样的程序思路及知识。自学实在是很难理解。..
2022-01-23 16:59:30 127
原创 代码练习。
敲七题目来源:sdau.openjudge.cn描述输出7和7的倍数,还有包含7的数字。例如(17,27,37…70,71,72,73…)输入一个整数N。(N不大于30000)输出从小到大排列的不大于N的与7有关的数字,每行一个。样例输入20样例输出71417思路用循环完成数字的筛选源代码#include <iostream>using namespace std;int main(){int n,i=1,j;cin>&g..
2022-01-23 16:44:06 383
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人