- 博客(27)
- 收藏
- 关注
原创 PAT 甲级 1098 Insertion or Heap Sort 测试点4
先将第1个元素和第 i 个元素互换(第i个元素是从后往前第一个不是排好的元素,第一个元素一定是在堆中最大的元素,将两个元素互换那1~i-1就是没排好的了。学习了柳神的判断语句,用一个j来代替要换位置的坐标就可以少进行很多重复的判断(一开始括号没对上还找问题找了很久QAQ)当时卡在这里卡了很久......一直以为是堆排序写错了QAQ。然后就是把第一个元素下沉,一开始写了一坨if判断,但是。插入排序就是前面是从小到大排好了,后面位置都不变。如果前后两个元素相等也是可以算排好的(测试点4)
2025-03-04 21:55:01
211
原创 PAT 甲级 1107 并查集
接着就遍历一遍v [ i ] ,如果不是终点(v [ i ]!= i)就把该点的人数 num [ i ] 传递给num [ v[ i ] ]路径压缩这么写比较方便:(因为find ( v [ x ] ) 返回的是v[x]=x 的终点情况,所以每一个路径上的节点都指向这个终点。v [ i ] 指向父节点,num [ i ] 记录喜欢这个hobby的人数(因为一个人算一次所以就加第一次)最后就是把 数组num 排序找到人数不是 0 的节点就可以啦~经典并查集,参加蓝桥杯的都做烂了hhhhh。
2025-03-03 21:20:17
204
原创 PAT 甲级 1099 测试点1,2
所以一开始写的方法只能在n<31的时候使用(改成long long类型就是63),而这次的n=100所以只能前序遍历+bfs了。
2025-03-03 19:03:23
293
原创 PAT 甲级 1053 测试点5
然后找了很久发现是cmp比较函数出了问题,当leafs中所有元素都相同时就会报错,以下是模拟测试点5的输入:(其实只要leafs数组中超过17个相等的元素就会报错了)在写这道题的时候出现了测试点5未通过的情况,以下是初次尝试的代码,写的有些啰嗦,反正主要用了dfs的方法写的。而cmp(a,b)==false 且cmp(b,a)==false 的情况也是可以的;但是 cmp(a,b)==true 且 cmp(b,a)==true 的情况是错误的。的函数只有当cmp(a,a+1)==false 时才停下来。
2025-03-01 12:44:34
1053
原创 PAT 甲级 1090 Highest Price in Supply Chain
构造一个二维数组 v ,v[i] 存放指向 i 的所有元素。构造数组 high 存放每个节点的高度(第几级经销商)构造队列 q 存放每个待读取的节点。
2025-02-23 23:24:54
256
原创 PAT 甲级 1091 Acute Stroke
一开始只是简单的递归(bfs),导致最后两个没法通过(爆栈了)后面看了书上的使用queue存储走过的路径,就不用使用递归了。
2025-02-23 22:35:48
300
原创 PAT 甲级 1056
题目的排序没读懂,后面看参考书才知道老鼠体重的排序是从1开始排,可以并列第3,所以其他老鼠的体重都是5而不是4......(一开始我以为他1,2,3,5的排序是最后一名要+1......导致只过了一半的测试点QAQ)数组(vector) v[i]代表第i只老鼠的体重,num[i]代表第i只老鼠的排名(1最小,出循环的high最大),因为最后输出的第一名体重最大,所以把num[i]转换成turn[num[i]],转换方式如下:
2025-02-12 22:18:27
180
原创 PAT 甲级 1051(stack)
当有元素大于之前的最大值时,栈顶高度为(now-max+stack),该高度不能超过最大高度m(推一下就知道啦)。这一轮最后栈顶高度增加(now-max-1)个单位(因为该元素出栈会导致结算时高度-1)。当元素小于之前的最大值时,就需要判断元素是否大于上一个出栈的值了:如果大于则不符合出栈规则先进后出了,所以直接flag=0。就可以了(毕竟出了一个元素了嘛)先用stack记录栈的高度,now是现在元素值,max是之前出现最大值,las是上一次出栈的元素值,flag=1记为是成立的栈。
2025-02-11 13:58:48
161
原创 PAT 甲级 1022(map,vector)
使用的是map<string,vector<int>>要注意的是最后两个数组会出错如果直接输出int答案的话,需要在前面补齐0才行!(问题不是出在重复的书本编号上)
2025-02-09 13:55:00
192
原创 PAT 甲级 1071
要注意的是如果只输入一个字母如:a,就不会返回答案(单靠循环内的话),所以在外面再做一次判断(复制下来就好了...p.s.屎山代码hhh)
2025-02-08 16:49:18
150
原创 PAT 甲级 1054
m[temp]++;当m中没有temp的时候自动赋值为0,所以一句话相当于省略了判断的过程QAQ。写完发现和算法笔记几乎一模一样。(注意使用iter时不要写成。
2025-02-08 15:20:19
201
原创 PAT 甲级 1039
使用for(auto j:m[name]) 遍历的时候大括号内的j不用加*(与另外一种方式区分一下)iter->second指向数值 (在这里就是vector<int>)iter->first指向键值 (在这里就是string)不知道为啥书上(算法笔记)说的是不能用map会超时但是我的没有。注意只能用cin>>s;反正不能用scanf(“%s”,s);
2025-02-06 12:50:27
875
原创 PAT 甲级 1081
要注意最后一个测试点会出现浮点错误(就是结果分子出现0的情况......吧?)所以在gcd这加一个a==0的就可以啦(因为分母不可能是0所以就不用管啦)
2025-02-03 12:31:25
100
原创 PAT 甲级 1069
输入为6174的时候也要计算一次(参考柳神的)(想破头也不知道为什么错一个QAQ)啊啊啊啊最讨厌这种数位的模拟题了QAQ。
2025-02-01 20:54:14
227
原创 PAT 甲级 1093
只用一次倒序遍历即可,ts记录'T'的个数,每出现一个'A'就能多ts个"AT"组合,每出现一个'P'就能多ats个'PAT'组合。发一下只是因为很喜欢《APT》
2025-01-31 19:08:39
1439
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人