![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PAT刷题
hi-ha-hi
这个作者很懒,什么都没留下…
展开
-
PAT (Advanced Level) Practice 1031 Hello World for U
题目:PAT (Advanced Level) Practice 1031 Hello World for U (20 point(s))题目大意思就是给一个字符串,然后输出该字符串,使得输出的形状是U形的。具体的关系说明请看解题思路。解题思路首先根据题目给出的条件n1{n_1}n1表示左边的一列有几个字符,n2{n_2}n2表示最下面的一行有几个字符,n3{n_3}n3表示最右边的一列有几个字符。其中满足关系n1=n3<=max{k∣k<n2,3<=n2<=N}原创 2021-05-30 13:59:41 · 88 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1030 Travel Plan (30 point(s))
题目 PAT A 1030题目大意找到从起点到终点的最短路径,如果有多条,选择花费最小的一条。解题思路Dijkstra求最短路径DFS输出路径,此处使用pre保存路径,最后,使用DFS递归即可求出路径#include<bits/stdc++.h>using namespace std;const int maxn=505;struct Edge{ int to,dis,cost; Edge(int t,int d,int c):to(t),dis(d),co原创 2021-03-27 21:41:44 · 69 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1029 Median (25 point(s))
题目PAT A 1029题目大意给两个有序的序列,求这两个序列合并以后的中位数题解思路方法一:归并排序方法二:二分(待更新)方法一:归并排序#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=2e5+5;ll a[maxn],b[maxn];//使用归并排序ll c[maxn<<1];ll merge(int n,int m){ int c原创 2021-03-27 16:58:18 · 64 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1028 List Sorting (25 point(s))
题目 PAT A 1028题目大意按照指定关键字进行排序解题思路本题很简单,排序即可学会sort函数中cmp函数的书写以及用法即可#include<bits/stdc++.h>using namespace std;const int maxn=1e5+5;struct Node{ string id,name; int score;};Node student[maxn];int n,c;bool cmp(const Node&a,cons原创 2021-03-27 16:35:21 · 78 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1027 Colors in Mars (20 point(s))
题目PAT A 1027题目大意给出三个10进制的数,转换为13进制表示的数(用两个数位表示)解题思路本题很简单,就是进制抓换#include<bits/stdc++.h>using namespace std;void tenToRadix(int a,int radix){ //把十进制a转换为radix进制 vector<int>num; while(a){ num.push_back(a%radix);原创 2021-03-27 16:16:53 · 61 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1024 Palindromic Number (25 point(s))
题目:PAT A 1024链接题目大意给出一个数,经过如下变换:把该数逆序以后,与原数相加,重复此过程直到变为回文数(最多可以变换k次)。解题思路暴力模拟大整数加法#include<bits/stdc++.h>using namespace std;bool isParlindromic(string str){ int i=0,j=str.size()-1; while(i<=j){ if(str[i]!=str[j]) ret原创 2021-03-24 15:33:02 · 59 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 point(s))
题目 PAT A 1023链接题目大意给一个最多20位的由1-99个数字组成的整数,问把该数字乘2以后,所得整数是不是原来数字的一个排列。解题思路大整数加法,统计每个数字出现的次数,对比一下即可#include<bits/stdc++.h>using namespace std;string Add(string a,string b){ int c=0; int i=a.size()-1,j=b.size()-1; string ans="";原创 2021-03-24 14:46:29 · 52 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1022 Digital Library (30 point(s))
题目 PAT A 1022链接题目大意有n本书,每本书输入的格式为Line #1: the 7-digit ID number;Line #2: the book title -- a string of no more than 80 characters;Line #3: the author -- a string of no more than 80 characters;Line #4: the key words -- each word is a string of no mor原创 2021-03-23 19:42:10 · 85 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1021 Deepest Root (25 point(s))
题目 PAT 甲 1021链接题目大意给出一棵树,如果不满足树,则输出一共有多少个联通集,否则,输出根节点的集合,此处的根节点必须满足从该点遍历,有最大的深度。解题思路第一遍DFS既确定一共有几个联通子集,同时,保存从每个根节点进行遍历,每一层的节点编号。把深子层的节点放入到集合s第二遍DFS,从第一次的最深的节点中,任选一个进行DFS,把得到的最深层的节点与第一次的s集合取交集,即可得到结果#include<bits/stdc++.h>using namespace std原创 2021-03-23 15:36:21 · 93 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1020 Tree Traversals (25 point(s))
题目 PAT A 10201020题目大意给出二叉树的中序和后序遍历序列,输出层序遍历序列解题思路根据中序和后序建立二叉树二叉树的遍历代码中包含了中序,后序,前序,层序遍历的代码#include<bits/stdc++.h>using namespace std;struct Btree{ int data; Btree *left,*right; Btree(int d):data(d),left(NULL),right(NULL){}};i原创 2021-03-22 17:23:47 · 61 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1019 General Palindromic Number (20 point(s))
题目:PAT A 1019题目大意给出一个10进制的小数N,和一个基数b。问N在b进制下是不是回文数字。解题思路把10进制的数,抓换为b进制。因为N是浮点数,所以,需要划分为整数部分和小数部分整数部分,除b取余。注意逆序一下小数部分,乘b取整,注意顺序不变。#include<bits/stdc++.h>using namespace std;int main(){ double N; int b; while(cin>>N>&原创 2021-03-22 14:28:39 · 80 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1018 Public Bike Management (30 point(s))
题目:PAT A 1018题目大意给出N个城市,M条路。需要把从0号城市到P号城市路径上所有的单车数量调整为perfect。此处的perfect指的是自行车数是Cmax/2。从0->P需要路径最短,有多条最短路的情况下,选择从0号发送或回收单车数最少的路径解题思路使用Dijkstra算法,求最短路径,并且使用Pre保存路径使用DFS从P反向搜索到0。选择最优的路径。#include<bits/stdc++.h>using namespace std;const int原创 2021-03-21 16:51:21 · 67 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1017 Queueing at Bank (25 point(s))
题目:PAT A 1017题目大意给出N个客户的到达时间,银行有K个窗口,银行在8:00上班,在17:00后到达的客户不服务,也不计算计算到平均时间。请问平均等待时间解题思路根据客户达到的时间进行排序。使用window数组模拟银行的窗口。每次分配给你用户的窗口的是时间最小的。#include<bits/stdc++.h>using namespace std;struct Customer{ int h,m,s,p; int time;};int n,k;原创 2021-03-21 15:13:34 · 95 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1016 Phone Bills (25 point(s))
题目:PAT A 1016题目大意首先输入24整数,表示在一天中24个小时的某个时辰打电话的费率。(美分/每分钟)。接下来有n条记录。每条记录的格式如下:用户名,MM:dd:HH:mm(分别表示月:天:时:分)。以及一个类型表示接通on-line和挂断off-line。题目需要按照用户名的字典序输出每个用户的账单。输出的格式为用户名 月份接通时间1 挂断时间1 通话时长1 费用1接通时间2 挂断时间2 通话时长2 费用2总计费用首先本人感觉最难理解的部分是费用的计算。参考了别人的费用计算转载 2021-03-20 21:39:38 · 74 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1015 Reversible Primes (20 point(s))
题目: PAT A 1015题目大意输入十进制的N和一个基数d。问把N转换为d进制以后,reverse数位得到的数,在重新转换为10机制,问新的数以及原来的数,是否都是素数解题思路素数筛进制的转换#include<bits/stdc++.h>using namespace std;const int maxn=1e5;bool isPrime[maxn];void init(){ for(int i=0;i<maxn;++i) isPrime[i]=1;原创 2021-03-20 17:10:10 · 65 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1014 Waiting in Line (30 point(s))
题目:PAT A 1014题目大意:银行有N个窗口,每个窗口的队列可以排M人,有K个人依次来银行服务,并且给出每个人服务所需的时间。给出q系询问。问询问人的服务结束时间解题思路模拟定义Windows表示窗口,Customer表示客户struct Window{ int poptime;//表示当前服务的人弹出队列的时间 int endtime;//到某个人时,队列的结束时间,动态变化的 int queue[11];//最多可以排队M人,不超过10个 int f转载 2021-03-20 16:07:14 · 51 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1013 Battle Over Cities (25 point(s))
题目:PAT A 1013题目大意给出N个城市,M条边连通的图。有K次询问,每次询问,去掉一个点,则连通全部点需要几条边解题思路连通分量的个数。对每个点,去掉以后,查看还有多少个联通分量,答案为连通分量个数-1#include<bits/stdc++.h>using namespace std;const int maxn=1e3+5;int n,m,k;vector<int>mp[maxn];bool vis[maxn];void dfs(int s){原创 2021-03-19 21:43:52 · 42 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1012 The Best Rank (25 point(s))
题目:PAT A 1012题目大意对于每个学生有4个成绩,分别是C,M,E,A。给出一个学号,问考生的最好的排名,排名的优先次序是A,C,M,E解题思路分别按照优先级进行排序。因此,需要注意输入的顺序,以及分数的优先级设置Rank[id][j]表示编号为id的考生,j这门课的成绩#include<bits/stdc++.h>using namespace std;const int maxn=2e3+5;int cnt=0;//用来进行编号struct Student原创 2021-03-19 20:57:09 · 68 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1010 Radix (25 point(s))
题目:PAT A 1010解题思路首先需要很明确,未知数的进制不一定是2-36进制之间,上限不一定。只不过是a-z以外无法表示而已二分枚举进制可能超过long long的表示范围,超过范围,溢出结果为负#include<bits/stdc++.h>using namespace std;typedef long long ll;string str1,str2;ll tag,radix;//把字符转换为10进制的数ll cTonumber(char ch){ i原创 2021-03-19 15:44:22 · 68 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1009 Product of Polynomials (25 point(s))
题目:PAT A 1009题目大意两个多项式A,B。求两个多项式的乘积。解题思路设立一个2000的数组,表示次方,剩余就是模拟的过程。#include<bits/stdc++.h>using namespace std;const int maxn=2e3+5;double poly[maxn];double poly2[maxn];int main(){ int k1,k2; scanf("%d",&k1); int a; dou原创 2021-03-19 14:28:23 · 79 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1008 Elevator (20 point(s))
题目:PAT 甲 1008#include<bits/stdc++.h>using namespace std;int main(){ int n; while(~scanf("%d",&n)){ int sum=0,pre=0; int f; for(int i=0;i<n;++i){ scanf("%d",&f); if(f>pre){原创 2021-03-19 11:29:09 · 65 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1007 Maximum Subsequence Sum (25 point(s))
题目: PAT 甲 1007题目大意找出最大子序列的和,并且需要保存子序列的起始元素和终止元素思路最大子序列和是典型的动态规划题目,转移方程为dp[i]=max(dp[i-1]+a[i],a[i])。由于转移方程只与i-1项有关,所以只需要一个参数pre保存即可,不用定义一整个数组代码1是没有优化的,代码2是优化的代码1#include<bits/stdc++.h>using namespace std;const int maxn=1e4+10;int dp[maxn原创 2021-03-19 11:14:25 · 79 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1006 Sign In and Sign Out (25 point(s))
题目:PAT 甲 1006题目大意找出最早签到的人的ID,以及最晚签退的人的ID解题思路排序#include<bits/stdc++.h>using namespace std;struct Node{ string id,start,end;};bool cmp(const Node &a,const Node &b){ return a.start<b.start;}bool cmp2(const Node &a,con原创 2021-03-19 10:47:46 · 65 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1005 Spell It Right (20 point(s))
题目:PAT 甲 1005题目大意给一个整数N,超过了一般数据类型,需要当做string读入。然后计算每一个的数字和,把得到的和的每一位用英语输出解题思路题目很简单,使用map<int,string>映射一下即可#include<bits/stdc++.h>using namespace std;map<int,string>mp;void init(){ mp[0]="zero",mp[1]="one",mp[2]="two",mp[3]="原创 2021-03-19 10:33:33 · 82 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1004 Counting Leaves (30 point(s))
题目:PAT 甲 1004题目大意给出一棵族谱树,问从从根节点的最顶层到最底层,每一层的叶子数是多少解题思路DFS#include<bits/stdc++.h>using namespace std;const int maxn=101;vector<vector<int>>tree(maxn);int Level_leaf[maxn],maxDeep=-1;int n,m;void dfs(int f,int deep){ maxDe原创 2021-03-19 10:16:12 · 72 阅读 · 0 评论 -
PAT (Advanced Level) Practice-1003 Emergency (25 point(s))
题目链接思路Dijkstra使用numPath记录路径数,使用numTeam记录可以聚集的最多的队数注意:只有找到一个最短的点的时候,才需要入队#include<bits/stdc++.h>using namespace std;const int maxn=505;struct Edge{ int to,length; Edge(int t,int l):to(t),length(l){}};struct Point{ int id,dis;原创 2021-03-19 09:46:08 · 83 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1002 A+B for Polynomials (25 point(s))
PAT (Advanced Level) Practice注意:计算结果中,系数为0的就不要输出了。方法1:#include<bits/stdc++.h>using namespace std;const int maxn=15;struct Node{ int exp; float idx; Node(int e,float i):exp(e),idx(i){} bool operator<(const Node & e)cons原创 2021-03-18 21:04:08 · 69 阅读 · 0 评论