PAT(Advanced Level)
文章平均质量分 79
荡秋千de猪
这个作者很懒,什么都没留下…
展开
-
1044. Shopping in Mars
【题意】 找到和不小于一个给定值、但尽可能小的所有子串【思路】 两个指针,分别指向子串头尾,具体看代码(有优化,比如说找到一个满足要求的子串后,下一次扫描左指针右移一位,右指针的起始位置就保持在上一次右指针的位置即可)。【注意】 一开始有个case我一直超时,感觉也优化过了想不出来哪里有问题,于是跑去看看别人的思路,看见原创 2015-01-16 22:17:35 · 364 阅读 · 0 评论 -
1050.String Subtraction
【题意】 给出两个字符串,将后一个字符串中出现过的字符从前一个字符串中删去【思路】 用set记录后一个字符串中出现过的字符即可#include #include #include using namespace std;int main(int argc, char const *argv[]){ string str[2]原创 2015-01-19 23:47:09 · 310 阅读 · 0 评论 -
1053.Path of Equal Weight
【题意】 给定一棵树,各个节点有编号及权值,再给出一个目标权值,找到所有从根节点到叶节点且权值之和等于目标权值的路径。路径需要按照权值的非递增顺序输出【思路】 从根开始DFS即可。需要注意的是输出要按照权值的非递增顺序,所以对于每个读入的非叶节点的子节点列表,要按照权值的非递减顺序排序,然后再开始DFS#include #include原创 2015-01-19 23:50:12 · 379 阅读 · 0 评论 -
1052.Linked List Sorting
【题意】 给出内存中一些节点的地址和内容,返回对关键字排序的链表的地址、内容及下一个内存地址【思路】 用一个map存储节点地址和内容的关系,然后从起始地址起遍历一遍链表节点,并将这些节点存入一个vector,最后对vector按关键字排序、输出即可【注意点】 1. 内存中可能会有多余的节点信息,所以需要遍历链表,只原创 2015-01-19 23:49:07 · 340 阅读 · 0 评论 -
1051.Pop Sequence
【题意】 对于最大深度给定的栈,判断几个序列是否可能为入栈顺序为1到n的序列对应的出栈序列【思路】 1. 对于出栈序列中的任一个数,在它后面出栈的比它小的数必定是按照递减顺序出栈的。从后往前计算出每个位置对应的递减序列长度是否超出栈的容量,并判断是否比自己小的数不构成递减序列,如此便可判断出栈序列是否可行; 2. AC了原创 2015-01-19 23:48:11 · 365 阅读 · 0 评论 -
1058.A+B in Hogwarts
【题意】 在给定进制下的两数相加【思路】 直接加即可#include #include using namespace std;int main(int argc, char const *argv[]){ int Galleon[2],Sickle[2],Knut[2]; for(int i=0; i<2; i++){原创 2015-01-22 14:45:36 · 312 阅读 · 0 评论 -
1059.Prime Factors
【题意】 对给出的数分解质因数【思路】 从小到大试探每个素数是不是给出的数的质因数,若是则不断地除直到不是为止,输出此素数和对应的指数。【注意点】 对输入数字为1需要特殊处理#include using namespace std;bool isPrime(long long num){ if(num原创 2015-01-22 14:47:19 · 569 阅读 · 0 评论 -
1055.The World's Richest
【题意】 给出一些人的名字、年龄、财富,求一定年龄范围内、一定人数内的财富榜【思路】 先按财富、年龄、姓名顺序排个序,然后筛选出年龄符合要求的输出【注意点】 需要进行剪枝才能过Case 1(目测Case 1的测试数据前面是1串同一年龄但不在要求范围内的人,若不剪枝会超时。其实我用先对年龄排序,再二分法找上下限位置的方法也原创 2015-01-21 19:34:45 · 328 阅读 · 0 评论 -
1056.Mice and Rice
【题意】 就是类似各种赛事的排名规则【思路】 用一个vector存下需要继续比较的数的下标,重复比较直到胜者只剩一个即可#include #include using namespace std;typedef struct{ int weight; int rank;}mouse;int main(int argc,原创 2015-01-21 19:38:42 · 299 阅读 · 0 评论 -
1060.Are They Equal
【题意】 给出两个浮点数,判断在给定的有效位数下它们是否相等【思路】 因为数的范围很大,所以用string保存,然后删除字符串前面多余的0,计算出指数。进而将有效位数保存在两个新的字符串中,不够的位数用0补。最后比较两个有效位数字符串和阶码是否相等即可【注意点】 这种题目一看就是在细节处有很多坑的。。。原创 2015-01-22 14:51:35 · 432 阅读 · 0 评论 -
1057.Stack
【题意】 在一般的栈的基础上,增加一个取中位数的功能【思路】 1. 采用树状数组记录数字出现次数的部分和 http://blog.csdn.net/eli850934234/article/details/8864087 2. 用两个集合(要用multiset)存储高低两部分的数,在Push和Pop后保原创 2015-01-22 14:44:17 · 347 阅读 · 0 评论 -
1049.Counting Ones
【题意】 给出一个正数n,数出从1~n的所有数字中1的个数【思路】 一位位地从低到高数,注意每一位为0、为1的特殊情况的处理即可#include using namespace std;int main(int argc, char const *argv[]){ long long number,tmp,p; int cnt原创 2015-01-18 15:47:17 · 318 阅读 · 0 评论 -
1048.Find Coins
【题意】 给出一些硬币币值和一个需要支付的总价,判断是否能用两个硬币支付,能的话输出较小币值最小的组合【思路】 用个map存下有的硬币币值的个数,然后对于不超过总价一半的币值从小到大遍历,找到第一个满足a和m-a两种币值都存在或2*a等于总价且a有至少两个的币值,输出即可,找不到就输出"No Solution"#include #inc原创 2015-01-18 15:46:33 · 338 阅读 · 0 评论 -
1033. To Fill or Not to Fill
【题意】 给出了两个城市之间加油站的位置和每单位量汽油的价格,求出到达目的地所需的最少油价,若到不了就返回能到达的最远距离。【思路】 用贪心的思想去做,不过这题的贪心有点复杂,必须要好好静下心来分析才能找到规律。总结了一下大概可分下面几种情况(maxDist为加满油后车子能行驶的最远路程): 1. 前方maxDist有终点原创 2015-01-15 10:42:20 · 451 阅读 · 0 评论 -
1041.Be Unique
【题意】 从给出的一串数字中找出第一个不重复的【思路】 用一个map记录出现的数字的次数,用一个vector记录输入数字的顺序,最后扫一遍vector,查询map即可【注意点】 map是按key自动升序排序的,所以不能保持输入的顺序、需记录下输入的顺序#include #include #include原创 2015-01-16 12:54:14 · 362 阅读 · 0 评论 -
1035.Password
【题意】 给出一些账户的用户名和密码,对一些包含特定字符的密码进行替换并输出结果【思路】 直接码即可#include #include #include using namespace std;typedef struct{ string name; string password;}account;int main(原创 2015-01-15 23:24:12 · 413 阅读 · 0 评论 -
1042.Shuffling Machine
【题意】 给出一种洗牌的顺序,求按照这个顺序洗了k次之后牌的顺序【思路】 模拟下标变化即可#include using namespace std;char ch[5]={'S','H','C','D','J'};int main(int argc, char const *argv[]){ int changeOrder[原创 2015-01-16 14:23:11 · 427 阅读 · 0 评论 -
1034. Head of a Gang
【题意】 给出一些人互相通话的记录,根据通话关系以及时间找出其中的团伙以及每个团伙的leader【思路】 用map存下每个人姓名、通话时间、团伙编号、访问记号以及相互通话的人的关系,通过DFS找到共有几个团伙(即连通分量)。同时再用一个vector记录下每个团伙的总通话时间、成员列表,方便最后找到leader。#include #inc原创 2015-01-15 10:43:35 · 290 阅读 · 0 评论 -
1037.Magic Coupon
【题意】 给出一些优惠券面值和一些商品价格,可以将某一优惠券的面值乘以某一商品价格,若结果为正则能拿回那么多前,否则支付那么多钱。题目要求能拿回来的钱尽量多【思路】 对于优惠券和价格分别分正数和负数排序,两者都按照绝对值的递减顺序排,然后对于两个正数数列、两个负数数列分别从前往后对应相乘并累加结果即可#include #include原创 2015-01-15 23:27:03 · 347 阅读 · 0 评论 -
1039.Course List for Student
【题意】 给出每个课程的选修学生以及要查询自己课程的学生名字,返回每个学生相应选修了的课程号【思路】 用vector存下每个学生选的课程,排个序即可【注意点】 这道题卡时间,一开始我用的是map>存每个学生的课程号,但最后一个case会超时。后来看了网上别人的解题报告才发现题目中一个重要信息:学生的名字前三位是大写英文字原创 2015-01-16 12:46:08 · 429 阅读 · 0 评论 -
1047.Student List for Course
【题意】 给出一些学生的课程列表,输出所有课程的选修学生名字列表【思路】 用个map>存下所有课程的学生名字列表,要输出时先sort一下即可【注意点】 1. 得用char*、scanf、printf,否则会超时; 2. 就算一个课程没有一个学生选,也要输出课程号和0#includ原创 2015-01-18 15:45:20 · 336 阅读 · 0 评论 -
1046.Shortest Distance
【题意】 给出一个环相邻两点之间的距离,求给定的节点对之间的最短距离【思路】 记录下环的总长和各个节点到第一个节点的距离dist,然后判断两节点i、j的距离就变成求min{|dist[i]-dist[j]|, m-|dist[i]-dist[j]|}#include #include using namespace std;int原创 2015-01-18 15:44:27 · 304 阅读 · 0 评论 -
1045.Favorite Color Stripe
【题意】 给出一个数字串,找到其中优先级非递减的最长子序列长度【思路】 实质就是 LIS(最长上升子序列) 问题。LIS 的参考资料:http://blog.csdn.net/sdjzping/article/details/8759870另外也看到用 LCS(最长公共子序列)思路做的,可以看看拓宽思路。LCS 参考资料:http://h原创 2015-01-18 10:45:03 · 325 阅读 · 0 评论 -
1054.The Dominant Color
【题意】 从一串数中找出出现次数超过总数一半的数【思路】 边读数字边判断,两数不同则抵消,剩下的数就是要求的数#include using namespace std;int main(int argc, char const *argv[]){ int m,n,cnt; long long number,tmp; cin原创 2015-01-21 19:15:46 · 261 阅读 · 0 评论 -
1061.Dating
【题意】 对两对字符串分别进行比对,找到满足一些条件的相同字符【思路】 从前往后扫一遍即可【注意点】 判断前两个相同字符时大写字母的范围不是A到Z,这点注意了基本就没问题了#include #include #include using namespace std;const string day[原创 2015-01-22 18:34:21 · 340 阅读 · 0 评论 -
1064.Complete Binary Search Tree
【题意】 给出一个BST的所有元素,要求这个BST同时是完全二叉树,输出这个二叉树的层先遍历序列【思路】 对于一个完全二叉树,总的节点数给出后左右子树的节点数就确定了,再结合BST的中序遍历是递增数列的特性,就可以递归地建树了。层先遍历自然是借助队列实现#include #include #include #include #in原创 2015-01-22 18:50:03 · 344 阅读 · 0 评论 -
1074.Reversing Linked List
【题意】 对于一个存数的链表,每k个节点倒置一次,从头结点到尾节点输出结果【思路】 先用map存下输入的节点,然后按照从头到尾的顺序放入一个vector中,最后借助reverse函数即可实现倒置【注意点】 之前做1052题的时候我默认所有节点都是有用的,结果错了几次才发现可能有多余节点。这次一开始就注意了这个问题于是1A原创 2015-01-25 17:25:50 · 429 阅读 · 0 评论 -
1069.The Black Hole of Numbers
【题意】 求数字黑洞6174的计算过程【思路】 直接码【注意点】 若输入的数就是6174也至少要输出一次#include #include #include using namespace std;vector num2vec(int num){ vector res; res.resize(原创 2015-01-24 17:37:48 · 354 阅读 · 0 评论 -
1076.Forwards on Weibo
【题意】 根据微博的粉丝网络,计算一条微博最多被转发的次数【思路】 BFS可搞定,DFS应该也可以【注意点】 BFS时进队列就要把visited标记一下,否则可能重复计数,当然这个问题在测试数据中就已经体现了#include #include #include using namespace std;原创 2015-01-25 17:27:41 · 426 阅读 · 0 评论 -
1092.To Buy or Not to Buy
【题意】 判断字符串1是否包含了字符串2所有的字符,是的话输出多余字符数,否则输出缺的字符数【思路】 直接码即可#include #include #include using namespace std;int main(){ string str[2]; map mm; for (int i = 0; i < 2; ++i){原创 2015-03-14 20:42:24 · 334 阅读 · 0 评论 -
1093.Count PAT's
【题意】 找出给出的字符串中PAT子串的个数【思路】 对于每一个A,PA的个数由前面P的个数决定;对每一个T,PAT的个数由前面PA的个数决定,所以只需要从前往后扫一遍,记下中间P的累计个数、PA的累计个数即可得到答案#include #include using namespace std;#define SIZE 1000000007原创 2015-03-14 20:44:57 · 354 阅读 · 0 评论 -
1094.The Largest Generation
【题意】 给出一个树,找到节点数最多的一层以及相应的节点数【思路】 先将输入读入一个map中,然后用队列层先遍历即可#include #include #include #include #include using namespace std;int main(){ int n, m; cin >> n >> m; map原创 2015-03-14 20:45:39 · 344 阅读 · 0 评论 -
1095.Cars on Campus
【题意】 给出一些车进出校园的记录,计算特定时间点停在学校里的车的数量,并输出停的时间最长的车的车牌号以及停车时长。【思路】 这题和1016有点像,都要匹配 in 和 off。先按照车牌号和时间排序,筛去错误的车辆进出记录并计算最长停车时长以及相应的车辆;再按照时间排序,对于每一条记录模拟车辆进出过程即可。#include #include原创 2015-03-14 20:46:45 · 957 阅读 · 0 评论 -
1096.Consecutive Factors
【题意】 找出一个给定数字分解因数的所有可能中连续因数最长的串【思路】 暴力找每一个数字为起始的因数串即可#include #include using namespace std;int main(){ int n; cin >> n; int maxCnt = 1, first = n; for (int i = 2; i <原创 2015-03-24 18:32:19 · 525 阅读 · 0 评论 -
1097.Deduplication on a Linked List
【题意】 给出内存中的链表信息,将给定头结点的链表拆分成节点绝对值不重复的子链表以及剩余节点构成的另一个子链表。【思路】 直接码即可,用set记录出现过的绝对值。题目的坑估计和1052、1074差不多,所以成功避开。#include #include #include #include #include using namespace原创 2015-03-24 18:33:38 · 331 阅读 · 0 评论 -
1099.Build A Binary Search Tree
【题意】 对于一个给出结构的BST,将给定的数字填入其中并输出层先遍历序列【思路】 BST的中序遍历是非递减的,利用这一点即可用一次中序遍历把数字填上。层先遍历用队列实现#include #include #include #include #include using namespace std;struct BiNode{ i原创 2015-03-24 18:34:49 · 419 阅读 · 0 评论 -
1078.Hashing
【题意】 考查哈希表的知识,解决冲突用的是平方增量【思路】 直接码即可【注意点】 记总容量为n,则判断是否有位置放时至多要判断n次,因为a^2≡(a+n)^2(mod n)#include #include #include using namespace std;vector mark;boo原创 2015-01-26 14:59:01 · 420 阅读 · 0 评论 -
1077.Kuchiguse
【题意】 找几个字符串的最长公共后缀【思路】 从后往前看即可【注意点】 刚开始想多了,以为到空格就要截断= =去掉这个判断后果断AC#include #include #include using namespace std;int main(int argc, char const *argv原创 2015-01-26 14:54:08 · 453 阅读 · 0 评论 -
1062.Talent and Virtue
【题意】 对结构体的排序问题【思路】 对于圣人、君子、愚人、小人设置一个排序的优先级即可#include #include #include #include #include using namespace std;typedef struct{ char id[9]; int v_g; int t_g; int原创 2015-01-22 18:38:29 · 335 阅读 · 0 评论 -
1063.Set Similarity
【题意】 给出几个集合(有重复元素),按照给出的规则计算几个集合间的相似度【思路】 用set存下每一个集合,比较时记两个集合元素个数分别为a和b(无重复),通过在一个集合中找另一个集合中的元素得出并集的元素个数c,则相似度为(a+b-c)/c*100%#include #include #include #include usin原创 2015-01-22 18:43:44 · 354 阅读 · 0 评论