天梯赛题目练习
我将在这个专栏中分享自己在准备天梯赛的过程中所练习的部分习题
此杭非彼航
凡是过往,皆为序章
展开
-
多项式A除以B(PTA)
多项式A除以B题目答案参考总结题目答案#include<iostream>#include<math.h>using namespace std;const int maxn=10005;float a[maxn];int b1[maxn];float b2[maxn];float c[maxn];int main(){ int n1,first; cin>>n1; for(int i=0;i<n1;i++) { int tmp;原创 2021-05-04 17:00:01 · 2801 阅读 · 4 评论 -
排序(使用sort函数)
排序题目答案题目答案#include<iostream>#include<algorithm>using namespace std;int main(){ int n; cin>>n; int a[n]; for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); int flag=1; for(int i=0;i<n;i++) { if(flag) flag=0; el原创 2021-04-22 21:29:17 · 69 阅读 · 2 评论 -
关键活动(注释超详细!!!)
关键活动题目答案总结题目答案#include<iostream>#include<queue>#include<vector>#include<set>using namespace std;struct Node{ int node,time; Node(int a,int b):node(a),time(b){ }};//后继节点 struct S{ int x,y,cnt; S(int a,int b,int c):x(原创 2021-04-22 21:19:14 · 1473 阅读 · 2 评论 -
社交网络图中结点的“重要性”计算(使用Dijkstra算法)
社交网络图中结点的“重要性”计算题目答案注意题目答案#include<iostream>#include<cstring>using namespace std;#define inf 0x3f3f3f3fint map[1001][1001],dis[1001],vis[1001];int n,m;void init(){ memset(map,inf,sizeof(map)); cin>>n>>m; for(int i=1;原创 2021-04-22 17:13:57 · 703 阅读 · 5 评论 -
城市间紧急救援(dijkstra算法)
城市间紧急救援题目答案注意题目答案#include<iostream>#include<cstring>using namespace std;#define inf 0x3f3f3f3fint map[501][501],vis[501],init_num[501],max_num[501],dis[501],root[501],cnt[501];int n,m,start,last;void init(){ memset(root,-1,sizeof原创 2021-04-22 13:57:41 · 243 阅读 · 2 评论 -
旅游规划(Dijkstra算法)
旅游规划题目答案总结题目答案#include<iostream>#include<cstring>using namespace std;#define inf 0x3f3f3f3fint map[501][501],cost[501][501],dis[501],mcost[501],vis[501];int n,m,start,last;void init(){ memset(map,inf,sizeof(map)); memset(cost,inf原创 2021-04-21 20:56:26 · 828 阅读 · 0 评论 -
公路村村通(含注释)
公路村村通题目答案注意题目答案#include<iostream>#include<cstring>using namespace std;#define inf 0x3f3f3f3fint graph[1001][1001],n,m;int vis[1001],dis[1001],sum=0;void init()//初始化赋值 { memset(graph,inf,sizeof(graph)); memset(vis,1,sizeof(vis));原创 2021-04-21 19:46:59 · 336 阅读 · 0 评论 -
六度空间(使用vector,queue以及bfs)
六度空间 题目答案注意题目答案#include<iostream>#include<algorithm>#include<vector>#include<cstring>#include<queue>using namespace std;vector<int> vec[1001];int vis[1001];float bfs(int root)//按层遍历 { queue<int> q;原创 2021-04-20 19:22:32 · 132 阅读 · 0 评论 -
地下迷宫探索(后两个测试点无法通过?这里有你想要的答案)
地下迷宫探索题目答案总结题目答案#include<iostream>#include<algorithm>#include<vector>#include<cstring>using namespace std;vector<int> vec[1001],t;int vis[1001],cnt=0;void dfs(int tmp){ if(vis[tmp]==0) { vis[tmp]=1; t.push原创 2021-04-20 14:10:57 · 208 阅读 · 5 评论 -
PTA——哥尼斯堡的“七桥问题(出现运行超时?不妨进来看看)
哥尼斯堡的“七桥问题题目答案题目答案#include<iostream>#include<vector>#include<cstring>using namespace std;int pre[1005],n,m;vector<int> vec[1005];int Find(int x){ if(pre[x]==-1) return x; else return pre[x]=Find(pre[x]);}void comb原创 2021-04-20 13:08:10 · 2068 阅读 · 4 评论 -
字符串关键字的散列映射(这些情况你注意到了吗?)
字符串关键字的散列映射题目答案注意题目答案#include<iostream>#include<algorithm>#include<cstring>#include<map>using namespace std;int main(){ map<string,int> maps; int a[100005],vis[100005]; memset(a,0,sizeof a); memset(vis,0,sizeof原创 2021-04-18 21:26:27 · 196 阅读 · 1 评论 -
整型关键字的散列映射
整型关键字的散列映射题目答案文章参考注意题目答案#include<iostream>#include<cstring>using namespace std;int main(){ int a[100005],b[100005],vis[100005],flag=0; memset(a,0,sizeof a); memset(b,0,sizeof b); memset(vis,0,sizeof vis); int n,p; cin>>n>原创 2021-04-18 20:25:06 · 159 阅读 · 1 评论 -
笛卡尔树(注释超详细!!!)
笛卡尔树题目答案总结题目答案#include <cstdio>#include <queue>#include <vector> using namespace std;typedef struct { int key1; int key2; int left; int right;} Node;//创建结构体 //准备阶段 Node node[1010];//创建结构体数组用以储存输入的节点 in原创 2021-04-13 16:55:20 · 248 阅读 · 2 评论 -
PTA目录树(使用字典树)
目录树题目答案总结题目答案#include<iostream>#include<algorithm>//使用sort函数#include<cstring>//使用字符串相关函数using namespace std;//定义常量const int N = 500;//创建结构体typedef struct node{ char name[N];//名字 int dir;//是否为目录,1是,0不是 int num;//拥有的目录和文件总和原创 2021-04-12 16:22:12 · 626 阅读 · 1 评论 -
修理牧场(使用优先级队列解决哈夫曼树问题)
修理牧场题目答案总结题目答案#include<iostream>#include<queue>using namespace std;int main(){ priority_queue<int,vector<int>,greater<int> > q; int n,tmp; cin>>n; while(n--) { cin>>tmp; q.push(tmp); } int sum=0;原创 2021-04-11 19:09:02 · 305 阅读 · 2 评论 -
搜索树判断(使用递归和队列queue)
搜索树判断题目答案总结题目答案#include<iostream>#include<queue>using namespace std;int a[1001];queue<int> q;bool dfs(int l,int r,int flag){ if(l>r) return true; int root=a[l]; if(flag) { for(int i=l+1;i<=r;i++) { if(a[i]>原创 2021-04-11 17:26:17 · 170 阅读 · 2 评论 -
家谱处理——使用vector和map,72行搞定!
家谱处理题目答案总结题目答案#include<iostream>#include<vector>#include<map>using namespace std;int a[101],fa[101];//数组a储存临时父辈,fa储存实际父辈,后面会涉及 map<string,int> maps;vector<int> vec[101];//定义vector容器的数组 bool dfs(int a,int b)//广度优先原创 2021-04-10 21:36:09 · 178 阅读 · 4 评论 -
Windows消息队列(PTA)——使用优先级队列priority_queue
Windows消息队列题目答案总结初始思路:链表(超时)代码分析最终思路:优先级队列(成功通过)题目答案#include<iostream>#include<queue>using namespace std;struct order{ char name[20]; int rank; bool operator <(const order &a)const { return rank>a.rank; }};priority_qu原创 2021-04-10 16:43:54 · 408 阅读 · 6 评论 -
PTA朋友圈(使用并查集)
朋友圈题目答案总结题目答案#include<iostream>#include<algorithm>using namespace std;int a[30001],vis[30001],n,m;void init()//初始化{ for(int i=1;i<=n;i++) { a[i]=i; vis[i]=1; }}int find(int tmp)//寻找根节点{ while(tmp!=a[tmp]) tmp=a[tmp];原创 2021-04-10 14:19:50 · 678 阅读 · 7 评论 -
树种统计(使用map)
树种统计题目答案注意题目答案#include<iostream>#include<map>using namespace std;int main(){ int n; cin>>n; map<string,double> s; getchar(); for(int i=0;i<n;i++) { string tmp; getline(cin,tmp); s[tmp]++; } for(auto start=原创 2021-04-09 12:11:28 · 235 阅读 · 4 评论 -
还原二叉树(PTA)
还原二叉树题目答案注意最后题目答案#include<iostream>#include<malloc.h>using namespace std;char pre[50],mid[50];typedef struct Tree* tree;struct Tree{ char data; tree left,right;};tree build_tree(int root,int start,int end){ if(start>end) retur原创 2021-04-08 21:39:36 · 3765 阅读 · 6 评论 -
顺序存储的二叉树的最近的公共祖先问题
顺序存储的二叉树的最近的公共祖先问题题目答案注意题目答案#include<iostream>using namespace std;int a[1001];int main(){ int n; cin>>n; int i,j; for(i=1;i<=n;i++) cin>>a[i]; cin>>i>>j; if(a[i]==0) printf("ERROR: T[%d] is NULL",i); else i原创 2021-04-08 20:48:16 · 294 阅读 · 0 评论 -
堆中的路径(35行代码搞定)
堆中的路径题目答案注意题目答案#include<iostream>using namespace std;int size=0;int a[1001];void insert(int tmp){ int i; for(i=++size;tmp<a[i/2];i/=2) a[i]=a[i/2]; a[i]=tmp;}int main(){ a[0]=-10001; int n,m,tmp; cin>>n>>m; int i;原创 2021-04-08 20:06:58 · 91 阅读 · 2 评论 -
平衡二叉树的根(简化版)
平衡二叉树的根题目答案声明题目答案#include<iostream>#include<malloc.h>using namespace std;typedef struct node* avl;struct node{ int data; avl left,right;};int GetHeight(avl a)//获取高度 { if(!a) return 0; else { int l=GetHeight(a->left); int原创 2021-04-07 21:42:36 · 1004 阅读 · 4 评论 -
根据后序和中序遍历输出先序遍历(c++)
根据后序和中序遍历输出先序遍历题目答案总结题目答案#include<iostream>#include<malloc.h>using namespace std;struct Tree{ int data; struct Tree *left; struct Tree *right;};int after[40],mid[40];struct Tree *buildTree(int root,int start,int end){ if(start&原创 2021-04-06 20:58:01 · 969 阅读 · 1 评论 -
堆栈模拟队列(c++)
堆栈模拟队列题目答案参考题目答案#include<iostream>#include<algorithm>#include<stack>using namespace std;int main(){ stack<int> a; stack<int> b; int maxa,maxb; cin>>maxa>>maxb; if(maxa>maxb) swap(maxa,maxb); cha原创 2021-04-05 21:43:01 · 367 阅读 · 2 评论 -
求前缀表达式的值(熟练使用atof和c_str函数——最简单的将浮点数压入栈的方法)
求前缀表达式的值题目答案注意题目答案#include<stdio.h>#include<stack>#include<math.h>#include<string>#include<iostream>using namespace std;int main(){ string a[100]; int n=0,i,flag=0; stack<double> s; while(cin>>a[原创 2021-04-05 20:47:21 · 328 阅读 · 0 评论 -
求链式线性表的倒数第K项(两种方法,第二种较好)
求链式线性表的倒数第K项题目答案第一种解法第二种解法(较好)注意题目答案第一种解法这种方法是正常输入,然后将链表逆置,虽然pta是可以通过的(写数组应该都能通过),但明显没有下一种好#include<stdio.h>#include<malloc.h>struct Node{ int data; struct Node *next;}; int main(){ struct Node *node,*temp,*p,*head,*older,*news;原创 2021-04-05 18:39:43 · 12638 阅读 · 6 评论 -
银行业务队列简单模拟(c语言)
银行业务队列简单模拟题目答案题目答案#include<stdio.h>int main(){ int n; scanf("%d",&n); int a[n],b[n],i,j=0,k=0,tmp; for(i=0;i<n;i++) { scanf("%d",&tmp); if(tmp%2==1) a[j++]=tmp; else b[k++]=tmp; } int count=0,t=0,flag=0; for(i=0;i<j;原创 2021-04-04 21:57:12 · 3620 阅读 · 2 评论 -
一元多项式求导(注意无输出的情况)
一元多项式求导题目答案注意题目答案#include<stdio.h>int main(){ int num,x,flag=0; char s; while(1) { if(s=='\n') break; scanf("%d %d",&num,&x); if(x!=0) { if(flag==0) { printf("%d %d",num*x,x-1);flag=1; } else printf(" %d %d"原创 2021-04-04 21:39:00 · 79 阅读 · 0 评论 -
表达式转换(测试点)
表达式转换题目答案详细测试点题目答案#include<stack>#include<stdio.h>using namespace std;int main(){ stack<char> s; char str[100]; int flag=0; scanf("%s",str); for(int i=0;str[i];i++) { if((str[i]=='-'||str[i]=='+')&&i==0) printf("原创 2021-04-04 21:21:11 · 585 阅读 · 0 评论 -
汉诺塔的非递归实现(使用c++堆栈stack实现)
汉诺塔的非递归实现题目答案问题总结题目答案#include<stack>#include<iostream>using namespace std;struct node{ int n,a,b,c; node(int m,int x,int y,int z):n(m),a(x),b(y),c(z){}}; int main(){ int n; cin>>n; stack<node> s; s.push(node(n,'a','b原创 2021-04-04 17:51:29 · 707 阅读 · 0 评论 -
堆栈操作合法性(附带问题总结)
堆栈操作合法性题目答案问题总结题目答案#include<stdio.h>int top=0;void pop(){ top--;}void push(){ top++;}int main(){ int n,max,i,j,flag=0; scanf("%d %d",&n,&max); getchar(); char str[200]; for(i=0;i<n;i++) { gets(str); for(j=0;str[j];原创 2021-04-04 16:58:53 · 1444 阅读 · 0 评论 -
符号配对——遇到bug无法解决?可以进来看看(附赠做题方法良心总结)
符号匹配题目答案测试点参考问题总结(关键)问题1遇到问题一该怎么办当你决定参考这位博主的文章后,我再说几个我遇到的问题:问题2问题3问题4:问题5问题6总结做题方法尾声题目答案#include<stdio.h>int pos=-1;int top=-1;char topp(char str[]){ return str[top];}void pop(){ top--;}void push(char stack[],char tmp){ stack[++top]原创 2021-04-04 15:40:56 · 353 阅读 · 7 评论 -
一元多项式的乘法与加法运算(代码较长,等待优化中)
一元多项式的乘法与加法运算题目答案注意题目答案#include<stdio.h>int main(){ int n1,n2; scanf("%d",&n1); int a[10000][2],i,j,k1=0,k2=0,t; for(i=0;i<n1;i++) scanf("%d %d",&a[i][0],&a[i][1]); scanf("%d",&n2); int b[10000][2]; for(i=0;i<n原创 2021-04-02 14:34:01 · 117 阅读 · 2 评论 -
最长连续递增子序列(c语言)
最长连续递增子序列题目答案注意题目答案#include<stdio.h>int main(){ int n; scanf("%d",&n); int a[n],i; for(i=0;i<n;i++) scanf("%d",&a[i]); int count=0,max=0,flag=0,position=0; for(i=0;i<n;i++) { if(count==0) count++; else if(count>原创 2021-04-02 10:39:09 · 3379 阅读 · 0 评论 -
两个有序序列的中位数(使用sort函数)
两个有序序列的中位数题目答案注意题目答案#include<stdio.h>#include<algorithm>using namespace std;int main(){ int n; scanf("%d",&n); int a[2*n],i; for(i=0;i<2*n;i++) scanf("%d",&a[i]); sort(a,a+2*n); printf("%d",(a[n-1]+a[n])/2);}注意要熟练原创 2021-04-01 21:51:10 · 191 阅读 · 4 评论 -
两个有序链表序列的交集(c语言)
两个有序链表序列的交集题目答案题目答案#include<stdio.h>#include<malloc.h>struct Array{ int data; struct Array *next;};int main(){ struct Array *head,*head1,*pa,*pb,*head2,*p,*temp; head1=(struct Array *)malloc(sizeof(struct Array)); head1->next=N原创 2021-04-01 21:18:30 · 1191 阅读 · 0 评论 -
海盗分赃(8行代码搞定!)
海盗分赃题目答案最简版本(8行代码)详细流程注意题目答案最简版本(8行代码)#include<stdio.h>int main(){ int money,n; scanf("%d %d",&money,&n); if(n==3) printf("%d",money-1); else printf("%d",money-n/2-1);} 详细流程(把注释部分还原就能看到不同人数的金钱的分配)#include<stdio.h>int ma原创 2021-04-01 20:52:58 · 456 阅读 · 0 评论 -
两个有序链表序列的合并(c语言编程题)
两个有序链表序列的合并题目答案注意题目答案#include<stdio.h>#include<malloc.h>struct Array{ int data; struct Array *next;};int main(){ struct Array *head,*head1,*pa,*pb,*head2,*p,*temp; head1=(struct Array *)malloc(sizeof(struct Array)); head1->next原创 2021-04-01 17:29:20 · 284 阅读 · 0 评论