
PAT
文章平均质量分 73
PAT刷题记录
yue36
这个作者很懒,什么都没留下…
展开
-
[PAT] A1017 Queueing at Bank
【思路】1:将所有满足条件的(到来时间点在17点之前的)客户放入结构体中,结构体的长度就是需要服务的客户的个数。结构体按照到达时间排序。2:wend数组表示某个窗口的结束时间,一开始所有窗口的值都为8点整。每一个客户到来的时候,选择最早结束时间的窗口。如果最早结束时间比客户到得还早,那么他一来就能被服务,更新wend的值;如果最早结束时间比他晚,他需要等待,累加等待的时间,然后更新w...原创 2020-02-15 22:23:00 · 237 阅读 · 2 评论 -
[PAT] A1034 Head of a Gang
(重要!)图的DFS遍历;map的使用思路方法一算法笔记第355页方法二法一中的点权和边权其实是一个东西,用一个map存起来就好,输入的时候如果a和b有通话,则a的点权和b的点权都加上通话时长,且将一条边插入图中(无需知道边长,图用map<string, vector>保存,这样直接以人名对应,比较方便。vector里存的是与键有通话记录的人名,插入时记得遍历一次...原创 2020-05-28 17:30:00 · 89 阅读 · 0 评论 -
[PAT] A1032 Sharing
静态链表。见算法笔记第261页。跟字母是啥并没有关系。。。Tips注意输出的时候要保证5位,因为高位可能为0,但也要输出。scanf使用%c格式时是可以读入空格的,因此在输入地址、数据、后继结点时,要在中间加空格:scanf("%d %c %d", &tad1, &tc, &tad2);AC代码#define _CRT_SECURE_NO_WARNI...原创 2020-06-01 12:17:00 · 85 阅读 · 0 评论 -
[PAT] A1028 List Sorting
(水)tips1cmp比较函数,若是字符串比较,一定要写成return strcmp(char *, char *) >(/</==) 0;。头文件包含string.h。题目大意模仿excel表排序功能。AC代码#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<iostrea...原创 2020-05-13 10:35:00 · 86 阅读 · 0 评论 -
[PAT] A1013 Battle Over Cities (25分)
题目大意给出n个城市之间有相互连接的m条道路,当删除一个城市和其连接的道路的时候,问其他几个剩余的城市至少要添加多少个路线才能让它们重新变为连通图。思路添加的最少的路线,就是他们的连通分量数-1,因为当a个互相分立的连通分量需要变为连通图的时候,只需要添加a-1个路线,就能让他们相连。所以这道题就是求去除了某个结点之后其他的图所拥有的连通分量数。使用邻接表存储(也可以用邻接矩阵)...原创 2020-09-02 11:04:00 · 95 阅读 · 0 评论 -
PAT索引
100110021003100410051006100710081009101010111012 https://www.cnblogs.com/yue36/p/13332890.html1013 https://www.cnblogs.com/yue36/p/13600670.html1014101510161017 https://www.cnblog...原创 2020-09-02 10:28:00 · 126 阅读 · 0 评论 -
[PAT] A1091 Acute Stroke
题目大意给定一个三维空间,0表示正常1表示有肿瘤,肿瘤块的大小大于等于t才算作是肿瘤。计算所有满足肿瘤块的大小之和。题目链接思路用三维数组存储。BFS广度优先搜索。注意细节。AC代码#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<queue>#include<vector&...原创 2020-09-01 17:01:00 · 108 阅读 · 0 评论 -
[PAT] A1067 Sort with Swap(0, i)
题目大意给出一个n个数的序列,数字为0~n-1的乱序,每次只能用数字0和另一个数交换。经过若干次能使序列变成有序的,问最少需要几次交换。思路贪心策略。(1)每次让0占的位置上本来应该占的数字与0交换,交换结束后该数归位。(2)但有可能数字0在自己的位置上(即第0位),但仍有其他数字没有归位。则此时将0与其交换,让它暂时占据0位,重复步骤(1)。优化:在(2)中,如果每次都循...原创 2020-09-01 11:35:00 · 122 阅读 · 0 评论 -
PAT 甲级 2020年春
7-1 Prime Day (20分)#include<cstdio>#include<iostream>#include<cmath>#include<string>using namespace std;bool ifprime(int x) { if (x < 2)return false; if ...原创 2020-09-01 10:02:00 · 213 阅读 · 0 评论 -
[PAT] A1090 Highest Price in Supply Chain
题目大意给出供应链总人数、起始货源的价格、每次经销的涨幅;以及供应链中所有人的直接供应者的编号。求出最大价格和销售最大价格的销售者的人数。思路显然整个供应链可以看作一棵树。题目转化为给一棵树,在树根出货物的价格为p,然后每往下走一层,价格增加r%,求深度最大的结点的价格,以及这个价格的叶子结点个数。用结构体存储结点,每个结点用变长数组存储它的下家。DFS遍历求出每个结点的深度;再...原创 2020-07-23 16:59:00 · 93 阅读 · 0 评论 -
[PAT] A1089 Insert or Merge
题目大意给定原始序列和由某排序算法产生的中间序列,请你判断该算法是插入算法还是归并算法。首先在第1行中输出“Insertion Sort”表示插入排序、或“Merge Sort”表示归并排序;然后在第2行中输出用该排序算法再迭代一轮的结果序列。思路插入排序排到一半的序列满足前半部分有序,后半部分和未排序时一样。根据这个特点,先循环找到第一个不按顺序的结点(下标k),然后循环看是否与...原创 2020-07-23 15:51:00 · 107 阅读 · 0 评论 -
[PAT] A1087 All Roads Lead to Rome
(单源最短路径;多尺标;记录路径条数)题目大意从一个城市出发有多条路到达“ROM”,求最佳路径。首先选择最短路径;若最短路径相同,选择幸福指数最大的;若还相同,选择平均幸福指数最大的(平均不包括起点,因为起点没有幸福指数)。同时还要在第一行输出最短路径条数、路径长度、幸福指数、平均幸福指数;第二行输出最佳路径。思路Dijkstra算法。dis[]存放最短路径长度;nowgetha...原创 2020-07-22 21:09:00 · 101 阅读 · 0 评论 -
[PAT] A1088 Rational Arithmetic
题目大意给出两个分数,求加减乘除的结果。思路求最大公约数要用辗转相除法,否则会超时。判断符号不能两数相乘,因为乘积可能超过long long范围。tips题目说了输入格式一定是a1/b1 a2/b2,所以直接输入即可,不用字符串来转(在这里耗了好多时间和代码...555...我真傻,真的。)AC代码#define _CRT_SECURE_NO_WARNINGS#incl...原创 2020-07-23 13:08:00 · 117 阅读 · 0 评论 -
7-12 How Long Does It Take
(拓扑排序;AOE图)题目大意给出一个工程各个活动的优先关系和所需时间,求完成这个工程所有活动的最短时间。如果无法完成,则输出Impossible。题目链接思路拓扑排序。start为源点,ending为汇点。用一个变量num记录进入队列中的元素个数,如果不等于结点n,则表示不能完成(图中有环)。用数组ve表示事件的最早发生时间,则ve[ending]表示“所有活动已完成”这个事...原创 2020-07-22 11:50:00 · 128 阅读 · 0 评论 -
[PAT] A1146 Topological Order
拓扑排序题目大意给出拓扑结构图和一些序列,判断哪些序列不是该图的拓扑排序结果。思路用邻接表G存储这个有向图,并将每个节点的入度保存在rudu数组中。对于每一个要判断的序列,依次遍历其结点,如果当前结点的入度不为0则表示不是拓扑序列,每次判断某个点后将它所指向的所有结点的入度-1。AC代码#define _CRT_SECURE_NO_WARNINGS#include<c...原创 2020-07-21 10:49:00 · 118 阅读 · 0 评论 -
[PAT] A1103 Integer Factorization
(dfs深度优先搜索)思路先把i从0开始所有的i的p次方的值存储在v[i]中,直到v[i] > n为止。(如果在递归过程中计算次方,会做很多重复工作,很浪费时间。)然后深度优先搜索,记录当前正在相加的index(即v[i]的i的值),当前的总和tempSum,当前K的总个数tempK,以及因为题目中要求输出因子的和最大的那个,所以保存一个facSum为当前因子的和,让它和ma...原创 2020-07-20 16:59:00 · 140 阅读 · 0 评论 -
[PAT] A1055 The World's Richest
排序(需优化)题目大意给出n个人的姓名、年龄和拥有的钱,然后进行k次查询,每次查询输出在年龄区间内的财富值的从大到小的前m个人的信息。如果财富值相同就就先输出年龄小的,如果年龄相同就把名字按照字典序排序输出。思路不能先排序然后根据每一个条件再新建一个数组、对新数组排序的方法,这样测试点2会超时。(排序是非常耗时的,所以排序用得越少越好,尽量只排一次,然后用空间换时间)而可以注意...原创 2020-07-20 12:57:00 · 115 阅读 · 0 评论 -
[PAT] A1110 Complete Binary Tree
完全二叉树题目大意给出各个结点的左右孩子,问这棵树是不是完全二叉树,若是则输出YES和最后一个结点编号;若不是则输出NO和根节点编号。N个结点编号0~N-1。思路结构体数组保存树,为了找到根节点,输入时用bool数组ifchild记录,若有孩子,则该孩子的ifchild值为true,最后不是ture的就是根节点。根据父子关系遍历一遍该树,求出最大下标的和n比较。求最大下标的时候顺...原创 2020-07-19 11:03:00 · 87 阅读 · 0 评论 -
[PAT] A1072 Gas Station
最短路径题目大意从m个加油站里面选取1个站点,让它和离它最近的居民区距离最远,并且没有超出服务范围ds之内。如果有很多个最远的加油站,输出距离所有居民区距离平均距离最小的那个。如果平均值还是一样,就输出加油站编号最小的那个。思路Dijkstra算法。注意每次调用Dijkstra都要初始化。因为加油站之间也是彼此有路连接的,所以最短路径计算的时候也要把加油站算上。因此考虑将加油站...原创 2020-07-18 11:40:00 · 127 阅读 · 0 评论 -
[PAT] A1098 Insertion or Heap Sort
(重要!堆!)题目大意给出n和n个数的序列a和b,a为原始序列,b为排序其中的一个步骤,问b是a经过了堆排序还是插入排序的,并且输出它的下一步。坑测试点2:插入排序时,要考虑输入的两个序列是相同的情况。即第一次判断时原序列的第一个数和第二个数本身有序(题目保证了答案唯一,所以不会出现连续几个本身都有序的情况)。一开始我写错了,是因为先判断了序列是否相同再进入循环。化简找到两个...原创 2020-07-16 22:09:00 · 136 阅读 · 0 评论 -
[PAT] A1012 The Best Rank
(排序;排名的实现)题目大意现已知n个考生的3门分数,平均分可以按照这三门算出来。然后分别对这四个分数从高到低排序,这样对每个考生来说有4个排名。m个查询,对于每一个学生id,输出当前id学生的最好的排名和它对应的分数,如果名次相同,按照A>C>M>E的顺序输出。如果当前id不存在,输出N/A。题目链接思路将输入数据存好,用结构体(参数为id、分数和排名);输...原创 2020-07-17 21:27:00 · 94 阅读 · 0 评论 -
[PAT] A1114 Family Property
并查集题目大意给出每个人名下的房产和家庭关系,求出每个家庭的总人数即人均房产数和房产面积。第一行输出家庭个数(所有有亲属关系的人都属于同一个家庭)。随后按下列格式输出每个家庭的信息:家庭成员的最小编号 家庭人口数 人均房产套数 人均房产面积。其中人均值要求保留小数点后3位。家庭信息首先按人均面积降序输出;若有并列,则按成员编号的升序输出。思路用并查集。分别用两个结构体存储,一个用...原创 2020-07-17 15:16:00 · 124 阅读 · 0 评论 -
[数据结构与算法题目集(中文)] 7-11 关键活动
(!!!重要)关键路径题目大意给出整个项目中各个活动的优先关系和完成时长,求出完成项目的最短时间和关键路径。关键活动输出的顺序规则是:任务开始的交接点编号小者优先,起点编号相同时,与输入时任务的顺序相反。思路题目要求起点编号相同时输出的路径与输入相反,所以用一个二位数组s记录输入的顺序,s[u][v]表示u->v出现的顺序,从1开始标号。先用拓扑排序求出拓扑序列,存在一个...原创 2020-07-23 21:46:00 · 200 阅读 · 0 评论 -
[PAT] A1044 Shopping in Mars (25分)
题目大意求一串的数字中连续的一段,使得这个区间内数字的和恰好等于给定值m;如果不能找到恰好等于m,就找到总和大于m且与m之差最小的区间。求所有可能的区间结果。思路直接模拟会超时。注意到我们要求的是连续和的问题。建立一个数组sum,sum[i]为第1个数到第i个数的和,可知sum数组是单调递增的;而第i个数到第j个数的和等于sum[j]-sum[i-1]。这样我们就可以对sum数组用二分查找法了。固定区间左端点,在sum数组中用二分法寻找合适的右端点,找到大于等于且最接近m的值(因数组元素均为正数,所原创 2020-09-03 11:18:58 · 106 阅读 · 0 评论