
PAT Advanced Level
文章平均质量分 67
gzxcyy
这个作者很懒,什么都没留下…
展开
-
【PAT Advanced Level】1003. Emergency (25)
利用深度优先搜索获得最短路径以及最多的支援。看到有人是先用Dijstra算法获得最短路径,再用DFS求得最短路径的条数,这个以后再实现原创 2013-09-29 15:52:23 · 852 阅读 · 0 评论 -
【PAT Advanced Level】1016. Phone Bills (25)
注意细心,简单模拟题。#include#include#include#include#include#includeusing namespace std;const int HOURS=24;const int NAME=21;typedef struct Record{ char name[NAME]; int mou; int dd; int hh; i原创 2013-11-02 22:06:17 · 825 阅读 · 0 评论 -
【PAT Advanced Level】1017. Queueing at Bank (25)
先排序,然后模拟事件。简单的模拟题。#include #include #include using namespace std;const int opened = 8 * 60 * 60;const int closed = 17 * 60 * 60;struct customer{ int hour; int minute; int second; int原创 2013-11-03 15:25:37 · 1050 阅读 · 1 评论 -
【PAT Advanced Level】1018. Public Bike Management (30)
这题还是比较有难度的。题目中要纪录的东西比较多,比较繁琐。这题我考虑先用Dijkstra算法计算单源最短路径,在计算过程中纪录每个点的最短路径的前序(如果最短路径有多条,每个前序都需要纪录),然后再递归深搜出具有最少携带自行车数量的路径。这题还有几个点没过,先放着吧,感觉整体思路没什么问题。#include #include #include #include #inclu原创 2013-11-04 21:55:08 · 1047 阅读 · 0 评论 -
【PAT Advanced Level】1019. General Palindromic Number (20)
这题就是简单的模拟题,为了确保不越界,我使用了long long要注意加入0的判断!#include #include #include using namespace std;int main(){ long long a, b; cin>>a>>b; if(a == 0) { cout<<"Yes"<<endl<<0<<endl; return 0;原创 2013-11-04 21:56:36 · 872 阅读 · 0 评论 -
【PAT Advanced Level】1020. Tree Traversals (25)
这题给定后序和中序遍历的结点顺序,要求层序遍历的结点顺序。可以通过后序和中序构造出这棵树,然后再BFS给出层序遍历。构造的规则为:1. 找到后序遍历的最后一个元素,这个元素肯定是整个树的根。2. 根据上面找到的元素,将中序遍历的序列分为两边,左边肯定是根的左子树,右边是根的右子树3. 递归左子树和右子树#include #include #include #inclu原创 2013-11-06 12:58:30 · 866 阅读 · 0 评论 -
【PAT Advanced Level】1021. Deepest Root (25)
这题分两个步骤:1. 求出图中有几个连通子图2. 如果只有一个连通图,找出最长的路径(图的直径)我直接用了一个DFS求连通子图的个数,其实更通用的方法是并查集。找出最长路径,我们进行了n次DFS,每次以一个节点作为根节点。后来看了网上的解法,其实只需要两次DFS就可以求得。昨天我刚刚看了怎么求树的直径,今天该用到的时候又忘了,真是学的不牢啊。具体求法见http://blog.c原创 2013-11-06 15:19:43 · 818 阅读 · 0 评论 -
【PAT Advanced Level】1022. Digital Library (30)
这题其他没什么,就是输入输出比较麻烦,还怪自己太不熟练。#include #include #include #include #include #include using namespace std;struct book{ string id; string title; string author; vector keywords; string pub原创 2013-11-07 18:51:09 · 1118 阅读 · 0 评论 -
【PAT Advanced Level】1025. PAT Ranking (25)
简单模拟题。#include #include #include #include #include using namespace std;struct stu{ string reg; int score; int final_rank; int location_num; int local_rank; stu(string r, int s, int ln,原创 2013-11-07 21:24:37 · 865 阅读 · 0 评论 -
【PAT Advanced Level】1024. Palindromic Number (25)
回文数#include #include #include #include #include #include #include #include using namespace std; string Reverse(string a) { string ans; for(int i = 0; i < a.size(); ++i)原创 2013-11-07 20:18:57 · 875 阅读 · 0 评论 -
【PAT Advanced Level】1023. Have Fun with Numbers (20)
#include #include #include #include #include #include #include #include using namespace std; void GetCntTable(string a, vector& cntTable) { cntTable.assign(10, 0); for(int i原创 2013-11-07 20:17:51 · 885 阅读 · 0 评论 -
【PAT Advanced Level】1029. Median (25)
#include #include #include #include using namespace std;vector v1;vector v2;int main(){ int a, b; long tmp; scanf("%d", &a); int i = 0; while (i < a) { scanf("%ld", &tmp); v1.push_原创 2013-11-10 16:14:07 · 924 阅读 · 0 评论 -
【PAT Advanced Level】1030. Travel Plan (30)
先用Djikstra算出最短路径,纪录下相同的最短路径,再回溯计算花费最少的路径。其实不用回溯,直接在比较最短路径的时候比较花费最少就可以了。#include #include #include #include using namespace std;struct node{ int index; int curDist; vector preCity; nod原创 2013-11-10 16:16:24 · 1003 阅读 · 0 评论 -
【PAT Advanced Level】1031. Hello World for U (20)
简单题,算算就可以了。#include #include using namespace std;int main(){ string s; cin>>s; int n1, n2; n2 = (s.size() % 2 == 1)?3 : 4; while (n2 <= s.size()) { n1 = (s.size() - n2)/2 + 1; if(n1原创 2013-11-10 16:17:41 · 931 阅读 · 0 评论 -
【PAT Advanced Level】1032. Sharing (25)
这题如果用C++标准库里的string的话,会超时,还是用int或者char数组来保存吧。先遍历一遍,每个节点打上标记,再换一个头,遍历第二遍,如果碰到标记,就是所求。#include #include #include using namespace std;struct node{ char s; int next; bool flag; node(char s原创 2013-11-10 16:20:33 · 892 阅读 · 0 评论 -
【PAT Advanced Level】1068. Find More Coins (30)
最近在学习动态规划,PAT中的这一题就是一个典型的dp问题。这一题和01背包问题很类似,M相当于背包问题中的背包容量,硬币面值相当于每件物品的重量,背包问题中要求物品价值最大,这里要求物品总重(面值和)等于M,从可选方案中选择最优的是根据给定的比较方法。我们解决问题的难点:如何选择出最小的序列?首先来看递归式:L(i, j)表示在前i号硬币中选择,并且总价值小于等于j的序列的最大面值和原创 2013-11-01 19:53:17 · 1949 阅读 · 1 评论 -
【PAT Advanced Level】1015. Reversible Primes (20)
转换进制&&逆序可以在一起进行,有一点技巧,不要用十进制数来表示低进制,容易溢出。#include #include using namespace std;bool isPrime(int n){ if(n < 2) return false; if(n == 2) return true; if(n % 2 == 0) return false; for(原创 2013-10-31 20:06:02 · 795 阅读 · 0 评论 -
【PAT Advanced Level】1005. Spell It Right (20)
本题要用字符串或者字符数组保存输入,不然会越界。还有就是本题中int转string使用了stringstream。#include #include #include using namespace std;string eng[10] = {"zero", "one", "two", "three", "four", "five", "six", "seven",原创 2013-10-11 20:58:34 · 764 阅读 · 0 评论 -
【PAT Advanced Level】1007. Maximum Subsequence Sum (25)
这题理解起来有点烦,如果用O(n^2)也可以做,当然是有O(n)的算法的,利用类似于贪心算法,从前往后遍历,每次都加上当前元素,如果小于0,则说明之前所有元素(包括当前元素)的最大子序列和小于0,我们就把当前和置为0,然后判断最大值是否小于当前和。我也说不清。。。下面摘抄别人的解释:重点的一个思想是:如果a[i]是负数那么它不可能代表最有序列的起点,因为任何包含a[i]的作为起点的原创 2013-10-14 14:23:17 · 1141 阅读 · 0 评论 -
【PAT Advanced Level】1002. A+B for Polynomials (25)
思路:先将两个多项式存入到两个数组中,再利用归并排序的方法合并两个多项式。注意:遇到相加后系数为0的项要舍弃,项的数目也不能+1。改进:写到一半发现项的指数给定了范围[0...1000],那么可以使用间址技巧,将项的指数看成数组的下标,这样扫描一遍就可以得到结果。#include #include #include #include using namespace std;原创 2013-09-29 15:44:03 · 767 阅读 · 0 评论 -
【PAT Advanced Level】1001. A+B Format (20)
一开始用了locale,但是提交显示段错误,然后就用了传统方法,转化为字符串处理。#include #include #include using namespace std;int main(){ int a,b; cin>>a>>b; int c = a + b; stringstream strStream; strStream<<c; //int转原创 2013-09-28 21:26:50 · 1161 阅读 · 0 评论 -
【PAT Advanced Level】1006. Sign In and Sign Out (25)
关键在于清空字符数组和使用scanf进行输入#include #include #include #include using namespace std;int main(){ int num; while (scanf("%d", &num) != EOF) { char earlest[20]; char lastest[20]; char原创 2013-10-12 22:06:52 · 864 阅读 · 0 评论 -
【PAT Advanced Level】1008. Elevator (20)
没什么难的,简单模拟题#include using namespace std;int main(){ int num; cin>>num; int cost = 0; int curFloor = 0; while (num--) { int floor; cin>>floor; int tmp = floor - curFloor; cost +=原创 2013-10-14 22:11:51 · 699 阅读 · 0 评论 -
【PAT Advanced Level】1004. Counting Leaves (30)
利用广度优先搜索,找出每层的叶子节点的个数。#include #include #include #include using namespace std;vector> tree;vector ans;void BFS(int s){ queue> q; q.push(make_pair(s, 0)); int cur_step = 0; int cnt = 0;原创 2013-10-11 20:06:40 · 805 阅读 · 0 评论 -
【PAT Advanced Level】1009. Product of Polynomials (25)
该题没什么难度,注意最后去除系数为0的项。我用了map来保存结果的指数、系数对,正好指数是唯一的。#include #include #include #include using namespace std;double *A[2];map result;int main(){ //fstream cin("a.txt"); int i = 0; int N[原创 2013-10-16 21:54:21 · 680 阅读 · 0 评论 -
【PAT Advanced Level】1010. Radix (25)
这题参考了别人的代码,我写的总是有几个case过不去,也懒得找错误了。#include #include long num2Dec(char *,int);//转换成10进制数据long findLowRadix(char *);//寻找最低进制数long binarysearch(char *,long ,long, long);int main(){ char N1[1原创 2013-10-24 10:48:02 · 769 阅读 · 0 评论 -
【PAT Advanced Level】1045. Favorite Color Stripe (30)
这几天在复习动态规划(DP),故在pat上找了两道dp的题目来练练手。这一题看似跟动态规划扯不上,其实是可以把它看做动态规划问题——最长递增子序列(LIS)问题的一个变形。题目中给定的第一个数组a[n],就相当于给定了“递增”的顺序。如果一个元素a[i]在a中的下标大于或等于另一个元素a[j](i>=j),我们就称a[i]>a[j]故只需把原来LIS问题中的判断大小部分改为现在的判定大原创 2013-10-26 20:53:19 · 686 阅读 · 0 评论 -
【PAT Advanced Level】1011. World Cup Betting (20)
简单模拟题,遍历一遍即可。考察输入输出。#include #include #include #include using namespace std;#define N 3int main(){ char res[3]={'W','T','L'}; char max_res[N]; int i,j; float tmp,sum=1,odd; for(i=0;i<原创 2013-10-30 22:11:06 · 729 阅读 · 0 评论 -
【PAT Advanced Level】1013. Battle Over Cities (25)
这题给定了一个图,我用DFS的思想,来求出在图中去掉某个点后还剩几个相互独立的区域(连通子图)。在DFS中,每遇到一个未访问的点,则对他进行深搜,把它能访问到的所有点标记为已访问。一共进行了多少次这样的搜索,就是我们要求的独立区域的个数。#include #include #include using namespace std;const int maxNum = 10原创 2013-10-31 14:12:55 · 809 阅读 · 0 评论 -
【PAT Advanced Level】1012. The Best Rank (25)
注意点:排名顺序如果有并列,则往后延续比如1 1 1 4 5而不是1 1 1 2 3每次排序后更新每个学生的最好排名情况。#include #include #include #include #include using namespace std;struct Student{public: string id; int score[4]; int bes原创 2013-10-31 13:18:09 · 846 阅读 · 0 评论 -
【PAT Advanced Level】1014. Waiting in Line (30)
简单模拟题,注意读懂题意就行#include #include using namespace std;#define CUSTOMER_MAX 1000+1#define INF 0x6fffffff #ifndef LOCAL// #define LOCAL#endif LOCALint n; // number of windows <=20int m ;/原创 2013-10-31 19:22:26 · 769 阅读 · 0 评论 -
【PAT Advanced Level】1033. To Fill or Not to Fill (25)
网上策略说的很详细了,利用贪心算法:假设我们现在在A点,A能到达的最远距离之内有B, C, D三个点:1. 如果B, C, D中有比A小的,则找到离A最近的,A加的油刚好够到这个点;2. 如果没有比A小的,A加满油,到B\C\D中最小的一个点停下来,再加油。代码注意细节:当第一个点距离不是0时,车子哪里都去不了!#include #include #include #原创 2013-11-10 16:26:15 · 1079 阅读 · 0 评论