![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PAT甲级
Ray.C.L
不开longlong见祖宗
展开
-
最大公约数
思路:欧几里得算法代码:#include<bits/stdc++.h>using namespace std;int gcd(int a,int b)//最大公约数{ return b?gcd(b,a%b):a;}int lcm(int a,int b)//最小公倍数{ return a*(b/gcd(a,b));}int main(){ int t; scanf("%d",&t); while(t--){ .原创 2021-12-06 17:17:17 · 289 阅读 · 0 评论 -
PAT All Roads Lead to Rome(最短路,求路径,求条数,求最小花费)
题目:从我们的城市到达罗马有许多不同的旅游路线。请你在成本最低的旅游路线之中,找到使得游客幸福感最强的路线。输入格式第一行包含两个整数 N和 K,分别表示总城市数量,城市之间道路数量,还包含一个城市名字,表示初始城市。接下来 N−1行,每行包含一个城市名和一个整数,表示到达该城市(初始城市除外)可以获得的幸福感。接下来 K行,每行包含一个道路的信息,格式为 City1 City2 Cost,表示两个城市之间的道路行走的花费,道路是双向的。城市都是由三个大写字母构成的字符串。我们的目.原创 2021-03-12 17:56:18 · 120 阅读 · 0 评论 -
PAT Head of a Gang(图)
题目:警察找到团伙头目的一种方法是检查人们的通话。如果 A和 B 之间有通话,我们就说 A 和 B 是相关的。并且关联具有传递性,即如果 A 与 B 关联,B 与 C 关联,那么 A 与 C也是关联的。关联权重定义为两人之间所有通话的总时间长度。一个“帮派”是一个由至少3个相互关联的人组成的群体,并且其总关联权重大于给定的阈值 K。在每个帮派中,总权重最大的就是头目,数据保证每个帮派中总权重最大的人是唯一的。你需要确定各个帮派以及帮派头目。思路:dfs找阈值大小,因为建的是双向边每个点.原创 2021-03-12 16:26:58 · 115 阅读 · 0 评论 -
PAT Travel Plan(最短路,求路径)
题目:给定一张地图,包含 N 个城市,M条高速公路。城市之间都能相互连通。每条高速公路的长度和走该条公路的花费都是已知的,高速公路都是双向的。现在要从地图中的某个城市前往另一个城市。请你确定最短路径,当最短路径不唯一时,请你选取花费最小的路径(保证唯一)。代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;int g2[600][600],cnt[600];int d[600],g[.原创 2021-03-12 15:39:58 · 93 阅读 · 0 评论 -
PAT Emergency(最短路)
题目:作为城市的紧急救援团队负责人,你将获得一张你所在国家的特殊地图。该地图显示了一些通过道路连接的分散城市,道路是双向的。地图上标出了每个城市的救援队数量以及每对城市之间的每条道路的长度。当其他城市发出紧急求援信息时,你的工作是尽快带领你的士兵前往该地点,同时,在途中尽可能多地调动救援帮手。代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;int sum[600],cnt[600];.原创 2021-03-12 09:24:37 · 185 阅读 · 0 评论 -
PAT Invert a Binary Tree(树)
题目:以下是来自 Max Howell @twitter 的内容:谷歌:我们的百分之九十的工程师都使用你编写的软件,但是你连在白板上反转二叉树都做不到,还是滚吧。现在,请你证明你会反转二叉树。输出反转后二叉树的层序遍历序列和中序遍历序列,每个序列占一行。相邻数字之间用空格隔开,末尾不得有多余空格。代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;int n;int l[150],r[.原创 2021-03-10 22:16:18 · 132 阅读 · 0 评论 -
PAT Build A Binary Search Tree(树)
题目:二叉搜索树 (BST) 递归定义为具有以下属性的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值若它的右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值它的左、右子树也分别为二叉搜索树给定二叉树的具体结构以及一系列不同的整数,只有一种方法可以将这些数填充到树中,以使结果树满足 BST 的定义。请你输出结果树的层序遍历。思路:排序后是中序遍历,然后重构二叉树,跑一遍层序遍历。代码:#include<bits/stdc++.h>using.原创 2021-03-10 18:03:09 · 108 阅读 · 0 评论 -
PAT Tree Traversals Again(树)
题目:通过使用栈可以以非递归方式实现二叉树的中序遍历。例如,假设遍历一个如下图所示的 6节点的二叉树(节点编号从 1 到 6)。则堆栈操作为:push(1); push(2); push(3); pop(); pop(); push(4); pop(); pop(); push(5); push(6); pop(); pop()。我们可以从此操作序列中生成唯一的二叉树。你的任务是给出这棵树的后序遍历。思路:如果push前面是pop那么加的是上一个节点的右儿子,否则就是左儿子。记录根节点和作业.原创 2021-03-10 17:42:57 · 162 阅读 · 0 评论 -
PAT Complete Binary Search Tree(树)
题目:二叉搜索树 (BST) 递归定义为具有以下属性的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值若它的右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值它的左、右子树也分别为二叉搜索树完全二叉树 (CBT) 定义为除最深层外的其他层的结点数都达到最大个数,最深层的所有结点都连续集中在最左边的二叉树。现在,给定 N个不同非负整数,表示 N 个结点的权值,用这 N个结点可以构成唯一的完全二叉搜索树。请你输出该完全二叉搜索树的层序遍历。思路:完全二叉搜索.原创 2021-03-10 17:07:14 · 102 阅读 · 0 评论 -
PAT Is It a Binary Search Tree(树)
题目:二叉搜索树 (BST) 递归定义为具有以下属性的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值若它的右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值它的左、右子树也分别为二叉搜索树我们将二叉搜索树镜面翻转得到的树称为二叉搜索树的镜像。现在,给定一个整数序列,请你判断它是否可能是某个二叉搜索树或其镜像进行前序遍历的结果。思路:知道前序遍历,根据他给出性质可以发现排序后就是中序遍历,通过前序和中序构造出树代码:#include<bits/st.原创 2021-03-10 16:46:52 · 127 阅读 · 0 评论 -
PAT Deepest Root(树)
题目:输出最深的根的节点编号。如果最深的根不唯一,则按照从小到大的顺序,将它们依次输出,每个占一行。如果给定的图不是树,输出 Error: K components,其中 K是图中连通分量的数量。思路:用并查集找连通块个数,dfs每个根找最深代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;int e[20005],h[20005],nex[20005];int p[10005];.原创 2021-03-10 15:37:17 · 156 阅读 · 0 评论 -
PAT Tree Traversals(树)
题目:一个二叉树,树中每个节点的权值互不相同。现在给出它的后序遍历和中序遍历,请你输出它的层序遍历代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;unordered_map<int,int> l,r,pos;int inorder[40],postorder[40];int q[50];int n;int build(int il,int ir,int pl,int pr.原创 2021-03-10 09:13:15 · 224 阅读 · 0 评论 -
PAT Counting Leaves(树)
题意:求每一层叶子节点的个数代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;int e[300],h[300],nex[300];int idx;int cnt[300],mx_dep;void add(int u,int v){ e[idx]=v,nex[idx]=h[u],h[u]=idx++;}void dfs(int u,int dep){ if(h[.原创 2021-03-10 08:24:19 · 154 阅读 · 0 评论 -
PAT Linked List Sorting(排序)
题目:第一行首先包含一个整数 N,表示总节点数量,然后包含链表头节点的地址。接下来 N行,每行描述一个节点的信息,格式如下:Address Key Next其中 Address 是节点地址,Key 值是一个整数,Next 是下一个节点的地址。地址都是 5位正整数,可能有前导 0。保证各节点的 Key 值互不相同,且链表中不存在环形结构。代码:#include<bits/stdc++.h>using namespace std;typedef long long l.原创 2021-03-09 23:01:45 · 115 阅读 · 0 评论 -
PAT Course List for Student(排序)
题目:第一行包含两个整数 N 和 K,分别表示需要查询的学生数量以及课程数量。接下来包含 K个课程的具体报名信息。每个课程信息的第一行包含两个整数 i和 Ni,分别表示该课程的编号(所有课程编号从 1 到 K)以及报课人数。第二行包含 Ni个学生姓名,学生姓名由三个大写字母和一个数字组成。最后一行包含 N个学生姓名,表示要查询的学生名单。代码:#include<bits/stdc++.h>using namespace std;typedef long long.原创 2021-03-09 22:07:49 · 65 阅读 · 0 评论 -
PAT List Sorting(排序)
题目:如果 C=1,则按照 ID 升序的顺序排序。如果 C=2,则按照名称以不降序的顺序排序。如果 C=3,则按照成绩以不降序的顺序排序。代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;#define SIS std::ios::sync_with_stdio(false)#define space putchar(' ')#define enter putchar('\n')#.原创 2021-03-09 21:42:47 · 132 阅读 · 0 评论 -
PAT PAT Ranking(排序)
题目:编程能力测试(PAT)由浙江大学计算机科学与技术学院组织。每次测试都会在多个地区同时进行,测试完成后,将会对成绩进行统计与合并,生成总排名。你的任务就是编写一个程序,将各地区人员的成绩合并汇总,生成最终排名。代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;struct Student{ string id; int grade; int location_n.原创 2021-03-09 20:57:36 · 139 阅读 · 0 评论 -
PAT Digital Library(排序)
题目:数字图书馆包含数以百万计的书籍。每本书的书名,作者,摘要关键词,出版商和出版年限这五类关键信息都在数据库中有所记录。每本书被分配一个唯一的 7位数字作为其 ID。当读者查询某一关键信息时,你应该找到所有与查询相关的书籍,并将它们按 ID 的升序排序输出。(题目难点:读题 )代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;struct Book{ string id,n.原创 2021-03-09 20:14:43 · 115 阅读 · 0 评论 -
PAT The Best Rank(排序)
题意:给出学号和三门成绩,m个查询,问每个学生的最好成绩是什么并打印课程。代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;unordered_map<string,vector<int> > grades;vector<int> q[4];int get_rank(vector<int> &a,int x){ int l=.原创 2021-03-09 19:18:51 · 149 阅读 · 1 评论 -
PAT Mars Numbers(进制转化)
题意:10进制转13进制转英文,英文转13进制。代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;char names[][5]={ "tret","jan","feb","mar","apr","may","jun","jly","aug","sep","oct","nov","dec", "tam","hel","maa","huh","tou","kes","hei","elo",.原创 2021-03-08 20:45:35 · 118 阅读 · 0 评论 -
PAT Colors in Mars(进制转化)
题目:将给出的三个数转为3个2位数的13进制数代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;#define SIS std::ios::sync_with_stdio(false)#define space putchar(' ')#define enter putchar('\n')#define lson root<<1#define rson root<<1.原创 2021-03-08 18:18:52 · 108 阅读 · 0 评论 -
PAT Reversible Primes(进制转换)
题意:给定两个整数 N 和 D,如果 N 是一个质数,并且将 N 转化为 D 进制表示后,再进行反转,得到的新数字转化为十进制表示后如果也是一个质数,则称 N 在 D 进制系统中,是一个可逆质数。代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;bool is_prime(int x){ if(x==1) return false; for(int i=2;i*i<=x.原创 2021-03-08 17:21:23 · 107 阅读 · 0 评论 -
PAT Radix(进制转化,二分)
题意:给定一对正整数,例如 6 和 110,此等式 6=110是否成立?答案是可以成立,当 6是十进制数字,110是二进制数字时等式得到满足。现在,给定一个正整数数对 N1,N2,并给出其中一个数字的进制,请你求出另一个数字在什么进制下,两数相等成立。思路:吧n1转化为10进制,然后二分进制数r,找最小的答案。代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;#define SIS .原创 2021-03-08 16:06:49 · 473 阅读 · 0 评论 -
PAT Palindromic Number(高精度)
题目:如果一个数字从前往后读和从后往前读都一样,那么这个数字就是回文数字。所有一位数字都是回文数字。非回文数字可以通过一系列的操作与回文数字配对。首先,将非回文数字反转,让反转后的数字与原数字相加,得到一个新的数字。如果新的数字不是回文数字,那么就重复此操作,直到得到回文数字为止。代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;bool check(vector<int&g.原创 2021-03-08 08:32:16 · 171 阅读 · 0 评论 -
PAT Have Fun with Numbers(高精度)
题意:请注意,数字 123456789 是一个 9 位数字,完全由 1 到 9组成,没有重复。将其加倍,我们将获得 246913578,它恰好是另一个 9 位数字,恰好由 1 到 9组成,只是排列不同。现在,给定你一个 k位的数字,请你判断将其加倍以后得到的数字是否可以由原数字的各数位重新排列得到。代码:#include<bits/stdc++.h>using namespace std;int main(){ string s; cin&g.原创 2021-03-05 11:51:19 · 157 阅读 · 0 评论 -
PAT Product of Polynomials
题意:求多项式乘法代码:#include<bits/stdc++.h>using namespace std;const int N=1005;double a[N],b[N],c[N*2];int main(){ int k; cin>>k; while(k--) { int n; double m; cin>>n>>m; a[n]=m; .原创 2021-03-05 10:53:45 · 90 阅读 · 1 评论 -
A+B for Polynomials
题意:共两行,每行包含一个多项式的信息,格式如下:K N1 aN1 N2 aN2 … NK aNK其中,K表示多项式中非零项的数量,Ni 和 aNi 分别表示其中一个非零项的指数和系数。代码:#include<bits/stdc++.h>using namespace std;const int N=1005;double a[N],b[N],c[N];int main(){ int k; cin>>k; while(k--) .原创 2021-03-04 17:27:31 · 199 阅读 · 1 评论 -
PAT Table Tennis(字符串处理)
题目:一个乒乓球俱乐部共有 K 张乒乓球台,编号为 1∼K。对于任意一对球员,当他们到达时如果有多个球台可用,那么他们就会被安排到编号较小的那个球台上打球。如果所有球台都被占用了,他们就只能排队等待了。假设每对球员最多只允许打两小时球。你需要计算每个排队等候的人的等待时间以及每个球台当天有多少对球员在上面打球。另外,让这个事情变得复杂的是,俱乐部为 VIP 球员保留了一些球台。当一个 VIP 球台空出时,等待队伍中的第一对 VIP 球员将优先使用这个球台。如果此时等待队伍中没有 VIP,.原创 2021-03-03 12:53:26 · 290 阅读 · 0 评论 -
PAT Queueing at Bank(字符串处理)
题目:假设一家银行有 K个服务窗口。窗户前面有一条黄线,将等候区分为两部分。所有客户都必须在黄线后面排队等候,直到轮到他/她服务并且有可用的窗口为止。假定一个窗口不能被单个客户占用超过 1小时,即如果某位顾客的业务已经办理了一小时,则立即终止此项业务。现在给定每个客户的到达时间 T和业务办理时间 P,请计算所有客户的平均等待时间。请注意,银行的营业时间为 08:00 至 17:00。任何人提前到达都必须排队等候至 08:00,而任何人来得太晚(在 17:00:01 或之后到达)都将不被.原创 2021-03-02 11:56:03 · 210 阅读 · 0 评论 -
PAT Phone Bills(字符串处理)
题意:长途电话公司按以下规则向客户收费:拨打长途电话每分钟要花费一定的费用,具体收费取决于拨打电话的时间。客户开始拨打长途电话的时间将被记录,客户挂断电话的时间也将被记录。每个月都要给客户发送一次话费账单,账单中应包含每次通话记录以及相关收费等信息。给定一组电话记录,你的工作是为客户准备帐单。记录是成对出现的online对应offline.思路:通话时间的费用用前缀和去算,计算一个月每个时段的价格。按题意模拟代码:#include<bits/stdc++.h>using n.原创 2021-03-01 13:07:44 · 180 阅读 · 0 评论 -
PAT Dating(字符串处理)
题意:比对前2个字符串第一个相同的字符A-G表示星期,第二个相同字符0-9和A-N表示24小时,后2个字符串比较相同位置字母,位置表示分钟。代码:#include<bits/stdc++.h>using namespace std;int main(){ string a,b,c,d; cin>>a>>b>>c>>d; int k=0; while(1) { if(a[k]==b[.原创 2021-02-28 11:51:05 · 67 阅读 · 0 评论 -
PAT Speech Patterns(字符串处理)
题意:单词由数字和大小写字母组成,问你那个单词出现最多并输出次数。思路:忽略大小写,然后从每个单词起始往下找。代码:#include<bits/stdc++.h>using namespace std;bool check(char c){ if(isdigit(c))return true; if(isalpha(c))return true; return false;}int main(){ string s1; unorde.原创 2021-02-28 11:23:21 · 142 阅读 · 0 评论 -
PAT String Subtraction(字符串处理)
题意:给定两个字符串 S1 和 S2,S=S1−S2 定义为将 S1 中包含的所有在 S2中出现过的字符删除后得到的字符串。你的任务就是计算 S1−S2小声BB:虚假的数据,O(n*n)也能过代码:#include<bits/stdc++.h>using namespace std;string s1,s2;int vis[500];int main(){ getline(cin,s1); getline(cin,s2); for(int i=.原创 2021-02-28 10:39:36 · 66 阅读 · 0 评论 -
PAT Boys vs Girls(字符串处理)
题意:给定 N 个学生的成绩信息,请你求出女生第一名与男生倒数第一名的分数差距。代码:#include<bits/stdc++.h>using namespace std;int main(){ int n; string girl_name,girl_id; int girl_score; string boy_name,boy_id; int boy_score; cin>>n; for(int i=0;i<n;.原创 2021-02-27 17:25:49 · 152 阅读 · 0 评论 -
PAT Password(字符串处理)
题目:给定4个字符的转化,给n个账号和密码,修改密码中需要转化的字符。代码:#include<bits/stdc++.h>using namespace std;string name[1005],pwd[1005];string change(string str){ string res; for(auto x:str) { if(x=='0')res+='%'; else if(x=='1') res+='@'; .原创 2021-02-27 14:14:53 · 183 阅读 · 0 评论 -
PAT Sign In and Sign Out(字符串处理)
题意:给你每个人的编号和他的进门时间,出去的时间,问谁最早来,最迟走。思路:在出门时间找最小,出去时间找最大,直接用字符串比较即可。代码:#include<bits/stdc++.h>using namespace std;int main(){ string open_time="99:99:99",close_time,open_id,close_id; int n; cin>>n; for(int i=0;i<n;i++) .原创 2021-02-27 13:51:05 · 131 阅读 · 0 评论 -
PAT Spell It Right(字符串处理)
题意:求每一位之和,在吧每一位答案转为英文、代码:#include<bits/stdc++.h>using namespace std;int main(){ string num; cin>>num; int sum=0; for(auto x:num) sum+=x-'0'; string mp[10]={"zero","one","two","three","four","five","si.原创 2021-02-27 13:31:02 · 124 阅读 · 0 评论 -
PAT A+B Format(字符串处理)
题意:求2个数相加的和,每三位用,隔开。代码:#include<bits/stdc++.h>using namespace std;int main(){ int a,b,c; cin>>a>>b; c=a+b; string num=to_string(c); string ans; for(int i=num.size()-1,j=0;i>=0;i--) { ans=num[i].原创 2021-02-27 13:07:06 · 222 阅读 · 0 评论