- 博客(68)
- 收藏
- 关注
原创 【PAT甲级真题】- The Dominant Color (20)
可以有两种思路做这个题哈希表哈希表的思路很简单,直接开一个哈希表记录每个颜色出现的次数,大于一半就直接输出摩尔投票法摩尔投票法用来找出所有元素当中的主要元素(出现次数严格大于所有元素个数的一半)摩尔投票的思路是把找出这个元素的过程当作候选人投票如果当前投票人和候选人相同,加一票否则减一票如果票数为零,更换候选人如果出现次数大于一半的元素存在,那么这个元素的票数最后肯定是正数,候选人也一定会是这个元素。
2026-05-17 15:52:15
553
原创 【PAT甲级真题】- String Subtraction (20)
因为字符用 ASCII 码表示,共 128 个,可以用一个桶记录某个字符是否在S2S_2S2出现,如果出现就不输出这个字符。
2026-05-16 19:10:38
459
原创 【PAT甲级真题】- Shortest Distance (20)
前缀和用前缀和数组sum维护距离,a→ba\to ba→b的距离就是sumb−sumasumb−suma用len表示环的总长度,则b→ab\to ab→a的距离就是len−sumb−snumalen−sumb−snuma取最小值即可。
2026-05-16 18:53:40
582
原创 【PAT甲级真题】- Shuffling Machine (20)
类似桶排序的思路首先维护一个洗牌顺序数组p用于保存更新的顺序然后维护两个字符串数组s,tmp,其中s保存更新前的牌序,tmp用来保存更新后的牌序更新时,直接把s中对应位置的字符串按照p的顺序填入tmp最后tmp=s即可注意输入的序号是从 1 开始的,桶下标从000开始,要做对齐处理。
2026-05-15 18:43:21
740
原创 【PAT甲级真题】- Password(20)
直接打表模拟即可用一个字符数组c1组保存要检测的字符,一个字符数组c2保存要替换的字符,这样写起来更简单边输入边检测,这样可以让输出与输入的顺序一致,符合题目要求。
2026-05-13 09:41:18
727
原创 【PAT甲级真题】- Hello World for U(20)
看懂题目的公式后其实很简单先计算n2n_2n2,不难发现,当N2N+2N2是333的倍数时,n2N23n2N2/3如果在此基础上,长度再多111,由于n1n3≤n2n1n3≤n2,多出来的长度只能加到n2n_2n2上长度多222同理n2N23N23n2N2/3N2%3输出时,按照行输出,维护一个左指针l和一个右指针r前n1−1n_1-1n。
2026-05-12 17:11:32
735
原创 【PAT甲级真题】- Colors in Mars(20)
进制转换+输入补齐进制转换做过很多次了,逻辑如下while(n){s+=n%13;n/=13;输入补零也很简单,用,其中len是补零后的长度,本题中取222。
2026-05-11 17:07:30
613
原创 【PAT甲级真题】- Have Fun with Numbers(20)
高精加+桶两倍一个202020位的数只能使用高精加(python和java好像自带大整数运算,但是c++只能高精加)高精加的实现也很简单,用加法器的原理,简单来说分两步,以998899+889988为例先把两个数直接按位加起来,不进位,即然后从低位开始,逐步向高位进位初始设置进位标志为000当前位加上进位标志如果当前位大于101010,置进位标志为111否则置进位标志为000直到遍历完所有的位,记得最高位可能进位,在退出循环后还要再判断一次进位标志是否为111。
2026-05-10 16:13:52
753
原创 【PAT甲级真题】- General Palindromic Number(20)
一道简单的模拟题首先把一个数拆成bbb数组保存nbn\%bnbnnbn=n/bnnb,回到第一步:判断回文在上述转换的基础上,用两个指针,一个从最左端开始一个从最右端开始逐位比较即可。与很类似,可以参考这篇题解。
2026-05-09 21:37:50
648
原创 【PAT甲级真题】- Reversible Primes(20)
判断质数+进制转换判断质数我这里用的质数筛,实际上可以用ONON的复杂度判断一个数是否是质数,比较直观保存ndn\%dndnndn=n/dnnd,回到第一步用数组记录每一位,那么数组的倒序就是该数在ddd进制下的反转数记得判断NNN是不是质数,如果不是直接判否如果是就还要判断它的反转数用素数筛的话不要忘记111不是质数。
2026-05-08 12:02:31
728
原创 【PAT甲级真题】- Elevator(20)
一道很简单的模拟题按照题目的意思模拟即可用一个 last 暂存上一步的状态,根据当前输入判断上升还是下降,移动了几层,然后乘上时间输出时加上请求数目乘上 5一开始怀疑是不是如果一直重复同一个请求就都只用 5 秒,看来实际情况是每个请求不管是不是同一层都会花费 5 秒钟等待。
2026-05-07 22:24:28
495
原创 【PAT甲级真题】- Spell It Right(20)
一道打表题对于数字转字母的处理就用一个字符串数组打表输入记得输字符串,整数无法直接输入,$10^{100} $ 超出范围了求和时,数字字符减去'0'即为其数字的数值求和后对照表输出即可。
2026-05-07 22:00:23
349
原创 【PAT甲级真题】- A+B Format(20)
20分的题目还是很简单的先计算aba+bab的值,然后转换成字符串讨论一下正负的情况对于正数,我们每数三个数就用insert()插入一个逗号,注意第一位不要算,因为对于100,000的情况是不用在最前面加逗号的对于负数,去掉负号后跟正数是一样的,正数是第一位不算,那负数就是前两位不算会在原字符串的pos位置 插入第二个参数指定的字符串其他的string可以查看外菜鸟教程。
2026-05-06 22:39:57
433
原创 【PAT甲级真题】- Recover the Smallest Number (30)
一道很有趣的思维题乍一看好像按照字典序排序就没了,但是其实样例都过不了先考虑两个数的情况,假设两个数是 a,b ,他们的拼接是 {ab} 如果 {ab}<{ba} 那么显然把 a 放到 b 前面会好一点其实到这里就做完了,因为对于多个数而言,这种拼接关系最小的会被放在最前面,次小的第 2 位,依次类推这只是一个排序方式,在 sort 函数当中自定义排序即可。
2026-04-28 22:27:43
477
原创 【PAT甲级真题】- Head of a Gang (30)
一道并查集维护集合大小,单点权重,总权重,总体上比较简单有几个坑点要注意输入的数据虽然是 1000 条,但是每条最多会有两个字符串,所以其实字符索引最大可能有 2000,在初始化并查集时要双倍题目最后按照升序输出。
2026-04-27 19:50:16
750
原创 【PAT甲级真题】- Table Tennis (30)
对于 vip 的分配如果 vip 进入队列时,有空的桌子,那么要尝试寻找 vip 桌,vip 会被分配到编号最小的 vip 桌,而不是编号最小的空桌子可能会有多张桌子在同一时刻空闲,这时,等待队列当中的分配顺序是先尝试给 vip 分配vip桌子,再考虑普通人如果没有 vip 桌子可以分配,那么 vip 会被视作普通人,轮到才分配round是四舍五入取整,不是向上取整(牛客没有这个样例,PTA第8个测试点是)可能会出现 21 点来到的用户,此时不应把这种用户加入计算。
2026-04-26 22:29:18
611
原创 【PAT甲级真题】- Path of Equal Weight (30)
一个很普通的 dfs先用链式前向星建树,然后传一个内部的形参 res,用来记录当前的路径如果遍历到叶子且符合情况,就把形参 res 保存注意最后的输出是结点的权重,且权重要按照字典序排序vector内部重载了=,==,!的运算符,比较规则与字典序比较相同所以直接用 sort 即可。
2026-04-24 20:38:08
785
原创 【PAT甲级真题】- Counting Ones (30)
题意还是很简单明了的,计算 1 出现的个数实际上是一道数位 dpdp[i]为第 i 位中出现 1 的次数而数位之间是没有联系的,所以此处甚至不用转移方程现在讨论第 i 位的情况第 i 位为 0:比如,此时从 001xx 到 111xx 第 i 位都是 1,出现次数为12∗10212*10^212∗102次,实际上是高位数字乘以10低位长度10^{低位长度}10低位长度次第 i 位为 1:比如i=3,12123。
2026-04-23 18:35:34
503
原创 【PAT甲级真题】- Favorite Color Stripe (30)
其实就是一道最长不降序列把颜色的色号映射为输入的顺序然后问题即转化为第二行的最长不降序列注意题目当中的要求的颜色序列不用每个颜色都出现,只要按照顺序出现即可,可以跳过某个颜色。
2026-04-22 23:41:07
679
原创 【PAT甲级真题】- Gas Station (30)
对所有加油站做一次单源最短路即可这题本身不是很难,整体上是多源最短路然后加上一点字符串的处理。
2026-04-21 21:41:04
513
原创 【PAT甲级真题】- Find More Coins (30)
很像 0/1 背包,但是有点不同首先不用价值最小,其次要选取路径这里我的 dp 是 dp(i,j) 表示拿上第 i 个物品后,后面的物品能不能填满 j 的容量同时对价值排序,方便选出最小字典看到过另外一种 dp 是 0/1 包的 dp + 一个状态数组,空间上开销会更大转移方程即不拿第 i 个,与它后面的状态相同,如果能拿就拿上,输出的时候,从小到大开始模拟拿取如果拿了当前的硬币后,说明后面有方案,就直接拿,此时字典序必然最小否则不拿。
2026-04-20 20:22:25
739
原创 【PAT甲级真题】- Complete Binary Search Tree (30)
硬要说,其实是一道模拟题吧用数组构建完全二叉树获取下标 r 的左孩子即2*r+1获取下标 r 的右孩子即2*(r+1)由于 BST 中序是有序的可以对输入的数组进行排序,然后再中序填入树当中最后层序遍历输出即可。
2026-04-19 21:40:20
457
原创 【PAT甲级真题】- Graduate Admission (30)
作为 30 分的题感觉有点简单了,可能年代久远吧就是一道模拟题按照题目的要求,我们先对学生的成绩进行排序然后按照顺序遍历,更新排名如果总分和上一个不同,排名自增如果总分相同第一分数不同,排名自增否则相同对于一个学生我们按照顺序遍历他报考的学校如果这个学校有配额直接录取,然后 break,防止后面的学校录取如果这个学校没有配额,看学生的排名是不是和这个学校录取排名相同,如果是超额录取,然后 break,防止后面的学校录取。
2026-04-17 20:20:22
452
原创 【PAT甲级真题】- Forwards on Weibo (30)
广搜+深度记录链式前向星建图,然后记录深度广搜即可,在 PAT 当中出现很多次了记录深度也很简单num 记录当前层有几个元素high 记录深度每次取出num--当num=0时说明遍历完一层high++,此时队列的长度即下一层的大小,这里注意一下,一个人转发了之后,他的所有关注者都会看见,只有其中没转发过的人才会转发,
2026-04-16 21:29:32
653
原创 【PAT甲级真题】- Build A Binary Search Tree (30)
给出树形构造二叉搜索树二叉搜索树的中序遍历是有序的所以可以先根据给出的树形建树,然后将输入的数组排序,中序遍历时一个个填到树里面最后层序遍历输出即可。
2026-04-15 20:08:40
696
原创 【PAT甲级真题】- Cars on Campus (30)
一道经典的差分+模拟首先按照题目的要求要先对时间进行排序对于模拟的部分,主要是时间的统计:只要用一个map记录车辆的 in 时间即可,对于一个 out记录如果有 in记录 ,就计算并清掉 in 记录如果没有 in 记录说明不合法这里注意几点车辆停泊的时间算的是总时间,也就是同一辆车一天内多次进出停车场的时间总和out 记录的时间点是车辆已经出去的时间结点对于差分的部分:其实就是在匹配到合法的 out 之后,给时间数组的 in 记录位置 +1,out 记录位置 -1。
2026-04-14 20:21:09
695
原创 关于Copilot不能进行代码自动补全的问题
然而今天在写代码的时候刚好要去配置 vscode 的环境,然后发现我不知道什么时候配置了 copilot 的 http 代理,但是这个代理的端口后面被我换了。之前因为vscode内跟copilot的对话是正常的,所以根本没想到是网络问题,一看日志发现真的是。之前看别人说有可能是缓存太大了,把缓存删了就可以补。博主前阵子不知道为什么突然间不能代码补全了。很无语的错误,删掉端口配置之后重启就好了。手写代码感觉效率慢了百八十倍。
2026-04-13 21:30:13
57
原创 【PAT甲级真题】- Acute Stroke (30)
经典走迷宫三维数组保存三维地图定义 6 种走法,用数组保存,方便更新然后遍历地图,如果有值为 1 且没被搜过的点就 dfs 一次,获取该点所在块的值,dfs 时会把块中所有的点打上标记搜完求和就能得到答案记得判越界。
2026-04-13 17:01:02
545
原创 【PAT甲级真题】- All Roads Lead to Rome (30)
dij + 保存父节点深搜题中最短路就是 dij 的模板但是后续要遍历所有的最短路求价值最大,必须要能够保存所有的最短路一种常规的操作是保存每个节点的最短路父节点,然后从终点开始深搜深搜的时候记录最小深度来代替平均值的计算为什么不保存子节点然后从起点深搜呢?因为保存父节点的话,当最短路更新的时候,就直接清空当前结点的父节点数组即可,先前的父节点不是最短路而且最短路的更新方程是,是对父节点的遍历,保存父节点也符合更新的逻辑。
2026-04-12 23:30:10
543
原创 【PAT甲级真题】- Count PAT‘s (25)
一道经典的 DP 题如果当前 “PA” 的数目是 s1,“PAT” 的数目是 s2,那么输入一个 “T” ,它可以和前面所有的 “PA” 组成新的 “PAT” ,总的 “PAT” 就是新的加上旧的,即 s1+s2同理如果当前 “P” 的数目是 s0,“PA” 的数目是 s1,那么输入一个 “A” ,它可以和前面所有的 “P” 组成新的 “PA” ,新的加上旧的即 "PA“ 的总数转移方程就是if cin==T:PAT=PAT+PAPA=PA+Pelse:P++
2026-04-11 18:04:57
482
原创 【PAT甲级真题】- Insert or Merge (25)
由于要么插入排序要么归并排序所以用单步插入排序判断是不是插入排序就能行判断完成后用单步排序函数去排序单步插入排序:很简单,插入排序第 k 步时,前面的元素都有序,第 k 个元素只要比第 k-1 个元素小就交换,一直换到不能换为止就完成了一次单步插入排序单步归并排序:第 k 次合并2k2^k2k个元素,用来排序,其中 k 就是要合并的元素数量,每次乘以 2 ,i 是遍历的下标注意,单步排序有可能排序一次之后还会与原序列相同,题目的意思是一直排序直到与给出的第二个序列不同为止。
2026-04-10 22:16:16
668
原创 【PAT甲级真题】- The Black Hole of Numbers (20)
就是一个简单的模拟,用字符串和数字相互转换的函数直接模拟就行了但是坑还挺多的输入的数不一定是 4 位数,比如输入1,这时要把输入处理成0001才行在计算过程当中,每次算完也要补齐(当然如果你是直接写字符串相减的函数就不用了。。。
2026-04-09 16:30:57
684
原创 【PAT甲级真题】- Perfect Sequence (25)
这种对最大最小有要求的题目首先想到双指针一开始想两头双指针然后发现好像没什么意义然后就想着从同一头出发,发现是可行的首先要排序然后初始两个指针都指向最左点,开始遍历如果满足条件,更新最大值,同时说明最大值可能可以更大,右指针右移如果不满足条件,只能移动左指针,看看后续能不能扩大序列注意循环的条件是左右指针不能越界,且左指针不能超过右指针(虽然理论上是不可能超的)
2026-04-08 17:00:37
588
原创 【PAT甲级真题】- Reversing Linked List (25)
静态链表模拟题也是做过很多类似的题目了把静态链表读到数组里面然后用reverse反转就行了非常建议大家把静态链表存到数组里面去操作直接模拟链表操作虽然说很规范而且工程肯定也会这么写但是这是OI,怎么简单怎么写,能空间换时间就最好因为我们只有三个小时,没时间写那么规范的模板了就算写出来调 bug 指不定还要调好久。
2026-04-07 22:00:19
715
原创 【PAT甲级真题】- Mooncake (25)
由于题目当中允许每个样本取部分,所以是一道贪心直接取单价最高的卖,不要误以为取总价值最高的卖卖完再依次取单价次高的等等通过计算单价然后排序来解决注意排序后可能需要获取排序前的样本数量可以用pair或者结构体实现,我这里用的结构体。
2026-04-06 16:37:49
579
原创 【PAT甲级真题】- Talent and Virtue (25)
题目看懂了其实就是重载个排序函数而已题目要求分四个类型来排序就开四个数组就行了。
2026-04-05 15:41:33
543
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅