
PAT (Top Level) Practice
如题
Yuhan の Blog
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
PAT顶级 1007 Red-black Tree (35分)
欢迎大家访问我的PAT TOP解题目录~https://blog.youkuaiyun.com/qq_45228537/article/details/103671868题目链接:1007 Red-black Tree (35分)思路:我们定义r[i][j] b[i][j]分别为以红色、黑色的点为根节点,black height为i,internel node数量为j的情况下,所能形成的...原创 2020-01-13 00:11:58 · 1081 阅读 · 0 评论 -
PAT顶级 1021 Safe Fruit (35分)(Bron-Kerbosch求最大团)
欢迎大家访问我的PAT TOP解题目录~https://blog.youkuaiyun.com/qq_45228537/article/details/103671868题目链接:1021 Safe Fruit (35分)思路:首先跟这位巨巨学了最大团Bron-Kerbosch算法:https://www.cnblogs.com/yefeng1627/archive/2013/03/31...原创 2020-01-09 19:45:32 · 2308 阅读 · 0 评论 -
PAT顶级 1014 Circles of Friends (35分)(并查集+BFS)
欢迎大家访问我的PAT TOP解题目录~https://blog.youkuaiyun.com/qq_45228537/article/details/103671868题目链接:1014 Circles of Friends (35分)思路:首先使用并查集就能很快求出集合个数;然后再对每个点BFS即可,虽然O(n2)O(n^2)O(n2),但是毕竟n不大;代码:#include...原创 2020-01-07 14:08:51 · 304 阅读 · 0 评论 -
PAT顶级 1015 Letter-moving Game (35分)
欢迎大家访问我的PAT TOP解题目录~https://blog.youkuaiyun.com/qq_45228537/article/details/103671868题目链接:1015 Letter-moving Game (35分)思路:此题可以看作:删去第一个字符串的最少字符,使得剩下的字符串是第二个字符串的substring,求删去的最少字符数;题意明白之后用O(n2)O(n...原创 2020-01-06 22:38:58 · 336 阅读 · 0 评论 -
PAT顶级 1008 Airline Routes (35分)(有向图的强连通分量)
题目链接:1008 Airline Routes (35分)思路:将有向图分为若干强连通分量的裸题使用正反dfs的Kosaraju算法或者效率高一些、一次dfs的Tarjan算法即可;代码:#include<bits/stdc++.h>using namespace std;const int maxn = 12345;int dfn, scc_cnt, ...原创 2020-01-06 22:29:23 · 408 阅读 · 0 评论 -
PAT顶级 1025 Keep at Most 100 Characters (35分)
题目链接:1025 Keep at Most 100 Characters (35分)思路:用dp[i][j]记录字符串从第一个字符到第i个字符形成的子串、保存j个字符所形成的sub-sequence个数;则我们可以得到递推式dp[i][j]=dp[i−1][j]+dp[i−1][j−1]dp[i][j]=dp[i-1][j]+dp[i-1][j-1]dp[i][j]=dp[i−1]...原创 2020-01-03 23:16:39 · 394 阅读 · 0 评论 -
PAT顶级 1027 Larry and Inversions (35分)(树状数组)
题目链接:1027 Larry and Inversions (35分)思路:首先计算出原数组逆序数的对数;然后依次考虑翻转的情况,我们注意到翻转是有规律的:假设我们已经计算得出了从i翻转到j的逆序数对数,则计算i翻转到j+1的逆序数对数,我们只需知道i到j的数中比第j+1个数小的数的个数,我们记为sm,则比j+1个数大的数的数量自然就是j-i-sm,记为gt,那此次翻转我们新获得...原创 2020-01-02 21:05:54 · 366 阅读 · 1 评论 -
PAT顶级 1009 Triple Inversions (35分)(树状数组)
题目链接:1009 Triple Inversions (35分)思路:1.如果是两个数字的情况,那就是逆序数问题,一个树状数组即可解决,可以参考顶级1010题;2.本地是计算三个数组构成的逆序数对数;我们在计算两个数构成的逆序数时,采用从后往前遍历,每次查询、然后加入的操作,目的是看有多少数排在自己后面却比自己小;同样的我们在计算本题时,需要多维护一个树状数组:从后往前遍历,设su...原创 2019-12-31 20:16:43 · 324 阅读 · 0 评论 -
PAT 顶级 1026 String of Colorful Beads (35分)(尺取法)
题目链接:1026 String of Colorful Beads思路:采用尺取法的思想,每次推动首尾,寻找最长、价值最大的区间即可;代码:#include<bits/stdc++.h>using namespace std;const int maxn = 12345;int n, val[maxn], type[maxn];bool vst[maxn...原创 2019-12-31 20:21:17 · 252 阅读 · 0 评论 -
PAT顶级 1024 Currency Exchange Centers (35分)(最小生成树)
题目链接:1024 Currency Exchange Centers思路:1.该题求最小的cost使得所有货币可以互相转换,即最小生成树问题;2.我们使用kruskal算法来求,因为它可以方便的判定最小生成树的多样性;kruskal按照边权对边进行排序后,依次加入这些边,由于我们需要center最少,我们在边权相同的边中,优先遍历已经使用的center即可;代码:#inclu...原创 2019-12-25 22:51:17 · 274 阅读 · 3 评论 -
PAT 顶级 1017 The Best Peak Shape (35分)(最长上升子序列)
题目链接:1017 The Best Peak Shape (35分)思路:1.LIS(Longest Increasing Subsequence)是动态规划里的一个基本类型,我们需要掌握它的O(nlogn)O(n\log n)O(nlogn)的算法;(不会的朋友自行学习~)2.其基本操作就是每次二分dp数组,往里面写值,如果a[i]被写到dp[k],就说明以这个值为结尾的LIS...原创 2019-12-25 19:00:50 · 413 阅读 · 0 评论 -
PAT顶级解题目录
持续更新中… 编号题目题解链接标签 1001Battle Over Cities - Hard VersionC++最小生成树 1002BusinessC++0/1背包 1003Universal Travel SitesC++最大流 1004To Buy or Not to Buy - Hard VersionC++DFS+剪枝 1005Programming PatternC++...原创 2019-12-23 19:51:12 · 1449 阅读 · 0 评论 -
PAT顶级 1005 Programming Pattern (35分)(后缀数组+基数排序 或 字符串哈希)
题目链接:1005 Programming Pattern (35分)思路:有两种做法(见标题)1.第一种做法我们得到后缀数组和高度数组后,需要转变一下思维,求长度为N、出现频率最高、字典序最小的子串,我们观察高度数组可以发现,如果有连续的k个h[i]>=N,那必定有k+1个这样的子串,将k记录下来;从前往后遍历,由于本身已经按字典序排好序,我们之后找到另一个k大于先前记录的k...原创 2019-12-23 18:22:53 · 768 阅读 · 0 评论 -
PAT顶级 1004 To Buy or Not to Buy - Hard Version (35分)(DFS+剪枝)
题目链接:1004 To Buy or Not to Buy - Hard Version (35分)思路:1.DFS复杂度O(2n)O(2^n)O(2n)根本不敢写,寻思即使剪枝也不会优化太多,然而这题应该就是争对剪枝算法设计的测试点。。所以实在没办法就来一发DFS也未尝不可QAQ2.将所有0-9 a-z A-Z转化为整数,然后存储我们需要的颜色和对应个数,再存储每一个商品的颜色和...原创 2019-12-21 20:39:28 · 579 阅读 · 0 评论 -
PAT顶级 1011 Cut Rectangles (35分)(思维题)
题目链接:PAT顶级 1011 Cut Rectangles (35分)思路:1.首先我们需要分析出,如果两个图形是被一个矩形切一次所形成,那么这两个图形只可能是(1)三角形+四边形(2)三角形+三角形(3)三角形+五边形(4)四边形+四边形;2.其次我们再思考一下,这条切线如果与坐标轴平行,那么会得到两个矩形,且这两个矩形至少有一条边互相相等,这种情况我们需要讨论一下(归类在四边形...原创 2019-12-20 19:08:46 · 1317 阅读 · 0 评论 -
PAT顶级 1018 Subnumbers (35分)
题目链接:1018 Subnumbers (35分)思路:1.设前缀和数组sum[i]表示位置[0,i][0,i][0,i]非零数的个数;2.设数组ans[i][j]是数字(i....i)%mod(i....i)\%mod(i....i)%mod,其中一共jjj个iii,例如ans[2][5]为数字222222222222222;3.设题目所给数字长度为lenlenlen,用字符串...原创 2019-12-18 22:10:38 · 291 阅读 · 0 评论 -
PAT顶级 1003 Universal Travel Sites (35分)(最大流)
思路:题目问stationstationstation的最小容量,变相就是问最多能一次性出发多少人,使得过程中不会超过每条边的容量,即最大流问题,用Ford−FulkersonFord-FulkersonFord−Fulkerson算法可很快的解决;代码:#pragma GCC optimize(2)#include<bits/stdc++.h>using namespa...原创 2019-12-18 20:35:04 · 1613 阅读 · 0 评论 -
PAT顶级 1002 Business (35分)(0/1背包)
思路:1.每份工作只有做和不做,问最大利润,自然就能想到0/1背包问题;2.设dp[i][j]dp[i][j]dp[i][j]表示用jjj天的时间,在前iii个工程中所能获得的最大利润,设wk[i]wk[i]wk[i]为第iii个工作,wk[i].prowk[i].prowk[i].pro、wk[i].costwk[i].costwk[i].cost和wk[i].ddlwk[i].ddlwk...原创 2019-12-17 18:36:17 · 622 阅读 · 0 评论 -
PAT顶级 1016 Uniqueness of MST (35分)(最小生成树唯一性判断)
思路:1.用并查集实现kruskalkruskalkruskal算法,最后查询一共有几个集合即可完成判断图是否联通以及计算不连通状况下有几块连通分量的工作;2.根据kruskalkruskalkruskal算法的贪心思想,我们每次考虑未使用过的边里权值最小的那一条边,如果这条边两边的端点不属于同一集合,就合并它们。那这种思想里什么时候会出现不唯一性呢?即你当前遍历的这条边可以联通两个集合,我...原创 2019-12-17 15:24:52 · 1576 阅读 · 1 评论 -
PAT顶级 1001 Battle Over Cities - Hard Version (35分)(最小生成树)
思路:1.题意即求抹去哪个(些)点,剩下的点组成的最小生成树权值最小;2.两点间没有公路权值设为无穷,公路未被破坏权值设为0(方便计算最小生成树权值);3.需要注意一个城市被攻占后,剩余城市无法形成连通图的情况;(这时候代价设为无穷就行)代码:/* 多希望和明理在一起的是贵树君你啊 可惜在每秒下落五厘米的樱花中,你们错过了彼此 */#pragma GCC optimize(2...原创 2019-12-17 14:09:45 · 483 阅读 · 0 评论 -
PAT 顶级 1020 Delete At Most Two Characters (35 分)
思路:1.这题用dp[i][j]来表示,从字符串下标从0到i的子串删除j个字符后有多少种情况;2.不难得到递推式dp[i][j]=dp[i-1][j-1]+dp[i-1][j];3.处理边界情况:对于所有j==0有dp[i][0]==1;dp[0][]={1,1,0};4.在上面第二点相加时可能会出现重复情况,即删去第i个和不删第i个里面重复的串,因为不删第i个那这个串最后一个肯定是s[...原创 2019-11-12 17:16:27 · 440 阅读 · 0 评论 -
PAT 顶级 1010 Lehmer Code (35 分)
思路:1.这道题实际上就是计算逆序数,而计算逆序数有两种方法:(1)运用树状数组(Binary Indexed Tree)计算;(2)通过分治思想利用归并排序计算;这里的代码仅展示第一种,虽然后一种也很简单;2.注意直接使用BIT是不可取的,因为题目并没有说明Ai的范围,不可以直接将a[i]加入到BIT中,此时我们需要计算每一个a[i]的排名,将a[i]的排名加入进去就好了~代码:#...原创 2019-11-09 14:16:16 · 291 阅读 · 0 评论