PAT
文章平均质量分 72
siukwan
这个作者很懒,什么都没留下…
展开
-
1013. Battle Over Cities (25)
1.采用邻接矩阵才不会超内存,一开始采用edge的结构体存储,结果出现段错误(内存爆满)2.采用并查集的方法,统计时,遇到破坏的城市则不处理,否则进行合并3.最终检查并查集的集合数,集合数-2就是结果(集合数m减去破坏的城市,即m-1,令n=m-1,剩下的集合数n,需要采用n-1条边才能连接起来)//#include//#include #include#include原创 2015-11-04 12:41:16 · 440 阅读 · 0 评论 -
1015. Reversible Primes (20)
1.需要熟悉进制转换的方法2.进制转换的第一步,通过求余求出string,此时的string恰好是倒序的正确的进制转换:while (num != 0) {//求余,把它转化为d进制格式的数,但求出来的string刚好是反的 char c = num%d + '0'; s += c; num /= d; } for (int i = 0; i < s.si原创 2015-11-04 12:59:10 · 280 阅读 · 0 评论 -
1003. Emergency (25)
1.采用dijkstra算法,算出最小耗费cost2.利用最小耗费cost最为约束条件,进行遍历搜索(循环->锁->dfs->解锁)//#include//#include #include#include //#include#include#include#include//#include//#include//#include //#include "原创 2015-11-04 12:15:32 · 401 阅读 · 0 评论 -
1009. Product of Polynomials (25)
1.直接创建最大的数组2.遍历所有的组合情况//#include//#include #include#include //#include#include#include#include//#include//#include//#include //#include "func.h"//#include #include#include#include#原创 2015-11-04 12:31:54 · 292 阅读 · 0 评论 -
1011. World Cup Betting (20)
1.较为简单2.最后的公式为(a*b*c*0.65-1)*2//#include//#include #include#include //#include#include#include#include//#include//#include//#include //#include "func.h"//#include #include#includ原创 2015-11-04 12:36:54 · 298 阅读 · 0 评论 -
1004. Counting Leaves (30)
1.可为多叉树,采用vector保存子树名称2.采用map记录树节点3.采用广度遍历,输出每层的叶子节点数量节点代码如下:struct node{ vector child; int head; string ID; node() :head(-1), child(0), ID(""){};};源代码://#include//#include #inc原创 2015-11-04 12:21:53 · 286 阅读 · 0 评论 -
1005. Spell It Right (20)
1.主要是string的位操作,string的每一位都是一个char//#include//#include #include#include //#include#include#include#include//#include//#include//#include //#include "func.h"//#include #include#incl原创 2015-11-04 12:25:46 · 303 阅读 · 0 评论 -
1006. Sign In and Sign Out (25)
1.采用algorithm.h里面的sort函数,对时间进行排序,需要重写比较函数//#include//#include #include#include //#include#include#include#include//#include//#include//#include //#include "func.h"//#include #includ原创 2015-11-04 12:27:46 · 281 阅读 · 0 评论 -
1007. Maximum Subsequence Sum (25)
1.注意判断全为负数的情况,第一个数是否为负数,不要漏判断2.实际上采用动态规划,dp[i]=max{dp[i-1]+num[i],num[i]},dp[i]一定会包含当前的数字num[i],但是可以简化为判断dp[i-1]是否为负数//#include//#include #include#include //#include#include#include#include原创 2015-11-04 12:29:10 · 324 阅读 · 0 评论 -
1012. The Best Rank (25)
1.首先是平均分A,再到C,M,E2.通过重写不同的cmp函数,使用algorithm.h里面的sort进行排序3.如果分数相同,则排名相同,例如90,80,80,80,70,则排名为1,2,2,2,5//#include//#include #include#include //#include#include#include#include//#includ原创 2015-11-04 12:38:02 · 1251 阅读 · 1 评论 -
1016. Phone Bills (25)
1.判断记录好坏,把所有记录以string存起来,按照字典序排序,相邻的两条记录满足要求:第一条为on-line且第二条为off-line,才是成功匹配;2.采用计算00:00:00到现在的耗费和分钟数,这个方法比较简单3.最重要的:题目中只强调至少有一条匹配成功的记录,不是说每个人都至少有一条匹配成功的记录,所以没有成功匹配记录的人不输出(主要卡在这)/*1.判断记录好坏,把所有记原创 2015-11-04 12:47:08 · 437 阅读 · 0 评论 -
1017. Queueing at Bank (25)
1.在17:00:00前(包括17整)来的客户,都要确保一直执行完,即使超过了17点2.只是对17:00:00后来的客户拒绝服务3.逻辑顺序有问题,需要先插入,然后再减时间。4.首次插入,需要判断时间是否合适。5.直接对每一秒进行模拟,目前N=10000,K=100,对于N*K的复杂度,PAT能够接受,在400ms内/*1.在17:00:00前(包括17整)来的客户,原创 2015-11-04 22:04:26 · 606 阅读 · 0 评论 -
1018. Public Bike Management (30)
1.采用dijkstra计算出最小耗费cost,再用最小耗费cost作为约束条件,进行遍历2.关键在于后面如何选择最优的路径,选择需要发送最小数量的路径,如果两者发送的数量相同,则选择take数量最小的路径//// main.cpp// the beauty of programming//// Created by siukwan on 15/10/26.//原创 2015-11-05 00:51:09 · 373 阅读 · 0 评论 -
1020. Tree Traversals (25)
1.主要是根据后序和中序还原二叉树还原函数为:class TreeNode{public: int val; TreeNode* l, *r; TreeNode(int x) :val(x), l(NULL), r(NULL){}; TreeNode() :val(0), l(NULL), r(NULL){};};TreeNode* build(vector&postOrde原创 2015-11-05 22:57:56 · 343 阅读 · 0 评论 -
1019. General Palindromic Number (20)
1.采用求余的方式转换成以radix为基数的数2.使用vector来存储底数,因为后面需要以底数的形式显示,而不是以位的形式显示print N as the number in base b in the form "ak ak-1 ... a0".3.注意输入为0的情况//#include//#include #include#include //#include原创 2015-11-05 22:11:06 · 330 阅读 · 0 评论 -
1022. Digital Library (30)
1.采用map> 的结构进行存储,可利用string自身带有的排序进行排序2.如果采用map> ,输出的时候则需要考虑ID为0001111的,前面带有0的情况(主要卡在这里)//#include//#include #include#include //#include#include#include#include//#include//#include//#原创 2015-11-06 15:06:51 · 234 阅读 · 0 评论 -
1025. PAT Ranking (25)
1.用string记录ID2.熟悉sort函数的用法,选取合适的范围排序3.题目要求:相同分数的排名相同,分数相同的情况下ID需要按照递增排列//#include//#include #include#include //#include#include#include#include//#include//#include//#include //#in原创 2015-11-07 13:21:02 · 221 阅读 · 0 评论 -
1023. Have Fun with Numbers (20)
1.20位的数字,超过了unsigned long long的取值2.采用string进行存储和检测3.用哈希进行相同位检测//#include//#include #include#include //#include#include#include#include//#include//#include//#include //#include "func.h原创 2015-11-07 10:53:56 · 241 阅读 · 0 评论 -
1024. Palindromic Number (25)
1.使用string存储数字2.用朴素的方法检测回文3.需要考虑进位,和首位为0的情况(字符串翻转相加,为了避免长度不等,不需要去掉前面的‘0’)//#include//#include #include#include //#include#include#include#include//#include//#include//#include //#incl原创 2015-11-07 11:18:05 · 233 阅读 · 0 评论 -
1026. Table Tennis (30)
1.整体思路为:先遍历vip桌子和vip玩家,如果有匹配成功的,进行匹配;然后再遍历一轮所有的桌子和等候的玩家,有匹配的进行匹配;2.被卡的地方:1)关于秒的四舍五入,是按照大于等于30秒,进一分钟,小于30秒则舍去的原则;最后的一个测试用例就是检验这个30秒的2)在遍历所有的玩家时,由于可能存在已经被前面服务了的vip玩家,所以需要额外加一个处理,使得playIndex指向的是未被服原创 2015-11-13 18:47:08 · 1342 阅读 · 4 评论 -
1027. Colors in Mars (20)
1.主要涉及到进制的转换,10进制到13进制2.处理0和个位数,前面需要补03.可以自行输出0~168检测函数的鲁棒性//#include//#include #include#include //#include#include#include#include//#include//#include//#include //#include "func.h"/原创 2015-11-13 19:52:11 · 222 阅读 · 0 评论 -
1028. List Sorting (25)
1.这道题目使用C++的cin和cout均会超时;2.需要使用scanf输入,printf输出;3.使用char[]存储ID和name,使用strcmp进行比较,strcmp(a,b),当ab,strcmp(a,b)>0下面截图为部分实验结果:1)程序仅执行cin输入数据,可以看出使用cin仅输入就耗费了137ms2)程序仅执行cin和cout,最后一个测试点已原创 2015-11-13 22:36:52 · 221 阅读 · 0 评论 -
1030. Travel Plan (30)
1.仍然是先使用Dijkstra求出最短距离,然后使用深度搜索遍历,以最短距离作为条件进行剪枝,最后求出最短距离的基础上耗费最小的路径//#include//#include #include#include //#include#include#include#include//#include//#include//#include //#include "f原创 2015-11-14 19:50:52 · 257 阅读 · 0 评论 -
1029. Median (25)
1.这道题目与leetcode中的Median of Two Sorted Arrays相似,只是偶数情况取前一个,不用求平均2.采用二分法进行查找数组分为如下部分{a[0],a[1],a[2],....a[i-1] | a[i],a[i+1],...a[m-1]}{b[0],b[1],b[2],....b[j-1] | b[j],b[j+1],...b[n-1]}原创 2015-11-14 18:03:42 · 378 阅读 · 0 评论 -
1031. Hello World for U (20)
1.通过 n1 = n3 = max { k| k 2 for all 3 2 <= N } with n1 + n2 + n3 - 2 = N的条件,通过for循环求出最大的n1//#include//#include #include#include //#include#include#include#include//#include原创 2015-11-14 20:41:44 · 541 阅读 · 0 评论 -
1032. Sharing (25)
1.直接建立两个100001长度的数组,一个用来当作链表使用,一个用来当作后面的哈希查询使用2.遍历第一个链表,把第一个链表中存在的节点记录在哈希表中3.遍历第二个链表,如果哈希中存在某个节点的值,就break,最终输出该节点值4.把地址改为int存储,最后输出注意-1和其他的补0的情况//#include//#include #include#include //#inc原创 2015-11-14 22:07:53 · 943 阅读 · 0 评论 -
1035. Password (20)
1.简单的字符串处理2.注意0,1个没有修改是,是is,大于1个是,是are//#include//#include #include#include //#include#include#include#include//#include#include//#include //#include "func.h"//#include #include#incl原创 2015-11-15 22:37:54 · 234 阅读 · 0 评论 -
1036. Boys vs Girls (25)
1.简单的重写比较函数//#include//#include #include#include //#include#include#include#include//#include#include//#include //#include "func.h"//#include #include#include#include#include#includ原创 2015-11-15 23:02:19 · 219 阅读 · 0 评论 -
1039. Course List for Student (25)
1.存在超时的危险2.根据题意,名字由3个字母和1个数字组成,所以共26*26*26*10=175760种可能,直接开辟内存AC截图://#include//#include #include#include //#include#include#include#include//#include#include//#include //#includ原创 2015-11-16 13:38:25 · 264 阅读 · 0 评论 -
1047. Student List for Course (25)
1.和前面的1039 Course List for Student (25) 相类似2.刚开始使用vector> 格式存储course,后面在输入数据的时候就已经超时3.随后改为vector> 存储,在后面进行sort,没有超时AC代码如下://#include//#include #include#include //#include#include#inc原创 2015-11-20 13:45:19 · 316 阅读 · 0 评论 -
1049. Counting Ones (30)
1.和leetcode里面的Number of Digit One一样2.算法说明:如3141592,在m(digitDivide)=100时,即要求计算百位上“1”的个数其中a为31415,b为92,31415中出现了3142次“1”,因为每10个数里面出现1次“1”。而实际上,31415是3141500,所以把31415中1的个数再乘以m。如3141400~3141499中,前缀为原创 2015-11-20 14:48:17 · 276 阅读 · 0 评论 -
1100. Mars Numbers (20)
1.十进制与13进制之间的转换2.注意输入为13,26,39整数时,只输出一个marsNum,后面低位的0不输出AC代码://#include//#include #include#include //#include#include#include#include//#include#include//#include //#include "func.原创 2015-11-20 16:23:02 · 517 阅读 · 0 评论 -
1034. Head of a Gang (30)
1.该题目涉及到了并查集和一些统计2.过程1)收集根据记录,存储每个人的总通话时间和他的联系人,同时进行并查集的合并。2)根据并查集中分好的集合,进行集合的分类,并且分别统计各集合的名单和总通话时间3)遍历上面的集合,找出符合条件的gang和gang的头目注:A "Gang" is a cluster of more than 2 persons who are relat原创 2015-11-15 22:16:24 · 316 阅读 · 0 评论 -
1037. Magic Coupon (25)
1.比较简单2.最大的正数coupon与最大的正数product相乘3.最小的负数coupon与最小的负数product相乘(最小的负数即绝对值最大)4.其他没有匹配的就不购买了。//#include//#include #include#include //#include#include#include#include//#include#includ原创 2015-11-15 23:22:07 · 242 阅读 · 0 评论 -
1095. Cars on Campus (30)
1.事件模拟2.首先读取所有的汽车记录数据,筛选出合理的进入和离开时间,放到一个vector里面,对这个vector进行排序处理,进入时间早的放在前面3.对每一秒进行模拟,已经进入的车辆用一个小根堆进行存储维护,离开时间早的,排在堆顶3.取下一次进入校园车辆的时间,下一次离开校园车辆的时间,下一次查询的时间,取三者的最小值,直接跳那个时间点,进行处理,优化时间复杂度4.一开始第4个原创 2015-11-22 18:36:03 · 567 阅读 · 0 评论 -
1091. Acute Stroke (30)
1.主要是考察并查集2.每输入一个像素点,就检测它的上边,左边,上一层的位置是否为1,为1的话,归为一个集合3.最后对集合的数量进行统计AC代码://#include//#include //#include//#include//#include //#include "func.h"//#include #include#include#inclu原创 2015-11-23 13:55:32 · 641 阅读 · 0 评论 -
1038. Recover the Smallest Number (30)
1.题目是把一些数,通过组合,变成一个最小的数(在这些数的所有组合中最小)2.使用贪心算法,贪心标准为:1)如果两个数中,数a是数b的前缀,或者数b是数a的前缀,那么判断字符串相加后a+b与b+a的大小,进行确定前后顺序2)如果不是上面1)中的两种情况,直接按照string进行大小比较3.该题目可以通过小量的修改,改为求最大的数AC源代码:#include #原创 2015-11-16 12:53:29 · 411 阅读 · 0 评论 -
1041. Be Unique (20)
1.统计各个数字出现的次数2.输出第一个出现次数为1的数字AC代码://#include//#include #include#include //#include#include#include#include//#include#include//#include //#include "func.h"//#include #include#in原创 2015-11-16 13:46:59 · 223 阅读 · 0 评论 -
1042. Shuffling Machine (20)
1.建立一个shuffling数组,把j号卡放在shuffling[j]的位置AC代码://#include//#include #include#include //#include#include#include#include//#include#include//#include //#include "func.h"//#include原创 2015-11-16 16:44:28 · 254 阅读 · 0 评论 -
1033. To Fill or Not to Fill (25)
1.这道题目比较有趣,给出了加油站的位置和每个站的油价,求最小耗费,如果不能到达终点,则求能走的最远距离2.思路:1)采用一个油箱数组的概念,实则是一个vector,当成队列使用,这个vector记录了加了的油的价格,油的容量,通过这些油走过的长度和耗费;2)每到一个站,计算从上一站达到这个站所需要的油needGas3)从油箱数组容量不为0的油中开始遍历,直接完全满足needGas原创 2015-11-15 16:50:26 · 249 阅读 · 0 评论