PTA乙级
新西兰做的饭
Here we go!
展开
-
PTA——1075 链表元素分类、1105 链表合并、1110 区块反转
这三道题换汤不换药,总结下来就是首先利用结构体存储节点,利用map存储地址,将地址下标映射到结点。然后用利用头结点的地址将链表串起来,存进vector中,这里每个节点的前后关系就是他们在数组中的位置。所以存进vector时不用考虑结点的next值了,这只在得到链表时有用。最后根据题意按照输出次序将结点存进另一个vector中,由于链表中结点前后关系就是链表的关系,因此遍历这个vector即可,遍历即按照链表顺序输出。原创 2024-03-20 21:04:35 · 296 阅读 · 0 评论 -
PTA——1090 危险品装箱(含超时分析)、1065 单身狗
这两题很像,这一题是1065题的升级版。1065单身狗是两两配对不重复的,即文意“不会脚踏两只船”。本题是相当于哈希表链式存储,一个人可以同时和多个人配对。解题方法是一样的,创建is数组,如果来客有配对就将其配对在is数组中赋值为1。原因是vector(N)会产生更多的缓存未命中,而map使用更少的内存,会显著提高命中率。本题不可用并查集做,因为1和3配对,3和5配对但不代表1和5是一对。存储,耗时大大下降,节省3/4的时间,代码上不需有任何的改动。,则说明与他配对的人来过,即他俩同时出现,输出No。原创 2024-03-15 18:20:49 · 435 阅读 · 1 评论 -
PTA——1041 考试座位号、1042 字符统计、1043 输出PATest、1044 火星数字
利用哈希表,最后按照PATest顺序输出,只要这几个字符的哈希值不为0,就循环输出,谁先到0了谁停止输出。处理起来有点麻烦,注意进制转换的经典例子:130转换为13进制,应该为oct而没有后面的0(tret)。利用哈希表,最后输出字母即可。利用哈希表整合信息输出即可。原创 2023-03-29 21:18:49 · 285 阅读 · 1 评论 -
PTA——1036 跟奥巴马一起编程、1037 在霍格沃茨找零钱、1038 统计同成绩学生、1039 到底买不买、1040 有几个PAT
遇到P就nump++,直到遇到A,A字符前面P的个数和后面T的个数的乘积即为这个A所在的PAT串的个数,将其取模累加。先统计整个串中T的个数numt,随后遍历整个串,遇到T就numt–,此时numt代表串后面的t的个数。利用两个哈希表,先统计摊主的珠子个数,再利用unordered_map统计小红的珠子种类以及个数。如果结果为非正数,则说明不缺少,输出摊主珠子个数 — 小红珠子个数 即为多余的珠子个数。接着对于小红的每种珠子,利用sum累计比摊主多了多少个(即为缺了珠子)。参考了柳神的代码,大佬太强了。原创 2023-03-29 18:44:45 · 386 阅读 · 0 评论 -
PTA——1031 查验身份证、1032 挖掘机技术哪家强、1033 旧键盘打字
注意英文字母的坏键用大写字母给出。因为可能有空白字符串,所以要使用。使用哈希表解决很方便高效。函数接收一行中内容。原创 2023-03-26 21:25:35 · 235 阅读 · 0 评论 -
PTA——1029 旧键盘、1030 完美数列
哈希解决非常方便,用字符的ASCII码值作为key,因为输出大小写不敏感,所以我们在哈希映射之前就把失配的小写字母转化为大写字母,哈希映射并压入输出数组out。最后一个测试点不通过是因为我这样写有一种可能b与a的匹配部分全部相等,而这种情况a的b没匹配到的后面部分直接处理并哈希映射即可,因为他们全部失配。,去计算前一个位置一定满足条件的长度。但是如果序列到最后一个位置都不满足这个条件,则len永远不会更新,导致WA。,下次直接从已找到序列的下一个位置开始枚举即可。我最开始写错了,将更新条件设置为了。原创 2023-03-25 21:19:20 · 187 阅读 · 0 评论 -
PTA——1027 打印沙漏、1028 人口普查
考察解决问题的能力,我先用了一个打表,将1、1+3x2、1+3x2+5x2也就是沙漏的形状打表,随后由输入数据判定应该属于哪一个表。首先输出剩余的没用到的符号数,f代表第i个奇数,也就是那个表的最高(低)一层的奇数,用p求出第i个奇数的值应该是2*i-1;还是考察解决问题的能力,如果先算出每个人的岁数来就太麻烦了,正解就是直接比较年月日,最后需要做有效年龄为0的特判。随后分层处理,分为上沙漏和下沙漏,注意细节即可。每行的末尾按照标准格式并没有空格,输入空格会提示格式错误。原创 2023-03-24 10:53:19 · 194 阅读 · 0 评论 -
PTA——1025 反转链表、1026 程序运行时间
1.首先,我没有审清题目,地址为五位数,所以可以用int储存,从而可以用数组索引当做链表地址把链表串起来。我一开始用的str,到分离出链表这一步只能够每次迭代n个结点,TLE测试点5超时。2.我再次没有审清题目,题目说的是每k个结点翻转一次,而不是前k个,不能好像看懂了样例就开写,应该仔细审题。不能写成>0.4了,因为[0.4,0.5)之间的值也是4舍的部分。原创 2023-03-20 21:19:12 · 194 阅读 · 0 评论 -
PTA——1024 科学计数法
写了好久,通过这道题,提取数据层数越多,也就是设置的中间变量越多,最后的错误越难以检查,应该认清问题的本质,用少的变量分出最有用的数据,错误也方便检查。原创 2023-03-19 21:11:20 · 185 阅读 · 0 评论 -
PTA——1021 个位数统计、1022 D进制的A+B、1023 组个最小数
注意一下num数组中的数不一定是十个就好了。模拟一遍进制转换即可。原创 2023-03-19 19:41:00 · 81 阅读 · 0 评论 -
PTA——1019 数字黑洞、1020 月饼
最后发现是理解题目的问题,背景介绍说给定任意4位正整数,我就以为是前面默认补0了,例如:0001,0099,0989等等,但其实还要看题目的输入格式,说给出一个正整数,正整数当然就是Z*输入:1,99,989了,所以要在输入后自己补一波0。1.相减过程中有可能出现不到四位数的数,那么转换成字符串就会少了开头的若干个‘0’,从而WA;这个我是在做题过程中发现了的,但修正后2、3、4测试点仍然不过。注意数量和单价都是正数,也就是说R*,不一定是正整数Z*就好。原创 2023-03-17 18:03:17 · 168 阅读 · 1 评论 -
PTA——1015 德才论、1018 锤子剪刀布
遇到问题:error: C++ requires a type specifier for all declarations,原来是结构体的成员函数忘记带上返回值类型了,C++还是严谨。但是实战操作如果要用泛型容器map,自动排序是不稳定的排序,所以自己写一个哈希表,一个哈希映射函数会比较方便。这道题思路是很简单的,做一个哈希映射结果就出来了,如果口述的话很简单。这道题算法全在cmp()函数上,如果只能用C语言那就麻烦太多了。原创 2023-03-17 16:18:59 · 177 阅读 · 0 评论 -
PTA——1012-数字分类、1014-福尔摩斯的约会
C++解题还是要比C语言方便很多,在于C++的STL有丰富的泛型容器和算法。原创 2023-03-15 20:49:50 · 141 阅读 · 0 评论