【蓝桥杯】——>进阶

张开发
2026/4/10 3:23:23 15 分钟阅读

分享文章

【蓝桥杯】——>进阶
1.使用sort进行升序以及降序的排序//使用sort进行数组的升序以及降序排列#includebits/stdc.husingnamespacestd;intmain(){intn;cinn;vectorintnum(n);for(inti0;in;i){cinnum[i];}sort(num.begin(),num.end());for(inti0;in;i){coutnum[i] ;}coutendl;sort(num.begin(),num.end(),greaterint());for(inti0;in;i){coutnum[i] ;}coutendl;return0;}2. 斐波那契数列f[n] % 1e7的结果使用循环表示斐波那契数列不使用递归#includebits/stdc.husingnamespacestd;constintmod1e97;intf[100005];intmain(){intn;cinn;f[1]1;f[2]1;for(inti3;in;i){f[i](f[i-1]f[i-2])%mod;}coutf[n];return0;}3.输出矩阵的顺时针旋转90度#includebits/stdc.husingnamespacestd;// 定义全局二维数组大小205x205满足题目中n/m≤200的常见范围intnum[205][205];intmain(){// n原始数组的行数m原始数组的列数intn,m;cinnm;// 第一步读取n行m列的原始二维数组// 原错误1for循环条件少写分号 → i 0; i n// 原错误2内层循环条件写错 → j m 而非 i mfor(inti0;in;i){// 遍历每一行i为行下标for(intj0;jm;j){// 遍历每一列j为列下标cinnum[i][j];// 输入第i行第j列的元素}}// 第二步将数组顺时针旋转90度并输出// 旋转逻辑原始n行m列 → 旋转后m行n列// 旋转后第i列原列变为第i行原始行逆序后作为列for(inti0;im;i){// 遍历原始数组的列旋转后成为行for(intj0;jn;j){// 遍历原始数组的行旋转后成为列// 核心映射关系num[原始行][原始列] num[n-1-j][i]// n-1-j将原始行逆序比如n3时j0→2j1→1j2→0coutnum[n-1-j][i];// 控制输出格式非最后一列加空格最后一列换行if(j!n-1){cout ;}else{coutendl;}}}return0;}1.枚举1-3、2.排序冒泡、选择、插入、归并、快速、桶、堆、基数、3.搜索DFS、BFS、剪枝、双向BFS、记忆化搜索、迭代式加深搜索、启发式搜索1-5、4.贪心1-5、5.模拟1-3、6.二分2-5、7.DP一维3-5、背包DP、状压DP、数位DP、DP的常见优化、8.高精度1-5、9.数据结构栈、队列、链表、ST表、堆、树状数组、线段树、Trie树、并查集、平衡树2-5、10.数学数论3-5、排列组合、二项式定理、容斥定理、矩阵运算、高斯消元、11. 字符串哈希、kmp、马拉车、12.图论欧拉回路、最小生成树、单元最短路及差分约束系统、拓扑序列、二分图匹配、图的连通性问题【割点、桥、强联通分量】、13.计算几何概率论以及博弈论一、数组和前缀和1暴力#includeiostreamusingnamespacestd;intmain(){intn;cinn;intnum[n];for(inti0;in;i){cinnum[i];}longlongsum0;for(inti0;in;i){for(intji1;jn;j){sum(longlong)num[i]*num[j];}}coutsumendl;return0;}后缀和递推#includeiostream#includevectorusingnamespacestd;intmain(){intn;cinn;vectorintnum(n);for(inti0;in;i){cinnum[i];}longlongsum0;vectorlonglongl_sum(n,0);l_sum[n-1]num[n-1];for(intin-2;i0;i--){l_sum[i]num[i]l_sum[i1];}for(inti0;in-1;i){sumnum[i]*l_sum[i1];}coutsumendl;return0;}前缀和快速进行计算任意区间[l,r]的和sum(l,r)f_sum[r]-f_sum[l-1];Leecode303、209、560、304、918二、二叉树1.二叉树的遍历前序、#includeiostream#includevector#includequeue#includestackusingnamespacestd;structTreeNode{intval;TreeNode*left;TreeNode*right;TreeNode(intx):val(x),left(nullptr),right(nullptr){}};//1.前序voidpreOrder(TreeNode*root,vectorintres){if(rootnullptr)return;res.push_back(root-val);preOrder(root-left,res);preOrder(root-right,res);}后序、//2.后序voidpostOrder(TreeNode*root,vectorintres){if(rootnullptr)return;postOrder(root-left,res);postOrder(root-right,res);res.push_back(root-val);}中序、//3.中序voidinOrder(TreeNode*root,vectorintres){if(rootnullptr)return;postOrder(root-left,res);res.push_back(root-val);postOrder(root-right,res);}层次//4.层次(队列实现)voidlevelOrder(TreeNode*root,vectorintres){if(rootnullptr)return;queueTreeNode*q;//辅助队列q.push(root);//根节点入队while(!q.empty()){intnq.size();//记录当前的层节点数for(inti0;in;i){TreeNode*nodeq.front();q.pop();res.push_back(node-val);//左子节点入队if(node-left!nullptr)q.push(node-left);//右子节点入队if(node-right!nullptr)q.push(node-right);}}}利用二叉树的性质求层数解决问题#includeiostream#includevector#includecmathusingnamespacestd;intmain(){intn;cinn;vectorinta(n);for(inti0;in;i){cina[i];}//计算树的深度intdepthlog2(n)1;//初始化每一层的权值和vectorlonglonglevel_sum(depth1,0);//计算每一层的权值和for(inti0;in;i){intlevellog2(i1)1;level_sum[level]a[i];}//找到最大的权值和所在的层longlongmax_sum-1;intres1;for(inti1;idepth;i){if(level_sum[i]max_sum){max_sumlevel_sum[i];resi;}}coutresendl;return0;}常用库的概述iostream输入输出vector动态数组algorithm常用算法string字符串的相关处理eg

更多文章