- 博客(115)
- 收藏
- 关注
原创 PAT 乙级 1125
不过我挺好奇,为什么这个地方非要强制转换,min1 = min( min1, (int)v[i].size() );这题挺难的感觉,尤其是匹配那一段。
2026-03-21 01:49:01
24
原创 PAT 乙级 1120
从第 1 块地到第 i 块地。pre[j] - pre[i - 1] <= m 从第 i 块地到第 j 块地。j 要从 i 开始,不知道为啥这个地方错了。本题也是固定类型题目,固定代码。
2026-03-21 01:13:50
21
原创 PAT 乙级 1110
区块反转的做法,不需要真的用 reverse 反转。只需要按照反过来的顺序输出就行了。用双重 for 循环,反过来的顺序压栈到新数组里。最后输出,但整个过程,还是有很多细节要模拟。只需要先分块压栈到二维数组中。
2026-03-21 00:14:08
31
原创 PAT 乙级 1105
想得到,隔几个数字插入一个数字的链表,要新建一个 list,再逐个判断去压栈,最后输出整个链表。所以 list 要采用压栈,最后计算出链表一共的有效结点。链表一定要有的一个操作,不是输入每一个结点都是有效结点。
2026-03-20 23:17:01
19
原创 PAT 乙级 1090
因为一个危险品,可能与这个危险品会发生化学反应的产品不止一种,去仔细观察题目。所以不能直接写等于号。但这个题的 map 复杂一些,map<string, vector<string>> mapp1;这个题是前面某个题的升级版,一样的方法,都是要建立两个 map,因为 map 查询快。这种 map 怎么遍历,那就要写万能不会错的遍历方法,也就是遍历 set 的方法。
2026-03-20 15:43:28
21
原创 PAT 乙级 1075
这题的输入有一个坑,输入要直接使用cin,用scanf ("%05d") 反而容易错,这样写,最后一个地址 -1 就无法输入。这种题感觉得多背几遍,熟悉套路写法。
2026-03-20 14:54:42
22
原创 PAT 乙级 1070
前面必须强制转 double,不然小数点就没了。v[0] 这一段绳子要先加入总数,不能第一段绳子还没跟别人串连,自己先折一半了。简单的一题,但仍然有坑。
2026-03-19 22:01:57
24
原创 PAT 乙级 1065
1、题目说了最后输出要按递增顺序,所以一开始定义数组就可以定义 set<string>,但是这玩意,输出比较麻烦,要写 auto i = v2.begin();2、map.count() 找数据 比 find 找数据快很多,所以两次找数据都用 map,这样才能不超时。从字符串里找子串,v.find(v[i]);从数组里找元素,find(v.begin(), v.end(), 目标元素)为了运行不超时,做了好多优化。3、find 的两种用法。
2026-03-19 21:42:18
24
原创 PAT 乙级 1060
但有一个坑,如果全部公里数都大于全部天数,那 for 循环不会输出东西。再逐个比较天数和骑行公里数。所以要加一步,输出全部天数。本题要先从大到小排个序。
2026-03-19 20:17:31
21
原创 PAT 乙级 1045
本题还有个坑,如果主元个数为 0,那最后还要输出一个 endl;不能没有第二行的空行。二是,该元素左边的元素的最大值,要小于该元素;该元素右边的元素的最小值,要大于该元素。本题不能写双重 for 循环,会超时,只能慢慢修改,改成单重 for 循环。一是,该元素必须跟排好顺序的元素在同一个位置。如果没写这个第二行的空行,会扣 4 分。判断是否是主元,要满足两个条件。
2026-03-19 16:43:07
18
原创 PAT 乙级 1040
计算出,每个 A 前面 P 的个数和每个 A 后面 T 的个数,两个个数相乘,再把所有相乘结果相加,即为最终答案。具体做法是,先计算出,第一个 A 前面 P 的个数和第一个 A 后面 T 的个数,先相乘加入结果,继续往后走。在遇到下一个 A 之前,遇到 P,则 p ++。在遇到下一个 A 之前,遇到 T,则 t --。感觉这种题必须得先学思路,才能做题。
2026-03-19 15:50:32
17
原创 PAT 乙级 1035
要按照归并排序的规则,一遍一遍的去排序,看什么时候得到的数列跟输入给的中途得到的数列一样。然后继续排列一遍,得到答案。插入排序特点,前面几个数字按照递增顺序排列,后面几个数字跟原本数列的数字一样。记录首次 25 分的题,第一次提交就过了。主要思路,如何判断是插入排序还是归并排序。如果满足上述特点,就是插入,否则是归并。如何写出归并的下一次排列后的数据。中间的模拟,要仔细去模拟。
2026-03-19 15:24:09
24
原创 PAT 乙级 1030
首先数组不能定义 int 要定义 long long int ,因为 元素*p 的结果可能会超过 int,所以一开始定义元素就只能定义 long long int。j 不需要每次都从 i 开始。不满足这个条件,就不用再往后循环了。如果直接用两个 for 循环,会运行超时,只能得22分。要在双重 for 循环上加一些限制条件,就不会超时了。核心思想是,先从小到大排序,再循环处理。不亏是25分的题,考的好细致。
2026-03-19 11:54:53
24
原创 PAT 乙级 1025
最后输出的时候,下一个结点的位置,不能用 next,因为链表反转了,但以前的 next 还是没有变。用 sum 得到 k 的倍数:(sum - sum % k)感觉这种代码得背一下。
2026-03-18 21:28:49
20
原创 PAT 乙级 1020
本题的坑是,如果所有库存加起来,还是不够需求量,要单独处理。原来对于结构体,cmp函数要这么写。题目说正数,那就是小数的意思。
2026-03-18 18:28:23
26
原创 PAT 乙级 1124
因为斐波拉契数列, 0 1 1……这有两个数字一样,所以比较要从第三项和第四项开始比较,又因为数组是从 0 开始计数,所以相当于从第二项和第三项开始比较。就找到了离给定数据最近的斐波拉契数 v[k - 1]
2026-03-18 16:56:21
20
原创 PAT 乙级 1119
首先,核心思路是,每个元素,左边连续下降的有几个元素,右边连续下降的有几个元素,取最大值,把最大值放进公式 max1 * 100 + 200,再全部加到 sum 里面。其次有个坑,如果碰到连续相等的元素,怎么处理,不好处理啊。碰到连续相等的元素,要越过去,然后继续处理。该怎么越过去,而且对别的计算毫无影响。这行代码我不知道是巧合,还是说这种题是套路,实在是妙。本题依旧看了参考答案,感觉本题的思路写法,都好难啊。
2026-03-18 14:02:18
29
原创 PAT 乙级 1114
如果用 begin() 或者 begin() + 2,那只删除这一个字符。要想不删到尾,就要用两个数字,一个数字是起始位置,一个数字是要删的长度。但 erase 的用法还挺特殊,跟 substr 用法相似。如果只用一个数字,那就会从数字开始删到尾。
2026-03-18 00:07:46
31
原创 PAT 乙级 1089
如果是,则满足了所有条件,有两个狼,剩下的是好人,有两个人说谎,一个是狼,一个是好人。本题要抓住一个关键解题步骤,先确定两个人 i j 是狼,再来进一步验证。当然,最后结果不止一种可能性,所以只要编号最小的两个。进一步验证说谎的是不是一个狼,和一个好人。
2026-03-17 18:58:25
25
原创 PAT 乙级 1079
这个题坑的很,我还在那想了半天,如果一开始就是回文数,是不是也要丢进去循环。结果不是,如果一开始就是回文数,可以直接结束本题。
2026-03-17 15:35:47
23
原创 PAT 乙级 1064
遍历写法 for(auto it = s.begin();= s.end();set 不仅可以使插入的数据不重复,还能自动从小到大排好顺序,真的厉害。输出写法 cout << *it;set<int> s;插入要用insert。
2026-03-17 13:38:53
24
原创 PAT 乙级 1054
这个题真的难,字符串必须用 char 定义,因为这个 string 不能随便输入输出,又因为本题必须要用 sscanf 和 sprintf,所以必须用 scanf,所以必须用 char 输入。本题代码几乎全部是参考答案的写法,自己本来跟答案写的很不一样,但是一直错,就一直改,一直改到跟参照答案几乎一样时,才拿满分。那个输出部分千万别写成 1 numbers,这个问题找了半天。char 因为有 \0的存在,要用strlen(s)
2026-03-17 11:04:50
25
原创 PAT 乙级 1049
还有本题光定义 double 还不够,要定义 long double,至于为什么,不知道。long double 类型的数据是没办法输出的,要强转成 double 类型才能输出。像这么选,每个数字会被选 i * (n - i + 1) 次。本题就是考察一个公式。
2026-03-17 00:02:45
29
原创 PAT 乙级 1034
还有要注意,所有的整数定义都要写 long long,scanf 要写 %lld,在最开始定义 a b 的时候也要这么写,因为在后面的传参部分,如果一开始定义 a b 是 int 型,那在传参计算过程中就会算成 int 型,根本不能进行 long long 类型的计算。本题最关键就是要思路清晰的写函数,函数只是处理,分子和分母,把 分子/分母 写回正确的模式。
2026-03-16 16:33:40
24
原创 PAT 乙级 1029
但如果cout << toupper(s1[i]),直接输出,那输出的就是 int 型数字。toupper(s1[i]) 可以当成大写字母,也可以当成 int 型数字。在函数、压栈里是当成大写字母。
2026-03-16 14:59:01
19
原创 PAT 乙级 1019
此题需要注意,s 有可能一开始就是 "6174",仍然需要去循环。所以要用 do while 来判断 s 是否等于 "6174"printf 不能输出字符串 string。s 一直作为循环条件。
2026-03-16 12:13:40
21
原创 PAT 乙级 1118
最难的就是 sqrt 的处理,必须使用 substr,必须使用 stoi,stoi只能处理字符串,不能处理字符。因为 sqrt 后面有可能是两位数。
2026-03-16 00:26:41
29
原创 PAT 乙级 1113
一定要跟ans.resize(n) 搭配着用。这样才可以写ans[i]。添加前导 0 是在前面添加不是在后面添加。jin位如果在最后是 1 要注意添加1.我以后就固定一个方向,哪里是前面。append的语法也要用对。insert的语法要用对。不然就只能用压栈了。
2026-03-15 22:46:29
23
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅