序本作品的内容借鉴了中山市华辰实验中学的信息学竞赛学案,同时感谢初一信竞队的谢老师以及同学们给了我极大的帮助!
编写:Minecraft-Sep
图床代理:img.zshfoj.com
老师:Mr.谢
如果有不足之处,敬请多加指正!谢谢!
1.文件与结构体
2.队列
4.栈
5.树与二叉树
6.算法(基础)
7.贪心、分治、DFS
8.递归与递推
9.BFS
C++七大经典排序算法详解(转)前言:排序是将一组数据,按照指定的顺序或要求来进行排列的过程。是数据结构相关课程和内容较为重要和核心的内容之一,常常作为考试题和面试题目来考察学生和面试者,因此熟练掌握经典的排序算法原理和代码实现是非常重要的本文介绍了几大较为经典的排序算法:插入、希尔、选择、堆、冒泡、快速和归并排序
各种排序算法动图解析请参考
各种排序算法复杂度对比冒泡排序:两两比较,将大的元素不断后移;选择排序:在一次遍历中,选择最小的元素,和从起始位置开始的元素交换;插入排序:选择一个元素,若此元素比前一个元素大,while循环不断左移找到它的位置。希尔排序:在插入排序的基础之上加入了一个gap步长进行排序归并排序:数组分治,将有序的子数组合并快速排序:在数组中选择一个基准找到它的位置,接着从基准的两边采用同样的方法分治。堆排序:先对整个数组构建大顶堆,接着从根节点开始不断调整。
冒泡排序法冒泡排序是所有排序算法中相对简单且容易理解的算法,它的核心思想:通过for循环不断遍历需要排序的元素,依次比较相邻的两个元素,若不满足指定的顺序(可以从大到小排序,也可以反过来),就交换两个元 ...
竞赛笔记
未读2024/1/25
P1781 宇宙总统
123456789101112131415161718192021222324252627#include<bits/stdc++.h>using namespace std;char a[10001],t[10001];//因为数字会比较大 char b[10001];int lenx,leny,n,m=1;int main(){ cin>>n; cin>>a; for(int i=1;i<n;i++){ memset(b,0,sizeof(b));//初始化 cin>>b; lenx=strlen(a);//取数位 leny=strlen(b); if((lenx<leny)||(lenx==leny&&strcmp(a,b)<0)){//进行交换(排序) strcpy(t,a); strcpy(a,b); strcpy(b,t); m=i+1;//序号也要一起 ...
竞赛笔记
未读2024/1/24
C++七大经典排序算法详解(代码实现+解析)转 经典排序算法详解(OI WIKI)
竞赛笔记
未读2024/1/23【初一算法基础】高精度
P2437 蜜蜂路线
123456789101112131415161718192021222324252627282930313233343536//P2437//看了一下题解才知道可以用递归c #include<iostream>using namespace std;int f[10005][20010];//处理每个方格 int m,n;int len=1;//计数器计算总和位数 void did(int k){//k指阶数 int isBigten=0;//处理进位 for (int i=1;i<=len;i++) //开始高精度加法 { f[k][i]=f[k-1][i]+f[k-2][i]+isBigten;//递推(只是多了一个加进位) isBigten=f[k][i]/10;//获取进位值 f[k][i]%=10;//得到进位后获取当前位的值 } if(isBigten>0) //最后一位可能会进位 { len++;//位数+ ...
竞赛笔记
未读2024/1/22拯救oibh总部
奇怪的电梯DFSBFS
马的遍历
P2895
未写完暂存(写完自动销毁)
2024/1/21 study1234567891011queue<类型>Q;Q.push(最初状态);while(!Q.empty()){ 类型 u=Q.front(); Q.pop(); for(枚举所有可扩展到的状态){ if(满足入队条件){ Q.push(状态); //维护某些必要信息 } } } //BFS(队列方式)模板
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950//P1135 奇怪的电梯//借鉴了一下他人告诉我的题面意思(一开始看不懂又想不明白)awa#include<bits/stdc++.h>using namespace std;struct node{ int x,y;};int qe[10001];//存放每个层数的信息int n,a,b;int ans;//int ans[101][1 ...
2024/1/20 自我学习/练习123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354//P1506 拯救oibh总部//自己写的(经历了惨痛教训后,记住:数组开大亿点!!!)#include<bits/stdc++.h>using namespace std;struct node{ int x; int y;};int sum;//求和queue<node> q;//用struct类型,这样就可以即可直接使用队头数据了int dx[4] = {1,0,0,-1},dy[4] = {0,1,-1,0};//枚举方向int n,m;bool f[505][505];//记录已经走过的点char a[505][505];//保存地图void bfs(){ for(int i=1;i<=n;i++){ fo ...
竞赛笔记
未读2024/1/19
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162//T172312 走迷宫#include<bits/stdc++.h>using namespace std;struct node{ int x; int y; int s;//步数 } que[10001];int head,tail,r,s,p,q;char c[1001][1001];//保存地图bool flag;//标记是否达到目标点,0未到,1已到int a[4]={-1,1,0,0},b[4]={0,0,-1,1};//可走的组合bool f[1001][1001];//记录已走的点void bfs(){ while(head<tail)//队列不为空时操作 { for(int i=0;i<=3; ...
竞赛笔记
未读2024/1/18
1234567891011121314151617181920212223242526272829303132333435363738394041424344//P1596 [USACO10OCT] Lake Counting S#include<bits/stdc++.h>using namespace std;int dx[8]={-1,-1,-1,0,0,1,1,1};int dy[8]={-1,0,1,-1,1,-1,0,1};//各个方向int a[1001][1001];//保存地图int n,m,ans;void dfs(int x,int y){ for(int i=0;i<=7;i++)//向8个方向枚举 { int xx=x+dx[i]; int yy=y+dy[i]; if(a[xx][yy]==1)//只要找到联通得水坑就标记为0 { a[xx][yy]=0; dfs(xx,yy); } } ...