
PAT练习
flyawayl
打工人
展开
-
PAT乙级 1034
思路:是个水题,但是有坑。不能被题目忽悠了,题目保证正确的输出中没有超过整型范围的整数。 它只是保证结果不超出int,但是我们在运算过程中的乘法可能会超出int,直接把所有int改成long longAC代码#include <stdio.h>#include <algorithm>using namespace std;typedef long long LL;LL a, b, c, d;原创 2017-08-04 07:45:07 · 1274 阅读 · 0 评论 -
PAT 1010. Radix (25)
此题高能,甲级里面难度算比较大的了!(其实也不难,关键没指明数据范围)思路: 最后的答案不止是≤36\leq36,也可能特别大(超过int, 达到 long long int)。不能用顺序查找,需用二分查找。 这题有一个特点:当待处理的字符串只有一位时,答案有多个;当长度大于一位时,只有一个正确答案(或者没有答案)。注意当radix很大的时候,可能会导致计算过程超出原创 2018-01-19 14:26:50 · 369 阅读 · 0 评论 -
PAT Public Bike Management (dfs)
思路:你的答案必须满足三个条件: 1.在所有路径中选择最短的; 2.如果路径相等,则选择从PBMC中送出最少的; 3.如果路径相等且PBMC送出的车也相等,则选择带回最少的。 注意:这题很恶心,你要考虑–在最后计算发车数和返回车数时,首先要从sp开始反向寻找第一个缺车的站(由于发车是单向的,路径上靠近PBMC的站可以将多出的车交给较远的缺车的站,但较远的站之后不能将多出的车返还给较近的缺车站原创 2017-08-14 08:54:28 · 410 阅读 · 0 评论 -
PAT All Roads Lead to Rome 单源最短路
思路:单源最短路末班就好了,字符串映射成数字处理。AC代码//#define LOCAL#include <stdio.h>#include <string.h>#include <algorithm>#include <queue>#include <map>#include <vector>#include <string>using namespace std;#define原创 2017-08-14 11:11:25 · 683 阅读 · 0 评论 -
PAT1118. Birds in Forest (并查集)
思路:并查集一套带走。AC代码#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;const int maxn = 10000+5;int par[maxn], vis[maxn];int findRoot(int x) { return x == par[x] ? x : par[原创 2017-08-06 10:09:29 · 463 阅读 · 0 评论 -
PAT1119. Pre- and Post-order Traversals
思路:中序遍历–根结点,左子树,右子树;后序遍历–左子树,右子树,根结点。 那么在找到根结点之后就可以开始划分左右子树了。左子树的先序第一个节点是根,左子树的后序最后一个节点是根。 例如 1 2 3 4 6 7 5 2 6 7 4 5 3 1 当前的根结点就是1,在先序中得到左子树的根结点就是2,再在后序中知道左子树的节点就是{2},那么就得到左子树了,剩下的就是右子树。 如何判断重建的原创 2017-08-05 12:46:21 · 854 阅读 · 0 评论 -
PAT1117. Eddington Number
思路:搞懂题意是关键–E满足有共有E天骑车的距离超过E米,求最大的E! 将数组排序,我们假设最大的E是e,e满足条件有e天骑车超过e米,并且e+1不满足有e+1天骑车超过e+1米。那么我们可以逆序统计所有满足a[i]>n−ia[i] > n-i的就是答案。AC代码#include <stdio.h>#include <algorithm> using namespace std;const原创 2017-08-05 10:09:27 · 353 阅读 · 0 评论 -
PAT1116. Come on! Let's C (map)
思路:模拟一下就好了,map用来记录每个人的排名。AC代码#include <stdio.h>#include <map>#include <math.h>#include <string>#include <string.h>using namespace std;map<string, int> Rank;map<string, int> asked;const int maxn原创 2017-08-05 10:00:47 · 374 阅读 · 0 评论 -
PAT 1003. Emergency 单源最短路
思路:定义ways[i]ways[i]表示到达i的最短路径数量,d[i]d[i]表示到达i的最短径,cnt[i]cnt[i]表示最短路径到达i的最多人数,w[i][j]w[i][j]表示从i到j的距离, team[i]team[i]表示i点的人数。每次从u去更新某个节点v的时候,考虑两种情况: 1、d[v]>d[u]+w[u][v]d[v] > d[u] + w[u][v],说明到达v新的最短路径原创 2017-08-04 16:00:32 · 487 阅读 · 0 评论 -
PAT 1002. A+B for Polynomials
思路:就是两个多项式做加法–指数相同的相加即可,输出的时候按照指数递减输出,并且系数为0的项不输出。AC代码#include <stdio.h>#include <vector>#include <algorithm>using namespace std;const int maxn = 1000+5;float a[maxn];vector<pair<int, float> > an原创 2017-08-04 12:38:52 · 324 阅读 · 0 评论 -
PAT1001 A+B Format
思路:每三位分割,注意符号,首位不要出现逗号。AC代码#include <stdio.h>#include <algorithm>using namespace std;void solve(int c) { if(c < 0) printf("-"); c = abs(c); int dig[20]; int len = 1; do{ d原创 2017-08-04 12:04:19 · 517 阅读 · 0 评论 -
PAT1078 Hashing 坑爹
思路:用筛法给素数打表,二次探测法(只需要增加的)–如果hash(key)hash(key)的位置被占,那么就依次探测hash(key+1∗1),hash(key+2∗2)....hash(key+(size−1)∗(size−1)hash(key+1*1),hash(key+2*2)....hash(key+(size-1)*(size-1)。 注意:如果输入的MSize<=1MSize <=1原创 2017-08-04 11:38:04 · 1133 阅读 · 1 评论 -
PAT 1013. Battle Over Cities (联通块数量)
分析如果某个城市被敌人占领,就相当于从图上将这个点以及与这个点相连的所有边删除,那么剩下的图可能被分成几个规模更小的图,也就是说现在有几个联通块。这样一想来就简单了,直接求联通块数量就好了,然后用几条边把所有联通块连接起来就能让所有城市联通!!AC代码#include <stdio.h>#include <string.h>#include <...原创 2018-02-11 09:32:16 · 395 阅读 · 1 评论