自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 PAT (Advanced) 1021. Deepest Root (25)

原题:1021. Deepest Root (25)解题思路:1.第一步采用广度优先遍历计算连通分量数目。2.若连通分量只有一个,对所有的点进行广度优先搜索,每次返回对应的树的最大深度,最后把深度最大的树的根输出注:题目数据较大,用邻接表存储图。C++代码如下:#include#include#include#includeusing

2017-09-25 00:07:18 148

原创 PAT (Advanced) 1020. Tree Traversals (25)

原题:1020. Tree Traversals (25)解题思路:1.按照后续遍历和中序遍历序列递归生成相应的树,再按层序遍历输出即可;2.有关根据中序遍历和后续遍历获取树的方法可参考数据结构参考书。C++代码如下:#include#include#includeusing namespace std;const int

2017-09-24 23:27:04 168

原创 PAT (Advanced) 1019. General Palindromic Number (20)

原题:1019. General Palindromic Number (20)解题思路:1.将给定的数按给定基数分解存入数组2.判定数组是否对称C++代码如下:#include#includeint num[200];int cnt;//保存位数//转换为数组void change(int n, int base){ if(

2017-09-23 22:56:34 177

原创 PAT (Advanced) 1018. Public Bike Management (30)

原题:1018. Public Bike Management (30)解题思路:1.题目是最小路径问题,采用Dijkstra算法。2.题目中路径的判优条件十分复杂,于是改变思路,先求出所有距离相同的路径,再通过DFS算法遍历所有可能路径,求出最优路径。DFS中判优流程如下:将车站分为三类:(1)车子多于当前要求,将多于的车子加入remain;(2)车子

2017-09-23 22:20:30 189

原创 PAT (Advanced) 1017. Queueing at Bank (25)

原题:1017. Queueing at Bank (25)解题思路:1.将所有顾客的时间转化为相对00:00 : 00 的秒, 然后进行排序。2.每次寻找最早结束的窗口分配给当前顾客,计算等待时间。3.按照顾客到达时间进行动态更新服务窗口的结束时间,注意过滤17:00:00以后来的顾客。注:当没有顾客时直接输出0.0; 寻找最早服务结束的窗口时,注意把

2017-09-21 23:18:09 167

原创 PAT (Advanced) 1016. Phone Bills (25)

原题:1016. Phone Bills (25)解题思路:1.按照题目的意思,首先将每个人的记录按照时间排序。2.两条有效的记录必然相邻,详细的模拟过程参考代码注释。C++代码如下:#include#include#includeusing namespace std;const int maxn = 1010;struct cust

2017-09-20 23:45:12 143

原创 PAT (Advanced) 1015. Reversible Primes (20)

原题:1015. Reversible Primes (20)解题思路:按题意逆置数字,在判断两个数是否都为素数即可。C++代码如下:#includeint num[30];int reverseNum(int n, int radix){ int cnt = 0; while(n > 0) { num

2017-09-19 23:03:09 263

原创 PAT (Advanced) 1001. A+B Format (20)

原题:1001. A+B Format (20)解题思路:1.将数字直接转换成反向的字符串,在适当位置加入逗号即可;2.字符串从0开始计数,逗号位置分别为 3, 7,11 , 15…… 可发现对每个逗号出现的位置  i   ,有 i % 3 在 0, 1, 2 三个数间循环,以此添加逗号即可3.0 要特殊处理;C++代码如下:#inc

2017-09-18 23:18:52 377

原创 PAT (Advanced) 1014. Waiting in Line (30)

原题:1014. Waiting in Line (30)解题思路:1.可以确定一个顾客在加入队伍时,服务结束的时间就已经决定。2.顾客是按顺序到达,但是没有时间间隔,所以只要有窗口前队伍未满,就会加入。3.由此可以将顾客分为两类,第一类是在窗口全满前到达,第二类是在之后到达的。4.第一类直接加入队伍,并刷新队伍最后一个人结束的时间,借此获取每个顾客的结束时间。

2017-09-18 22:52:52 399

原创 PAT (Advanced) 1013. Battle Over Cities (25)

原题:1013. Battle Over Cities (25)解题思路:1.图的遍历问题,基本方法是BFS(广度优先遍历)或者DFS(深度优先遍历)。2.对于本题的解法,实际上可以转化为求其连通分量的个数,而答案为连通分量个数减一,详情可以参考代码。C++代码如下:#include#include#includeusing

2017-09-14 21:53:13 175

原创 PAT (Advanced) 1012. The Best Rank (25)

原题:1012. The Best Rank (25)解题思路:1.按照题意对每种成绩进行排序, 然后进行排名即可2.排名时注意,成绩相同者排名相同,而成绩相同者向后第一位不同者,排名应该为前面的人数总和加一,如:99 98 98 98 97 ,第一个人为第一, 第二、三、四个人并列第二, 第五个人为第五。C++代码如下:#include#in

2017-09-13 21:05:46 158

原创 PAT (Advanced) 1011. World Cup Betting (20)

原题:1011. World Cup Betting (20)解题思路:把代码写好看点吧~C++代码如下:#include#includeusing namespace std;double a[3][3];int ansChoice[3];char c[3] = {'W', 'T', 'L'};int main(){ for(

2017-09-12 20:06:08 182

原创 PAT (Advanced) 1010. Radix (25)

原题:1010. Radix (25)解题思路:题目思路其实很简单, 转成十进制比大小即可,但是题中数据范围没有给,需要考虑到溢出等很多细节:1.要算的基数应大于等于该数的每位数中的最大值加一。2.在计算途中出现溢出要单独考虑。3.尽量用long long保存数据,我一开始用int型导致一直有几个测试点过不去。4.在查找基数时用二分, 不然会超时。

2017-09-11 20:07:57 181

原创 PAT (Advanced) 1009. Product of Polynomials (25)

原题:1009. Product of Polynomials (25)解题思路:1.设置三个数组分解保存结果和输入的多项式, 按多项式乘法算出结果即可。C++代码如下:#include#includeusing namespace std;double a[1001], b[1001], c[2001]; //注意结果数组要更大int main(

2017-09-10 21:15:37 168

原创 PAT (Advanced) 1008. Elevator (20)

原题:1008. Elevator (20)解题思路:1.按题意模拟即可。C++代码如下:#include#includeusing namespace std;int main(){ int n; while(scanf("%d", &n) != EOF) { int now = 0;

2017-09-10 20:32:05 178

原创 PAT (Advanced) 1007. Maximum Subsequence Sum (25)

原题:1007. Maximum Subsequence Sum (25)解题思路:1.设A[n]为对应的保存原始序列a[n]的以每个元素为结尾的子序列的和, 初始化时与a[n]相同, 同时设定一个len[n]记录每个子序列的长度。2.由题设求最大子序列和,则将每个A[i](0 3.每个A[i]的求解,A[i]与A[i-1] 有如下关系:A[i] = max(A

2017-09-09 20:52:29 152

原创 PAT (Advanced) 1006. Sign In and Sign Out (25)

原题:1006. Sign In and Sign Out (25)解题思路:1.设计一个结构体保存相应的id, 签到时间和签退时间。2.分解根据签到时间和签退时间的早晚, 设计相应的排序依据的函数, 用sort函数进行排序后, 输出相应的id即可。c++代码如下:#include#includeusing namespace std;const

2017-09-09 20:33:48 211

原创 PAT (Advanced) 1005. Spell It Right (20)

原题:1005. Spell It Right (20)思路如下:1.将英文字符串与数字对应做好表格2.求出sum, 再分解sum, 最后根据表格输出3.注意 0 的特殊处理c++代码如下:#include#include#includeusing namespace std;char a[110];char table[10][10] =

2017-09-09 20:14:48 163

原创 PAT (Advanced) 1004. Counting Leaves (30)

原题:1004. Counting Leaves (30)典型的树的层序遍历问题,用层序遍历或者广度优先搜索方法解决:1. 用vector动态记录每个点的孩子的数目。2.赋予相应的层号,在遍历中每当层号发生变化,说明该层遍历结束,应记录统计值。c++代码如下:#include#include#include#includeusin

2017-09-08 21:43:16 182

原创 PAT (Advanced) 1003. Emergency (25)

原题:1003. Emergency (25)典型的最小路径问题,注意以下即可:1.需设置一个数组记录到当前点的最小路径数,更新最小路径时,继承上一点的路径数即可,最小路径长度相等时,需要加上上一点的路径数。2.需额外设置一个数组记录救护队的数目,并作为第二判断依据,在路径相等时,取最大值即可。注:Dijkstra算法的大致流程:设定两个点集,一个为访问过的,一个为

2017-09-07 20:48:04 458

原创 PAT (Advanced) 1002.A+B for Polynomials (25)

原题:1002. A+B for Polynomials (25)思路:1.可开辟相应的数组a[n],b[n],c[n]来存储两个多项式和最终结果,a[i]保存相应的i次项的系数。2.统计c[n]中系数不为0的项获得其项数。注:为了优化空间可以只开辟一个保存结果的数组c[n],在多项式输入后直接累加到c[n]中即可。c++代码如下#include#incl

2017-09-06 20:12:19 197

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除