
PAT甲级真题练习
天才魔仙
这个作者很懒,什么都没留下…
展开
-
1040 Longest Symmetric String
第一遍刷pat题目思路动态规划dp[i][j]代表i到j是否对称,=1即对称如果s[i]==s[j],则dp[i][j]=dp[i+1][j-1]可以看出,长的对称子串由短的发展而来,所以先初始化L=1和L=2的情况然后按照L递增的顺序,查找长的对称字串我的憨憨程序#include<bits/stdc++.h>using namespace std;int dp[1010][1010]={0};int main(){ string s; getline(cin,原创 2020-07-13 19:46:10 · 116 阅读 · 0 评论 -
1039 Course List for Student
第一遍刷pat题目思路hash算法将学生名字转化成一个int值,可以想到这个名字的格式可以看作:26进制混10进制利用vector容器,会更节省时间我的憨憨程序#include<bits/stdc++.h>#define maxm 26*26*26*10+10using namespace std;vector <int> stu[maxm];int cal(char *name){ int index=0; for(int i=0;i<3;i++)原创 2020-07-13 12:15:37 · 91 阅读 · 0 评论 -
1037 Magic Coupon
第一遍刷pat测试点提示测试点1:负数区长度相等-1 1-1 1 2测试点4:主要考察每个数字只能用一次我的憨憨程序贪心算法#include<bits/stdc++.h>using namespace std;int main(){ int nc,np; int ans=0; int coupon[100010]={0},product[100010]={0}; scanf("%d",&nc); for(int i=0;i<nc;i++) sc原创 2020-07-13 11:09:06 · 293 阅读 · 0 评论 -
1036 Boys vs Girls
第一遍刷pat没看清题目corresponding 相应的我的憨憨程序#include<bits/stdc++.h>#define inf 0x3f3f3f3fusing namespace std;struct p{ char name[15]; char gender; char ID[15]; int grade;};int main(){ int N; p m[500],f[500]; char name[15]; char gender; c原创 2020-07-10 21:33:58 · 117 阅读 · 0 评论 -
1035 Password
第一遍刷pat注意点单数复数的英文输出区别我的憨憨程序#include<bits/stdc++.h>using namespace std;struct p{ char name[15]; char psw[15]; bool v;} user[1010];int main(){ int N,M=0; scanf("%d",&N); for(int i=0;i<N;i++) { scanf("%s %s",user[i].name,user原创 2020-07-10 18:29:32 · 99 阅读 · 0 评论 -
1033 To Fill or Not to Fill
第一遍刷pat题目意思模拟题真是烦死了!贪心思想吧在当前站加满油,如果能开到比当前站便宜的加油站,就加刚刚好过去的油,如果不行的话,就当前先加满,再开到后续最便宜的那个加油站测试点提示测试点2 起点处没有加油站测试点4 牛客网可测,大概可能是当前加满油就可以直接到目的地的那种情况我的憨憨程序(模拟题真的不想整理代码了)#include<bits/stdc++.h>#define inf 0x3f3f3f3fusing namespace std;struct st原创 2020-07-01 21:01:35 · 166 阅读 · 0 评论 -
1032 Sharing
第一遍刷pat测试点提示测试点3:第二个序列首地址为-1我的憨憨程序#include<bits/stdc++.h>using namespace std;struct node{ int next; char ch; bool v;} n[100000];int main(){ int s1,s2,m,flag=-1; int a,b; char ch; scanf("%d%d%d",&s1,&s2,&m); for(int i=0;原创 2020-06-29 16:50:22 · 94 阅读 · 0 评论 -
1031 Hello World for U
第一遍刷pat思路关键在于把n1(n2),n3算出来我的憨憨程序#include<bits/stdc++.h>using namespace std;int main(){ int n1,n3,N; char a[100]={0}; scanf("%s",a); N=strlen(a); n3=(N+2)/3+(N+2)%3; n1=(N+2-n3)/2; for(int i=0;i<n1-1;i++) { printf("%c",a[i]); fo原创 2020-06-29 15:23:35 · 116 阅读 · 0 评论 -
1030 Travel Plan
第一遍刷PAT题目意思找到最短路,并且花费最小dijkstra找最短路,dfs找最小花费我的憨憨程序#include<bits/stdc++.h>#define inf 0x3f3f3f3fusing namespace std; int N,M,S,D;int w[510][510];int r[510][510]; int dis[510];bool v[510];vector <int> pre[510]; vector <int>原创 2020-06-29 14:18:05 · 96 阅读 · 0 评论 -
1029 Median
第一遍刷PAT题目意思给两个递增序列,找出这两个序列中所有的数组成的序列的中位数因为两个都是递增的序列,所以就用一个计数器,两边都数小的数,数到一半就是中位数了测试点提示第三个测试点是a数组全部在中位数左侧第六个测试点是b数组全部在中位数左侧注意一下输出细节就好了吧我的憨憨程序#include<bits/stdc++.h>using namespace std;int main(){ long m,n,cnt=-1,mid,flag=0; long a[20001原创 2020-06-27 22:39:09 · 188 阅读 · 0 评论 -
1028 List Sorting
第一遍刷PAT题目意思非常单纯的一道结构体排序题主要考察你会不会写cmp函数这里主要是注意一下升序的话要写的是:return a<b对于字符串就 return strcmp(a,b)<0我的憨憨程序#include<bits/stdc++.h>using namespace std;struct records{ char id[10]; char name[10]; int grade; } stu[100010];bool cmp1(rec原创 2020-06-27 15:53:31 · 112 阅读 · 0 评论 -
1027 Colors in Mars
第一遍刷pat我的憨憨程序#include<iostream>using namespace std;int main(){ int a[3],j=0; char ans[10]={0}; scanf("%d %d %d",&a[0],&a[1],&a[2]); for(int i=0;i<3;i++) { int tmp=a[i]; int cnt=tmp/13; if(cnt<10) ans[j++]=cnt+'0原创 2020-06-02 17:32:09 · 109 阅读 · 0 评论 -
1024 Palindromic Number
第一遍刷pat测试用例提示2、3是这个数本来就是回文数(我在这被坑了一小下)最后一个就是数组别开太小,反正开50不行,我开了100我的憨憨程序#include<iostream>#include<cstring>using namespace std;char N[100]={0},ans[100]={0};int K,len,flag;void add(){ int j=0,p=0,tmp; for(int i=len-1;i>=0;i--原创 2020-06-02 17:02:05 · 182 阅读 · 0 评论 -
1023 Have Fun with Numbers
第一遍刷pat一道水题罢了,stl大法好题目意思给一个数,乘2,得到一个新的数,如果这个新的数是原数那些数字的一个新排列组合,就Yes其中要注意的是乘二可能导致这个数比原来多一位因为这个数最长可能有20位,所以肯定要用字符串啦,然后刚好字符串有那么多函数可以用用我的憨憨程序#include<iostream>#include<cstring>#include<algorithm>using namespace std;int main(){原创 2020-06-02 11:52:17 · 108 阅读 · 0 评论 -
1021 Deepest Root
第一遍刷PAT题目意思找出图中树的个数,如果有多棵树,输出树的数量;如果只有一棵树,顺序输出所有使得以该节点为根的树高度最大的节点编号我们随便以一个节点为根,画这棵树,得到在这种情况下深度最大的那些节点集合s1;再以这些深度最大的节点为根,再次得到深度最大的那些节点集合s2,s1和s2的交集s即为所求(交集是为了去掉重复的节点)由于此题与树的深度有关,所以适合采用深度优先——dfs方法两...原创 2020-05-31 17:47:13 · 101 阅读 · 0 评论 -
1020 Tree Traversals
第一遍刷PAT题目意思已知二叉树的后序和中序遍历序列,求层次遍历序列用了递归的方法,找左子树和右子树的根节点其中需要计算左子树和右子树在后序遍历序列中的位置,这里有那么一点点难算(好在左子树右子树他们在后序遍历序列中还是整块的,没有搅合到一起)我的憨憨程序#include<iostream>#include<algorithm>#include<vector>#include<queue>using namespace std;in原创 2020-05-31 17:46:14 · 90 阅读 · 0 评论 -
1019 General Palindromic Number
第一遍刷pat题目意思判断 b进制的数N是否是回文数此处用了辗转相除法来转换进制,用vector存转换后的数(vector大法妙啊)我的憨憨程序#include<algorithm>#include<vector>using namespace std;int N,b; vector<int> k;void judge(){ int l=k.size(); for(int i=0;i<l/2;i++) { if(k[i]!=k[原创 2020-05-31 16:09:02 · 106 阅读 · 0 评论 -
1018 Public Bike Management
第一遍刷PAT(抄的标程)题目意思求原点到某个特定点的对短路经——迪杰斯特拉要记录路径所以得搞一个vector来记某一点的父亲(们),(vector好用的很,我再也不想手写链表了,虽然c语言课程结束以后就没写过了)按照题目意思找出所有最短路径中符合题目意思的那一条,即从原点发出的自行车数量最少并且送回去的也最少——dfsbug点:二维数组e[510][510]的首地址是e,但是e+1指的是下一行的首地址即e[1][0],而不是e[0][1]题目意思是选中的那条路上所有的站点都要搞一遍,原创 2020-05-31 15:20:56 · 89 阅读 · 0 评论 -
1017 Queueing at Bank
第一遍刷PAT题目意思坑:如果窗口时间超过下班时间,不做任何特殊处理(emmmmmm mmp)我的憨憨程序#include<iostream>#include<queue>#define CLOSE_TIME 17*60*60using namespace std;struct client{ int h,m,s,pro_time; int arr_...原创 2020-04-10 22:52:01 · 144 阅读 · 0 评论 -
1016 Phone Bills
第一遍刷PAT题目意思注意:通话时间为0的用户什么信息都不输出算账单和时间可以算一对记录从00:00:00开始的时间和账单再相减我的憨憨程序这里加一个代码习惯:当使用到自己不确定是否写对的东西时要做好标记,有利于debug此次遇到一个大坑:devc输出和oj输出不一样,导致我wa了一整天,还好有牛客网的oj让我发现了这一点具体出错的原因:如果字符串a比b大,strcmp(a,...原创 2020-04-10 12:40:19 · 121 阅读 · 0 评论 -
1015 Reversible Primes
第一遍刷PAT题目意思输入:一个数N,一种进制D如果一个数是质数,把它化成D进制数,再翻转过来,再化成十进制数,如果这个数也是质数就输出Yes,否则输出No我的憨憨程序这里的计算方法和用我脑子计算的方法是一样的,主要是完全没想起来除k取余法(虽然本质上其实是一样的,但除k取余法明显系统化一些)这里有个bug点:2不是质数,所以在判断函数里要加一个特殊判断然后1也不是质数,但1在这道题...原创 2020-04-08 23:18:12 · 90 阅读 · 0 评论 -
1014 Waiting in Line
第一遍刷PAT昨天确实偷了一天懒,大概是老天爷报复我让我这题写了一整天????题目意思模拟题输入:窗口数N;每个窗口可排队的人数M,客户数K,查询数Q;输出:每个客户服务完成的时刻,若客户不能在17:00前得到服务,则输出 骚凹瑞~所有用户在8点开始服务,此时如果黄线内还没满就按序排进黄线;黄线满了之后的客户需要在黄线外等待,当某个窗口某个客户服务完毕了,黄线外的用户就进来一个,排到那个窗口...原创 2020-04-08 20:40:36 · 126 阅读 · 0 评论 -
1013 Battle Over Cities
第一遍刷PAT我的憨憨程序(其实抄的标程)思路:统计连通分量的个数用到的知识是离散数学中的图论,不知道的同学得去补一补知识哦,这个不难的#include<stdio.h>#include<string.h>int map[1010][1010];int visit[1010];int N;void dfs(int node)//构建连通分量 { ...原创 2020-04-06 15:38:06 · 117 阅读 · 0 评论 -
1012 The Best Rank
第一遍刷PAT我的憨憨程序还是模拟题,题目意思不想写了。。。思路:用一个结构体数组存学生的id和a c m e四个成绩,其中id用int,成绩用float,毕竟a不一定是个整数,成绩存放一个数组中,就按优先级顺序来存放,便于程序编写、用一个二维数组存所有成绩,作为一张成绩表,用来查找每个学生的名次对于每一个查询的id,先遍历找一遍它是否存在,这里复杂度是O(N);找到它的存在以后,...原创 2020-04-05 11:36:04 · 99 阅读 · 0 评论 -
1011 World Cup Betting
第一遍刷PAT题目意思简单模拟我的憨憨程序#include<stdio.h>int main(){ float a[3][3]={0},sum=0,maxx[3]={0}; char str[]="WTL",ans[3]={0}; for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { scanf("%...原创 2020-04-04 09:08:51 · 100 阅读 · 0 评论 -
1010 Radix
第一遍刷PAT题目意思输入:N1,N2,tag,radix输出:令N1=N2的 N1(或N2)的进制我的憨憨程序 (非AC代码)#include<stdio.h>#include<string.h>int main(){ char N[2][15]={0}; int tag,radix,l[2]={0},flag=0,max=0; long lo...原创 2020-04-03 23:04:03 · 128 阅读 · 0 评论 -
1009 Product of Polynomials
第一遍刷PAT我的憨憨程序这里有个bug点就是那啥 指数最多可以到达2000,所以数组要开2000以上别的emmm好像没啥难点了#include<stdio.h>int main(){ int k1,k2,cnt=0,Ni; float c[2010]={0},ans[2010]={0},aNi;//浮点数初始化也可搞成0.0 scanf("%d",&k1...原创 2020-04-02 22:26:30 · 123 阅读 · 0 评论 -
1008 Elevator
第一遍刷PAT我的憨憨程序做的急出了一个小bug 没考虑到电梯有连续两次停在同一层 那停留时间还是需要再加上一次的#include<stdio.h>int main(){ int n,a=0,b,sum=0; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&b); if(b>a...原创 2020-04-01 22:10:38 · 90 阅读 · 0 评论 -
1007 Maximum Subsequence Sum
第一遍刷PAT题目意思输入:n输入:n个整数输出:最大连续子序列和 该子序列的第一个值 该子序列的最后一个值我的憨憨程序其实是抄的标程 这种标准题就先抄标程嘿嘿(个人觉得这段程序比别的都好理解,而且还短)思路算是贪心?sum是全局最大和,temp是临时最大和,l和r是所求子序列的头尾下标,ll是临时的子序列头下标对每一个a[i],temp+=a[i],如果temp>sum...原创 2020-03-31 21:46:26 · 165 阅读 · 0 评论 -
1006 Sign In and Sign Out
第一遍刷PAT题目意思输入:记录条数M输入:学生ID 登入时间 登出时间输出:最早登入的学生ID 最晚登出的学生ID疑惑的是没有给出M的范围 我就随便搞了一个1000000的结构体数组我的憨憨程序用结构体存储信息,然后比较时间先后再输出就行#include<stdio.h>struct S{ char ID[20]; int in_hour,out_hour;...原创 2020-03-30 15:10:36 · 82 阅读 · 0 评论 -
1005 Spell It Right
第一遍刷PAT题目意思输入一个很长的数字,数字位数最大可达100位,然后对它的每一位进行加和,把最终答案的每一位用英文输出我的憨憨程序思路:数字这么长肯定用字符串存了,然后就加和,100位数的和最多就900吧,也就是说最多是个三位的数字,然后就输出一下咯#include<stdio.h>#include<stdlib.h>#include<string....原创 2020-03-29 17:39:24 · 82 阅读 · 0 评论 -
1004 Counting Leaves
第一遍刷PAT题目意思输入:节点个数N,非叶子节点个数M输入:每个非叶子节点的ID、孩子个数K、孩子IDID格式都是2位数,不足两位用0补齐记根节点为01输出:每一层的叶子节点个数大致思路:树形结构,深度优先搜索(dfs)或广度优先搜索(bfs)此题对层数有要求所以用深度优先更为方便,可以在"迭代"的时候就顺便计算层数我的憨憨程序#include<stdio.h>...原创 2020-03-28 18:52:09 · 85 阅读 · 0 评论 -
1003 Emergency
第一遍刷PAT题目意思输入:N(点数)、M(路径数)、C1(起点)、C2(终点)输入:点权(每个城市的救援队数量)输入:边权(某两个城市之间的距离)输出:最短路径的条数、这些最短路径中的最大点权和(救援队数量的最大值)采用迪杰斯特拉算法算法大致思路:dis[v]表示v点到某点的最短路径值,按照题意,某点应为C1点,所以将dis[C1]初始化0(自己到自己肯定0嘛)找到所有未被访...原创 2020-03-28 15:01:49 · 81 阅读 · 0 评论 -
1002 A+B for Polynomials
第一遍刷PAT题目意思A、B是多项式K是项数,Ni是指数,aNi是系数输出A+B思路既然k最多就1000,不妨搞个c[1005]的数组,数组下标对应指数Ni,相应元素对应系数aNi(嗯,就提示到这里了,忽然想到自己初学的时候也是连这样的思路都得看半天想半天才明白)我的憨憨程序#include<stdio.h>int main(){ int k,cnt=0,Ni...原创 2020-03-26 21:01:11 · 92 阅读 · 0 评论 -
1001 A+B Format
第一遍刷PAT我的憨憨程序emmmm题目中给出了数字范围所以直接用了1000000、1000来算#include<stdio.h>#include<math.h>int main(){ int a,b,c,d; scanf("%d%d",&a,&b); c=a+b; if(c<0)//有负号先输出再说 ...原创 2020-03-25 17:57:33 · 121 阅读 · 0 评论