《算法笔记上机实验指南》
算法笔记上机实验指南
wsfhdhjs
这个作者很懒,什么都没留下…
展开
-
pat甲级 字符串处理
A1153#include<iostream>#include<vector>#include<algorithm>#include<map>using namespace std;const int maxn=10010;int n,m;struct node{ string name; int grade;}Node[maxn];bool cmp(node a,node b){ if(a.grad原创 2020-12-02 19:29:42 · 67 阅读 · 0 评论 -
pat甲级 高精度
A1136#include<iostream>#include<vector>using namespace std;string a;bool check(vector<int> A){ for(int i=0,j=A.size()-1; i<j; i++,j--) if(A[i]!=A[j]) return false; return true;}void print(vector&l原创 2020-12-01 16:58:38 · 91 阅读 · 0 评论 -
pat甲级 树
A1151#include<iostream>#include<map>using namespace std;const int maxn=10000;int n,m;int seq[maxn],in[maxn],pre[maxn],p[maxn],depth[maxn];map<int,int> pos;int build(int preL,int preR,int inL,int inR,int d){ int root=pre[原创 2020-11-27 21:29:06 · 95 阅读 · 0 评论 -
pat甲级 图论
A1154#include<iostream>#include<unordered_set>using namespace std;const int maxn=10010;int n,m,k;struct node //设置边的结构,到时候通过访问两条边上的那个结点来判断颜色是相同?{ int a,b;}Node[maxn];int color[maxn];int main(){ cin >> n原创 2020-11-24 20:24:23 · 91 阅读 · 0 评论 -
pat 甲级 数学
A1152#include<iostream>using namespace std;string s;int n,k;bool isPrime(int x){ if(x==1) return false; for(int i=2; i*i<x; i++) { if(x%i==0) return false; } return true;}int main(){原创 2020-11-22 19:53:11 · 58 阅读 · 0 评论 -
pat甲级 哈希
#include<iostream>using namespace std;const int maxn=11111;int msize,n,m;int h[maxn];bool isPrime(int x){ if(x==1) return false; for(int i=2; i*i<=x; i++) if(x%i==0) { return false; }原创 2020-11-20 16:36:27 · 72 阅读 · 0 评论 -
pat甲级 并查集
#include<iostream>using namespace std;const int maxn=10010;int father[maxn];bool bird[maxn]={false};int n,Q;int findfather(int x) //问题就出现在这里,如果使用递归的方式寻找父亲结点会比使用while快速{ if(father[x]!=x) father[x]=findfather(father[x]);原创 2020-11-18 22:10:52 · 57 阅读 · 0 评论 -
pat甲级 模拟
顶点原创 2020-11-16 20:09:01 · 59 阅读 · 0 评论 -
pat甲级 贪心
A1125#include<iostream>#include<algorithm>using namespace std;/* 现在的题意是:将两个数字对折成一个 1.不能超过所给的最大长度*/const int maxn=10111;int n;double a[maxn];int main(){ cin >> n; int all=0; for(int i=0; i<n; i++)...原创 2020-11-16 17:10:09 · 42 阅读 · 0 评论 -
第十三章 链表
A1133#include<iostream>#include<vector>using namespace std;const int maxn=100010;int data[maxn],next1[maxn];int first,n,k;/* 题意:1.所有负数在正数前面 2.所有在0--k的数在大于0-k的数的前面 3.整个数就被分成3段:第1段负数 第2段是0--k中的数 第3段是大于k的数 *原创 2020-11-15 19:59:13 · 111 阅读 · 0 评论 -
pat甲级 包括枚举、前缀和、二分、Flood Fill,双指针、多路归并、堆、栈、单调栈
A1117/* 题意: 1.有e天的骑行距离都是大于e的,所求的e表示天数 2.e必须是最大的 注意事项: 1.不是从所给的数组中进行寻找,而可以说是从1--n都可以寻找,只要满足e个数大于e即可 解题思路: 倒数第e个数是否大于e*/#include<iostream>#include<vector>#include<algorithm>using namespace std;const原创 2020-11-15 17:15:13 · 105 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)第13章 专题扩展
A1057#include<cstdio>#include<cstring>#include<stack>#include<iostream>#include<string>using namespace std;/* 记住第k大和第k小是一样的,没有区别*/const int maxn=100010;const int sqrN=316; //sqrN表示每块中的最大数值,其实就是根号n,n表示数组大小原创 2020-10-21 19:32:05 · 102 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)第11章 动态规划
A1007#include<iostream>using namespace std;const int maxn=10004;int dp[maxn],s[maxn]={0},fac[maxn]; //搞她娘的数组s[i],表示以dp[i]结尾的最大连续子列初始的那个值的下标int n;int main(){ bool flag=true; cin >> n; for(int i=0; i<n; i++) {原创 2020-10-20 15:03:21 · 92 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)10.4最短路径
A1003/* 迪杰斯特拉算法: 1.对于距离而言: 都是从起点--各个点的最短路径,保存在一个数组中 2.对于最短路径条数而言: 从起点出发--各个点的最短路径条数,保存在一个数组中题目只是恰好问的是c2这个点对应的最短路径条数及最大的军队数,通过迪杰斯特拉算法得到的是每一个点的*/#include<iostream>#include<cstring>using namespace std;const int maxn=原创 2020-10-13 18:52:28 · 119 阅读 · 1 评论 -
《算法笔记-上机实验指南》 DFS
A1103#include<iostream>#include<vector>#include<cmath>using namespace std;vector<int> pre,temp,fac;int n,k,p,maxv=-1;int powl(int x){ int temp=1; for(int i=0; i<p; i++) temp*=x; return temp;}void原创 2020-10-09 15:49:35 · 83 阅读 · 0 评论 -
《算法笔记上机实验指南》 BFS
A1091#include<iostream>#include<queue>using namespace std;int data[1290][130][61];bool inq[1290][130][61]={false};//你知道这道题的意思是和例子是一样的,不过就是要求每一块中的数字之和大于T,并且输出满足要求的数字之和struct node{ int x; int y; int z;}Node;int ans=0;原创 2020-10-08 19:57:29 · 80 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)9.6 并查集
A1107/* 1.题意: 1.对于每个人,后面都是其兴趣编号 2.对于前3个人,没有共同兴趣,所以属于3个不同的集合 3.从第4个人开始,由于其兴趣编号为4,在2号人物时就已经喜欢兴趣4了,所以将4号人物与2号人物并联到一起以此类推,比如对于7号人物而言,其喜欢的兴趣5号,在3号人物时就已经喜欢了,所以将7号人物与3号人物并联,一共有3个集合,人数分别是4 3 1*/#include<iostream>#include<原创 2020-10-04 16:15:36 · 68 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)8.1
A1103:/* 南墙: 1.所选择的数的p次方之和==n+选择底数个数刚好为n 2.如果有最大的底数之和则更新 3.然后返回空 分支: 1.不用访问0那个数 2.选择加入:价将底数index加入到临时数组vector中,然后DFS,index就是当前加入到临时数组temp中的那个数,同时总的 选的数字个数要改变 选择的数的p次方之和要改变 总的和也要改变 3.选择不加入:将刚才那个放入数组中原创 2020-09-24 19:28:54 · 285 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)10.3图的遍历---算法初步
A1097题意:图的遍历法求联通块:/* 1.问题的实质就是:求无向图中所需要添加的边数,使其成为连通图;然后需要添加的边数是连通块数-1,所以问题 转化为求连通块数,求连通块数有两种方法:1.图的深度遍历(由于是无向图所以必须要双向存储) 2.并查集(必须压缩路径)*//*图的dfs方法:(用邻接表) 1.设置vector数组 G;bool类型数组 vis 2.设置删除顶点编号 3.void 类型 dfs函数 形参为int类型 v当前访问的顶点原创 2020-09-09 12:20:51 · 118 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 9.7堆
A1098参考代码:#include<iostream>#include<algorithm>using namespace std;const int maxn=101;int origin[maxn],tempOri[maxn],changed[maxn],n;void showArray(int A[]){ for(int i=1; i<=n; i++) { if(i!=1) cout <&原创 2020-09-06 12:18:18 · 113 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 9.5平衡二叉树(AVL)
pat A1043题意:解题思路://设置结点结构:int类型 v,height, 左右孩子指针/* 生成一个新结点,v为权值 node函数类型 指针 newNode ,形参为int类型v 1.用new申请一个node类型 指针 Node 2.将权值放到v中 3.结点高度初始化为1 4.左右孩子均设置为空 5.返回新建的结点*//* 获取以root为根结点的子树的当前height原创 2020-08-13 21:29:33 · 94 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 9.4二叉树查找
pat A1043题意:解题思路:参考代码:#include<iostream>#include<vector>using namespace std;struct node{ int data; node *left; node *right;};/* 这道题整体的思路是: 1.先将输入的数字放到<vector>类型origin数组中,然后按照二叉树的方式建树 2.在直接对构造的数进行 先序遍历原创 2020-08-11 20:00:15 · 112 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 9.3树的遍历
pat A1079题意:解题思路:重点还是在于树的一个深度搜索参考代码:/* 解题思路: 1.静态树+DFS 2.设置库函数+结构体+变量 3.DFS深度遍历:形参:int类型 index depth 1.递归的思路 2.如果结构数组中index下的孩子的长度为0表示到达叶节点,然后累加货物的数量*单价的比率(叶子结点的值*概率(其中概率是比率的深度次幂))并且结束函数 3.for循环按照当前结点,递归DFS,原创 2020-08-05 21:00:39 · 221 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 9.2二叉树的遍历
pat A1086题意:解题思路:参考代码:#include<iostream>#include<stack>using namespace std;/* 所有的出栈和入栈都是按照:左 中 后 他还是按照从上到下的结构建树的 后序遍历非常好 如何建树? 聪明的小伙王少锋知道了,其实按照题目中的顺序输入只不过是将一个数组按照前序遍历的方式将其放到树中*/int n;const int maxn=31;int pre[m原创 2020-08-03 20:21:28 · 119 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 7.3 链表处理
pat A1074解题思路:参考代码:#include <iostream>#include <algorithm>using namespace std;/* 解题思路: 1.list存放数字的下标,data存放具体的数字,这两个数组是完全对应的 2.以address为数组下标,对应输入data和next 3.通过while将 以题中所给的初始地址 所构成的正确数组顺序 4.通过for来扭转数组 5.输出扭转后的下标(原创 2020-07-23 22:18:30 · 101 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 7.1栈的应用
pat A1051参考代码:#include<iostream>#include<stack>using namespace std;const int maxn=1010;int arr[maxn]; //保存题目给定的出栈序列stack<int> st; //定义栈st,用以存放int型元素/* 解题思路: 1.输入mnt 2.根据t的个数进行遍历循环 1.将栈清空 2.输入要判断的数原创 2020-07-21 21:46:25 · 97 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 7.2队列的应用
pat A1051题意:输入: 1.输入m表示栈的最大容量 2.输入n,表示顺序将1~n压入栈 3.输入k,表示有k个测试数据输出: 如果给出的数列顺序是能从栈中出来的则输出yes,否则no 注意这个出栈顺序对应的输出数组从头开始的顺序,比如,对于第1个例子,压入1,然后弹出,压入2,弹出2那么就对应上数组1234567解题思路:参考代码:#include<iostream>#include<cstring>#include<stack>#原创 2020-07-17 22:52:25 · 99 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 5.6大整数运算
pat A1023题意:输入: 1.输入一个大整数输出: 1.将他翻倍然后看其每个数字位数是否与原数列一致解题思路:参考代码:#include<cstdio>#include<cstring>#include<iostream>using namespace std;/* 解题思路: 1.肯定是有大整数乘法的所有包含函数:1.结构 2.change 3.相乘multi 2.最重要的是Judge判断函数,如果翻倍的数的每原创 2020-07-08 23:15:03 · 134 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 5.5质因子分解
pat A1096题意:输入: 1.输入n输出: 1.先输出最大连续因子的个数2.依次连续输出最小的连续因子解题思路:参考代码:#include<iostream>#include<cmath>typedef long long LL;using namespace std;/* 解题思路: 1.一个数不会除了自身外不会被超过根号n的数整除,所以从2--根号n循环 2.从2--根号n开始循环for+while的循环:1.for:遍原创 2020-07-04 18:32:56 · 85 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 5.4 素数
pat A1015题意:输入: 1.输入n,d 2.如果单独输出一个负数则结束循环输出: 1.判断n是否为素数,将n在d进制下反转后在化为10进制数后任为素数,就输出yes,否则输出no解题思路:参考代码:#include<iostream>#include<cmath>using namespace std;/* 解题思路: 1.先判断n是否为素数 2.如果n为素数,在用do-while语句求出n的指定基数radix的数放到数组中原创 2020-06-29 22:57:18 · 88 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 5.3 分数的四则运算
pat A1081题意:输入: 1.输入n个数字 2.后面紧接着输分数入n个输出: 输出n个分数之和,注意输入方式按照下图中所示的分数形式输出/////////////////注意这里欠张notability上的图解题思路:参考代码:#include<iostream>#include<algorithm>using namespace std;typedef long long ll;/* 解题思路: 1.gcd辗转相除函数原创 2020-06-25 21:33:40 · 142 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 5.1 简单数学
pat A1104题意:输入输出:解题思路:参考代码:#include<iostream>using namespace std;/* 解题思路: 1.这道题是每个数字出现的次数为,i表示第i次出现,i从1开始 2.一个数字出现的次数为i*(n+1-i)*/int main(){ double temp,sum=0; int n; scanf("%d",&n); for(int i=1; i<=n;原创 2020-06-23 19:30:20 · 105 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 4.7 其他高效技巧与算法
pat A1101题意:输入输出:解题思路:参考代码:#include<iostream>#include<algorithm>using namespace std;const int MAXN=100010;const int INF=0x3fffffff; //一个很大的数int a[MAXN],leftMax[MAXN],rightMin[MAXN];int ans[MAXN],num=0;/* 原理: 1.找出每一位左边最大数,原创 2020-06-22 19:01:12 · 106 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 4.6 two pointers
pat A1085生词:题意:在一个数组中,满足max<=min*p的数组个数的最大值输入:<fontcolor=#F0F8FF size=5 face=“黑体”> 1.输入n个数字和p输出: 满足最大值<=最小值*P的序列中个数最多的个数解题思路1:1.设置n的上界maxn=100010,定义n,p,a[maxn]为全局变量2.i,j分别表示前后遍历数组a的下标,根据题意可知a[j]<=a[i]*p,并且要求j-i最大3.利用二分的思想:找出从i+原创 2020-06-16 21:54:15 · 233 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 4.5二分
pat A1085生词:sequence 一连串parameter 范围题意:输入: 1.输入n个数字和p输出: 满足最大值<=最小值*P的序列中个数最多的个数解题思路1:1.设置n的上界maxn=100010,定义n,p,a[maxn]为全局变量2.i,j分别表示前后遍历数组a的下标,根据题意可知a[j]<=a[i]*p,并且要求j-i最大3.利用二分的思想:找出从i+1~n-1这个范围内找出第一个比a[i]*p大的数字的下标j(其实真正满足a[j]<=a原创 2020-06-08 23:11:26 · 252 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 4.4贪心
pat A1084题意:输入: 1.输入月饼种类数,和市场需求量输出: 1.输出最大收益解题思路:参考代码:#include<iostream>#include<algorithm>using namespace std;/* 解题思路: 1.设置结构数组,里面有3个成员,分别是库存量,总售价,单价 2.先输入,然后计算出单价,按照单价的递减顺序进行排列 3.for循环遍历结构数组,如果需求量大于库存量,直接ans累加售价,然后原创 2020-05-28 23:11:22 · 148 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 4.2散列
pat A1084题意:输入: 1.输入字符串s1,s2输出: 1.输出s2中没有s1的字符,并且必须是大写,且不能重复解题思路:1.第1部分:找出s1中有但是s2中没有的,同时转化为大写字符放到字符串s中2.第2部分:消除相同的参考代码:#include<iostream>#include<string>using namespace std;/* 解题思路: 1.第1部分:找出s1中有但是s2中没有的,同时转化为大写字符放到字符串原创 2020-05-25 23:11:48 · 164 阅读 · 0 评论 -
《算法笔记上机实验指南》第4章 入门篇(2)---算法初步 4.1排序
pat A1012单词:Each input file contains one test case. 每个输入文件包含一个测试用例corresponding 相应的separated by a space 空格隔开Hence 所以题意:输入: 1.输入n,m 2.输入n个学生的id C M E(学生编号,C语言成绩,数学成绩,英文成绩) 3.输入m个要查询的学生id输出: 1.对应 2.输出学生编号,总排名,考场位置,数组在考场内的排名 3.排名原则:成绩不同,降序排原创 2020-05-14 00:20:18 · 607 阅读 · 0 评论