![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
就是氧气c
第十一届蓝桥杯c/c++河南省赛一等奖
第十一届蓝桥杯c/c++国家竞赛二等奖
全国算法邀请赛秋季赛银奖
河南省ccpc铜奖
第三届传智杯区域赛一等奖
ACM/ICPC河南赛区铜奖
一个热爱算法的萌新~~~
成都理工大学计算机硕士研究生
展开
-
第一次CCF软件能力认证(前两题)
第一次CCF题目解析(前两题)原创 2022-03-29 21:23:49 · 275 阅读 · 0 评论 -
河南城建学院第一届蓝桥杯校赛选拔
洗牌问题 洗的我一脸懵逼 找规律哈 随便选一个数作为参考系 按照规律变换 每变换一次计数器++ 回到原来位置即可。以第一个数为例1的位置变化为1 2 4…大于n的数每次对应的下标为(当前坐标-x)*2-1模拟一下就出来了乘法不想写 左移运算相当于*2 右移运算相当于/2 浮点数不支持左右算术移位计算可以把数字转成二进制看一下就可以了#include<iostream>#include<cstring>#include<cstdio>using na.原创 2021-11-30 17:32:09 · 4969 阅读 · 5 评论 -
北京邮电大学上机复试题-复制,剪切,粘贴
模拟即可~~~#include<iostream>#include<string>using namespace std;string mode;string t;int n;int main(){ cin>>mode; cin>>n; while(n--){ int l,r; string op; cin>>op; // cout&l.原创 2021-05-30 23:25:55 · 168 阅读 · 0 评论 -
北京邮电大学上机服饰题目-寻找奇特的数
暴力枚举会超时,可以看一下性质,我可以枚举目标数有哪些因子 若两个因子(m,n)相乘之和是目标数且两个因子均小于矩阵的长度 则答案+=2(因为只用枚举到根号(目标数)即可 m * n=n * m) 注意特判能够开平方的数 这样的数有一个因子是根号(目标数) 此时答案需++;#include<iostream>#include<unordered_map>#include<cmath>using namespace std;unordered_map<..原创 2021-05-30 23:03:06 · 96 阅读 · 0 评论 -
北京邮电大学上机复试题-寻找变化前的01序列(HDLC协议)
双指针模拟#include<iostream>#include<cstring>#include<cstdio>using namespace std;int n;int main(){ string s; cin>>n; while(n--){ cin>>s; string res=""; for(int i=0,j=0;i<s.size();i++){.原创 2021-05-30 22:39:29 · 137 阅读 · 0 评论 -
区间DP总结
区间DP区间DP一般分为两类1.非链式2.链式区间上的动态规划大多数是将大问题分解为小问题,小问题的解组成大问题的解看下面例题:定义状态f[i][j]表示合并以左区间i开始到右区见j合成石子的最小代价。由于合并石子只能合并相邻两堆,所以我们可以枚举[i,j]区间的中间点k,那么子问题可以被分成f[i][k],f[k+1][r]。这是一种不漏的划分方式(即所有可能方案均被考虑)所以状态转移方程为:f[i][j]=max(f[i][j],f[i][k]+f[k+1][r]+花费)花费原创 2021-05-25 22:33:41 · 89 阅读 · 0 评论 -
北京邮电大学复试上机题目-二进制
思路:字符串转换成十进制后分别做加法,然后转换成二进制即可。#include <iostream>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;void output(LL n){ for (int i = 32; i >= 0; i -- ) { int t = n >> i &.原创 2021-05-24 23:16:19 · 119 阅读 · 0 评论 -
北京大学研究生复试题--谁是你的潜在朋友
思路:模拟即可#include<iostream>using namespace std;const int N = 220;int like[N];int cnt[N];int n,m;int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ cin>>like[i]; cnt[like[i]]++; } for(int i=1.原创 2021-05-18 22:23:19 · 73 阅读 · 0 评论 -
单调栈及其应用--求直方图最大面积
单调栈单调栈一般用于求某个数列中左边第一个比他小的数是什么看一个例子3 4 2 7 5假设如果不存在左边比它小的数 则为-1第一个数左边没有数 为 -1第二个数左边第一个比它小的数是 3同理每个数对应左边第一个比他小的数构成的数组为-1 3 -1 2 2我们来看第四个数7 7左边最小的数是2 那么2左边比它大的数是不是可以删去?答案是肯定的 因为2此时就是最优解 左边如果成立 那么2必然成立 所以比2大的数在左边属于无效数字 所以删去 只留下比2小的数 所以最终的数列一定是单调原创 2021-05-17 22:38:08 · 167 阅读 · 1 评论 -
LeetCode第241场周赛题解
思路:递归指数型枚举,然后判断每一种方案的异或和 相加即可。const int N = 110;bool st[N];class Solution {public: int res=0; int n=0; void dfs(int u,int sum,vector<int>& num){ if(u==n){ int temp=0; for(int i=0;i<n;i++){ .原创 2021-05-16 21:29:50 · 92 阅读 · 0 评论 -
PTA 2021CCCC天梯赛部分题解
PTA天梯赛L1 图片与测试样例均来自acwing#include<iostream>using namespace std;int main(){ cout<<"To iterate is human, to recurse divine."<<endl; return 0;}#include<iostream>using namespace std;int main(){ int n,m,k; cin&原创 2021-05-05 22:27:28 · 420 阅读 · 0 评论 -
Leetcode周赛(266)
class Solution {public: int countBalls(int lowLimit, int highLimit) { int res=-1; vector<int> s(50); for(int i=lowLimit;i<=highLimit;i++){ int x = i; int sum=0; while(x){ .原创 2021-01-31 21:46:43 · 103 阅读 · 0 评论 -
郑州轻工业大学OJ-zznuoj-1155-简易版最长序列
思路 双指针扫描 将数存到数组中 遍历时双指针扫描每个数后面有多少个数与他相等,记录然后与答案取max,记得开long long。参考代码:#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#include<vector>using namespace std;const int N = 10010;long long a[N];int.原创 2021-01-24 17:51:03 · 440 阅读 · 0 评论 -
郑州轻工业大学OJ-zznuoj-1008-美元和人民币
#include<stdio.h>int main(){ double n; scanf("%lf",&n); printf("%.2lf\n",n*6.5573); return 0;}原创 2021-01-24 17:48:19 · 871 阅读 · 0 评论 -
郑州轻工业大学OJ-zznuoj-1007-鸡兔同笼
解法…推公式#include<stdio.h>int main(){ int n,m,x,y; scanf("%d%d",&m,&n); y=n/2-m; x=m-y; printf("%d %d\n",x,y); return 0;}原创 2021-01-24 17:34:18 · 977 阅读 · 0 评论 -
二分查找-分巧克力(蓝桥杯),剪绳子(头条面试题)
二分查找使用二分查找可以使时间复杂度由n变为nlogn但必须有条件 单调性 和 二段性单调性是指答案区间的值从小到大或者从大到小二段性指对于任何一个值 他的左半边必然成立 右半边必然不成立 或者 左半边必然不成立 右半边必然成立 根据题目具体分析对于下题来说 2.50左边的所有绳子长度 都可以 但2.50是最大的 2.5右边均不成立所以可以搜索所有答案 判断当前值成立与否 成立则右半边有可能有更优解 二分处理右半边若不成立 则说明该点不正确 正确区间一定在其左半边 所以二分处理左半边。原创 2021-01-17 18:56:44 · 307 阅读 · 0 评论 -
进制转换-回文平方
题目选自usaco方法 模b取余法,与传统二进制求法类似 只不过把模2改成模b注意 取完模后的结果是倒叙的 需要将其反过来才是b进制的结果。判断是否回文双指针扫描即可。#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;const int N = 300;int b;char get(int c){原创 2021-01-14 23:13:54 · 108 阅读 · 0 评论 -
郑州轻工业大学OJ-zznuoj-1006
求出一共多少项 循环相加求和#include<stdio.h>int main(){ int a,b,c; scanf("%d%d%d",&a,&b,&c); int res=a; int d=(b-a)/c; int t=a; for(int i=0;i<d;i++){ t+=c; res+=t; } printf("%d\n",res); return 0; }原创 2021-01-12 23:53:47 · 1463 阅读 · 0 评论 -
郑州轻工业大学OJ-zznuoj-1005
#include<stdio.h>int main(){ int a,b,c; scanf("%d%d%d",&a,&b,&c); printf("%-9d%-9d%-9d\n",a,a*a,a*a*a); printf("%-9d%-9d%-9d\n",b,b*b,b*b*b); printf("%-9d%-9d%-9d\n",c,c*c,c*c*c); return 0;}原创 2021-01-12 23:46:41 · 1447 阅读 · 0 评论 -
宽度优先搜索BFS-红与黑
宽搜BFS常用于求最短距离也可用于统计走过点的数量,这种情况下dfs也是可以的(如下题)做法:找到起点 加入队列 每一次从队列取出队头元素,删除,然后将此元素周围的点加入到队列,如果不符合要求则跳过(continue),直到遍历完所有的点。存储类似于下图的题目可以用结构体保存x,y坐标,也可以采用c++ 中的pair存储,更加方便。#include<iostream>#include<cstdio>#include<algorithm>#includ原创 2021-01-12 23:38:04 · 165 阅读 · 2 评论 -
zznuoj-1004
注意题目要求,最后一个数后不能由空格,我的做法是把每一位存入一个数组中,然后输出,这要求和PAT好像。#include<stdio.h>int n;int a[5];int main(){ scanf("%d",&n); int cnt=0; while(n){ a[cnt++]=n%10; n/=10; } printf("%d",a[0]); for(int i=1;i<cnt;i++){ printf(" %d",a[i]); } ..原创 2021-01-11 23:36:04 · 718 阅读 · 1 评论 -
zznuoj-1003
#include<stdio.h>int n,m;int main(){ scanf("%d%d",&n,&m); printf("%d %d %d %d %d\n",n+m,n-m,n*m,n/m,n%m); return 0;}原创 2021-01-11 23:26:33 · 1173 阅读 · 0 评论 -
背包问题-完全背包
背包问题-完全背包模型完全背包问题是背包九讲中非常经典的问题,与01背包的差别就是每个物品可以选择多次。使用滚动数组压缩也不难理解简单来说就是f[i][j]=max(f[i-1][j],f[i-1][j-w]+v);这个递推方程中f[i]只与f[i-1]有关 那么就可以把这一维约掉,但约掉的同时要保证f[i]的状态一定是由f[i-1]转移过来的,这可以利用第二重循环去控制,手动模拟一下就可以了。01背包第二重循环倒着来,完全背包正着来就可以。证明有一定难度 大家可以自行掌握,从竞赛角度来说记住就有原创 2021-01-11 23:21:08 · 137 阅读 · 1 评论 -
动态规划-数字三角形模型
本次分享动态规划模型中的数字三角形模型动态规划做法和新就是找到状态标识和状态转移方程状态的寻找一般从题目中获得,每一个状态对应数组的一个维度分析状态转移方程一般从最后一步去看,这样比较好推出方程所谓最后一步就是指第n-1中状态到第n中状态的转移过程,推出后进而推出所有先看引例题目分析:状态表示:从题目中获得,最上层节点走到最下层节点的最大路径,每一种走法所经过的每个点对应两个状态,x,y坐标,分析出这两个状态来源于如何将数字三角形存储下来,很明显二维矩阵,分别对应x,y坐标----&原创 2021-01-10 20:12:01 · 2189 阅读 · 3 评论 -
第三届“传智杯”全国大学生IT技能大赛(初赛B组)题解
传智杯还是很适合新手的~~~ 对 我就是第二的混子 完全是诈胡QAQ萌新的我还是发一下题解吧A 题模拟 不说~~#include<iostream>using namespace std;int n,v,m,a;int main(){ long long res=0; cin>>n>>v>>m>>a; int cnt=0; while(n--){ res+=v; cnt++; if(cnt==m原创 2020-12-22 15:25:06 · 1071 阅读 · 2 评论 -
算法-数论1
1.筛质数例题:给定一个正整数n,请你求出1~n中质数的个数。输入格式共一行,包含整数n。输出格式共一行,包含一个整数,表示1~n中质数的个数。数据范围1≤n≤106输入样例:8输出样例:4方法一:埃式筛法void get_primes1(){ for(int i=2;i<=n;i++){ if(!st[i]){ p...原创 2020-04-04 08:24:12 · 271 阅读 · 0 评论 -
快速排序,归并排序模板
快速排序#include<iostream>using namespace std;const int N = 100010;int q[N];int n;void quick_sort(int q[],int l,int r){ if(l>=r) return; int x=q[l + r >>1]; int i=l-1; ...原创 2020-03-01 17:12:39 · 408 阅读 · 1 评论 -
图论-最小生成树kruskal算法
算法基本思想:贪心按照边权从小到大排序,通过并查集进行合并和查找操作。例题给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible。给定一张边带权的无向图G=(V, E),其中V表示图中点的集合,E表示图中边的集合,n=|V|,m=|E|。由V中的全部n个顶点和E中n-1条边构成的无向连通子图被称为...原创 2020-02-13 20:07:45 · 166 阅读 · 0 评论 -
图论-Floyd算法
Floyd号称可以用5行代码解决问题的算法思想为动态规划例题给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。再给定k个询问,每个询问包含两个整数x和y,表示查询从点x到点y的最短距离,如果路径不存在,则输出“impossible”。数据保证图中不存在负权回路。输入格式第一行包含三个整数n,m,k接下来m行,每行包含三个整数x,y,z,表示存在一条从点x到点y...原创 2020-02-12 23:07:42 · 235 阅读 · 0 评论 -
图论-spfa算法判断负环
原理若存在负环,则迭代玩所有点后边数>=图中点的个数,根据抽屉原理,若edge>=point->图中应当有point+1个点,与point个点矛盾,所以存在负环.例题给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你判断图中是否存在负权回路。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边...原创 2020-02-11 20:06:47 · 546 阅读 · 1 评论 -
图论-最短路之bellman-ford队列优化spfa算法
SPFASPFA(Shortest Path Faster Algorithm)算法是求单源最短路径的一种算法,它是Bellman-ford的队列优化,它是一种十分高效的最短路算法。很多时候,给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。SPFA的复杂度大约是O(kE),k是每个点的平均进队次数(一般...原创 2020-02-10 17:21:04 · 210 阅读 · 0 评论 -
图论-最短路算法2 bellman-ford
Bellman-Ford算法思路对图中每条边进行松弛操作,依此遍历每条边,遍历完成即可得出最短距离注意事项bellman-ford算法可以判断负环。注意代码中backup数组的使用,防止串联。主要适用于有判断次数的题目例题给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出从1号点到n号点的最多经过k条边的最短距离,如果无法从1号点走到n号点,输出im...原创 2020-02-08 23:41:44 · 150 阅读 · 0 评论 -
图论-最短路dijsktra算法1
最短路算法值dijkstra算法基础思想:贪心缺点:无法处理负权边。算法步骤:1.初始化距离数组dist为0x3f3f3f3f,初始化邻接矩阵为0x3f3f3f3f2.从第一个定点开始寻找,每次选择与当前未选择的点的集合中距离最短的点。3.选择该点后更新访问数组st为true4.更新与该点连接的点的距离。重复上述操作直到将所有点访问完毕。例题:给定一个n个点m条边的有向图,...原创 2020-02-06 17:59:56 · 218 阅读 · 0 评论 -
背包问题汇总2(分组背包,背包问题求方案数)
分组背包问题背包问题上加一层循环就可以了,最外层控制第几组,最内层循环依此遍历第i组所有物品的信息。样例题目:有 N 组物品和一个容量是 V 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 ...原创 2019-12-29 21:19:13 · 584 阅读 · 0 评论 -
背包问题汇总1(01背包,完全背包)
#背包问题*背包问题是动态规划算法中最经典的问题,掌握好背包问题基本上动态规划也算入门了,本篇博客对动态规划算法的理论知识不予阐述,我们通过例子去掌握应用,反过来再去看概念想必无师自通了。~~~~*##01背包问题题目描述有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过...原创 2019-12-28 22:42:05 · 218 阅读 · 0 评论