PAT
文章平均质量分 88
你好世界wxx
Just do it!
展开
-
【PAT】14 基础算法与数据结构
第十四章 基础算法与数据结构AcWing 1506. 中位数问题描述问题链接:AcWing 1506. 中位数、原题链接分析基本做法:使用归并排序的归并操作将两个有序数组归并为一个有序数组c,然后输出c的中位数即可。另外本题还有一个log(n+m)的做法,对应题目是Leetcode 0004 寻找两个正序数组的中位数。对于给定的数组A、B,我们要找到这两个数组中的中位数,我们考虑一个更加一般的问题,如何找到第k小的数据。假设我们需要找到A[i...]和B[j原创 2021-09-03 10:45:31 · 145 阅读 · 0 评论 -
【PAT】13 链表
第十三章 链表AcWing 1516. 共享问题描述问题链接:AcWing 1516. 共享、原题链接分析使用邻接表存储链表即可。然后使用哈希表,首先遍历其中一个链表,将出现的节点对应的位置(地址)记录下来。之后遍历另一个链表,找到该链表中第一个在哈希表中出现的元素,输出其地址即可。如果不存在交点输出-1即可。代码C++#include <iostream>using namespace std;const int N = 1000原创 2021-09-03 10:39:17 · 104 阅读 · 0 评论 -
【PAT】12 贪心
第十二章 贪心AcWing 1521. 魔术卷问题描述问题链接:AcWing 1521. 魔术卷、原题链接分析本题相当于给我们两个数组,我们需要给两个数组中的元素配对,使得配对的元素之积之和最大。对于两个数组中的正数,排序后,第一个数组中的最大值和第二个数组中的最大值配对,第一个数组中的次大值和第二个数组中的次大值配对,…,这样得到的和最大;负数类似。相关数学知识:排序不等式,即:反序和 ≤ 乱序和 ≤ 顺序和。代码C++#include <原创 2021-09-03 10:36:26 · 123 阅读 · 0 评论 -
【PAT】11 模拟
第十一章 模拟AcWing 1480. 电梯问题描述问题链接:AcWing 1480. 电梯、原题链接分析记录上一次电梯所在的楼层last,然后根据当前所在的楼层cur更新用时。注意:每个停止的楼层都要消耗5s。代码C++#include <iostream>using namespace std;int main() { int n; cin >> n; int res =原创 2021-09-02 14:15:35 · 170 阅读 · 0 评论 -
【PAT】10 并查集
第十章 并查集AcWing 1485. 战争中的城市问题描述问题链接:AcWing 1485. 战争中的城市、原题链接分析本题的思路是对于每个去掉的城市,求一遍连通分量的个数,最终需要修建的最少高速公路的数目就是连通分量个数减一的结果。代码C++#include <iostream>using namespace std;const int N = 1010, M = 500010;int n, m, k; // 点数、边数、查询数i原创 2021-09-02 14:02:21 · 106 阅读 · 0 评论 -
【PAT】09 哈希表
第九章 哈希表AcWing 1532. 找硬币问题描述问题链接:AcWing 1532. 找硬币、原题链接分析从前向后依次遍历每个数x,然后判断m-x是否在哈希表中存在,如果存在说明找到一组和为m的解,更新答案即可。代码C++#include <iostream>#include <unordered_set>using namespace std;int n, m;int main() { scanf("原创 2021-08-31 17:21:55 · 141 阅读 · 0 评论 -
【PAT】08 动态规划
第八章 动态规划AcWing 1479. 最大子序列和问题描述问题链接:AcWing 1479. 最大子序列和、原题链接分析考虑状态表示f[i]:表示以w[i]结尾的最大的连续子数组和。考虑状态转移:f[i]=max(f[i−1],0)+w[i],0<i<nf[i] = max(f[i- 1], 0) + w[i], 0 < i < nf[i]=max(f[i−1],0)+w[i],0<i<n。我们发现每个状态只和上一个状态有关原创 2021-08-31 17:16:00 · 139 阅读 · 0 评论 -
【PAT】07 数学
第七章 数学AcWing 1533. 1 的个数问题描述问题链接:AcWing 1533. 1 的个数、原题链接分析这一题最直观的做法,就是枚举1~n中的每个数,然后将每个数中1的个数加到res中,最后返回res。但是这种做法时间复杂度太高了。另一种做法是枚举每一位上1的个数,从高位开始枚举,假设我们的数据是abcdefg,如果我们现在枚举千位是1有多少种方案,需要分类讨论:(1)如果d==0,则d的左边可以取0~abc-1,右边可以取0~999,此时千位取1对应的数原创 2021-08-31 17:11:08 · 111 阅读 · 0 评论 -
【PAT】06 图论
第六章 图论AcWing 1475. 紧急情况问题描述问题链接:AcWing 1475. 紧急情况、原题链接分析本题相当于给定我们一个无向图,让我们求两点之间最短路径的数量。并从这些最短路径中选取一条,使得点权之和最大。使用数组dist记录从起点到每个点的最短路径,使用数组cnt记录从起点到每个点的最短路径条数,使用数组sum记录从起点到每个点的所有最短路径中点权之和最大值。代码C++#include <iostream>#include原创 2021-08-31 17:02:46 · 174 阅读 · 0 评论 -
【PAT】05 树
第五章 树AcWing 1476. 数叶子结点问题描述问题链接:AcWing 1476. 数叶子结点、原题链接分析使用邻接表存储树。然后可以使用BFS或者DFS遍历整棵树,在遍历的过程中记录每层的叶节点个数即可。代码C++#include <iostream>#include <cstring>using namespace std;const int N = 110;int n, m;int h[N], e[N], ne原创 2021-08-26 17:19:54 · 172 阅读 · 0 评论 -
【PAT】04 排序
04 排序AcWing 1484. 最佳排名问题描述问题链接:AcWing 1484. 最佳排名、原题链接分析首先考虑数据的存储,可以使用哈希表存储每个学生的四个成绩,按照ACME的顺序存储,这样最后在查询时如果名次相同会先输出前面的。使用vector存储四个不同类型的成绩,以便在给定一个成绩时查询该成绩的排名。当查询某个同学的排名最靠前的一门成绩时,首先判断哈希表中是否存在该学生,不存在的话返回N/A。存在的话使用二分查询出其排名即可。依次按照ACME的顺序考察原创 2021-08-26 10:15:22 · 100 阅读 · 0 评论 -
【PAT】03 进位制
03 进位制AcWing 1482. 进制问题描述问题链接:AcWing 1482. 进制、原题链接分析首先我们知道其中一个数的进制,如果知道的是n2的进制,那么交换n1、n2,然后问题就转换成了:n1是radix进制的数,需要找到n2在什么进制下和n1相同。题目中radix最大为36,并且n1、n2最多10位,因此n1最大取(zzzzzzzzzz)36,这个数小于1×3610≈3.6×10151 \times 36 ^ {10} \approx 3.6 \times原创 2021-08-26 10:08:19 · 102 阅读 · 0 评论 -
【PAT】02 高精度
02 高精度AcWing 1474. 多项式 A + B问题描述问题链接:AcWing 1474. 多项式 A + B、原题链接分析注意到指数都是整数,范围在[0, 1000]之间,因此可以使用两个数组a、b记录输入的每个指数对应的系数。最终将a、b相加的结果存储到数组c中即可。代码C++#include <iostream>using namespace std;const int N = 1010;double a[N],原创 2021-08-25 23:24:26 · 95 阅读 · 0 评论 -
【PAT】01 字符串处理
01 字符串处理AcWing 1473. A + B 格式问题描述问题链接:AcWing 1473. A + B 格式、原题链接分析相加得到结果后,转为指定形式的字符串输出即可。代码C++#include <iostream>using namespace std;int main() { int a, b; cin >> a >> b; int c = a + b; string n原创 2021-08-25 23:18:35 · 237 阅读 · 0 评论