
PTA
娃娃酱斯密酱
这个作者很懒,什么都没留下…
展开
-
PTA-L2-028 秀恩爱分得快 (25分)
PTA-L2-028 秀恩爱分得快 (25分)传送门这道题纯粹的数据结构我们特别注意0和-0的情况,所以应该字符串读入。如果把所有异性的亲密度值都算出来,会tle我们只需要算出关于那一对情侣和异性之间的值即可。然后注意特殊情况的考虑,如果所给出的一对情侣没有出现在这些照片中,我们只需要输出这对情侣即可所以我们初始化找最大的亲密度值的时候只能初始化为0,不能是负数(我在这wa了一次)我们用sex[]来标记男女,女生标记为1.注意题目中说到的彼此,只有彼此都是对方最亲密的,才输出自己本身,否则原创 2020-11-28 10:34:32 · 1876 阅读 · 0 评论 -
PTA-L2-026 小字辈 (25分)
PTA-L2-026 小字辈 (25分)传送门这道题就是dfs.就是问树的高度我们把祖先给标记出来。然后从祖先开始dfs.同时在dfs中更新数的高度。同时记录当前操作的最底结点。一旦发现有更深的,我们需要清空。在进行存储。用set来存储。可以查重,因为我们可能dfs到同一个结点上面去。最后输出即可。(因为我们输入的时候就是按照递增顺序来的,所以不需要sort了)代码部分:#include <bits/stdc++.h>#define mst(a, n) memset(原创 2020-11-27 21:45:08 · 348 阅读 · 0 评论 -
PTA-L2-025 分而治之 (25分)
PTA-L2-025 分而治之 (25分)传送门这道题,简单图的问题。(我先开始想的挺复杂的=-=)无向图。这道题的意思就是问最后按照给的解决策略直接用每个结点的度来解决问题。我们首先把每个结点的度存好,因为要判断多组数据的可行性。所以我们再开一个数组临时保存结点的度,不修改原先的数据,为下一次策略赋值。来一个结点,我们就把有和它相连结点的度-1,当然,自身的结点的度置为0,最后判断所有结点的度是否都为0,输出即可。代码部分:#include <bits/stdc++.h>#原创 2020-11-27 21:11:05 · 400 阅读 · 0 评论 -
PTA-L2-022 重排链表 (25分)
PTA-L2-022 重排链表 (25分)传送门这道题是关于链表的题目。我们可以直接数组处理。这里要说的是输出情况。我们存的时候,按照链表的顺序给每个结点对应的索引。然后根据这个索引进行重新排序。输出的时候注意到奇数和偶数的输出情况。然后还需要注意的是输出的结点的下一个结点域需要改变,是重拍过后的地址。特别注意“-1”的情况。代码部分:#include <bits/stdc++.h>#define mst(a, n) memset(a, n, sizeof(a))usi原创 2020-11-27 19:00:11 · 456 阅读 · 0 评论 -
PTA-L2-020 功夫传人 (25分)
PTA-L2-020 功夫传人 (25分)传送门这是一道简单的dfs题目。这个题目我理解起来有点歧义其实,我不知道那个得道者得到的武功威力是在师父基础上面的N倍还是师父已经将削减的威力传到自己身上之后的威力再翻倍这种。事实证明是前者。我们用二维数组把关系存起来,如果某一代的下一代是得道者,我们就把得到者的师父标记一下用vis[]进行标记。然后dfs部分,如果vis[]不为0,那么把翻倍的威力累加到ans中。其余的就是一直递归下去,然后按照平常的威力削减传下去就行。最后就是注意一下输出,输出原创 2020-11-27 16:57:12 · 329 阅读 · 0 评论 -
PTA-L2-018 多项式A除以B (25分)
PTA-L2-018 多项式A除以B (25分)传送门这道题,多项式除法。先开始我不知道多项除法的操作过程。其实就是每次要约掉被除数的最高项,依次做下去,知道除数的最高项大于操作过后的被除数的最高项为止。我们用a[]来保存被除数b[]来保存除数。考虑两种情况:1.如果多项式a的最高项指数小于b的最高项指数,那么这个商就为0,余数就是a2.如果多项式a的最高项指数大于等于b的最高项指数,那么就可以进行操作,每次商的最高指数就是当前操作的多项式a的最高指数-多项式b的最高指数,相应的可以得到其原创 2020-11-27 15:28:52 · 1435 阅读 · 0 评论 -
PTA-L2-016 愿天下有情人都是失散多年的兄妹 (25分)
PTA-L2-016 愿天下有情人都是失散多年的兄妹 (25分)传送门这道题就是一个dfs我们标记从子女开始的五代以内的人,用dfs全部都标记为1.然后在dfs中判断是否有已经标记过的人,如果有,那么说明五代以内有共同的祖先。就可以判断输出了。这里注意两点:1.我们标记性别的时候不能简单的0,1标记,因为有些是要你自己判断性别的,题目中不会给,如果因为预处理不当很容易直接把不知道性别的人直接默认为0,实际上赋予了其性别,所以我们可以标记为‘M’ / ‘F’,然后在给出父母ID的时候,也需要把性别标原创 2020-11-27 10:03:24 · 825 阅读 · 0 评论 -
PTA-L2-014 列车调度 (25分)
PTA-L2-014 列车调度 (25分)传送门这道题相当于就是一个LIS的题目?(LIS:最长上升子序列)没错,就是了。题目是想问你给你一个序列,至少要多少个通道才能使得输出是递减的顺序。那么每一个通道都得是降序排列的,如果当前操作数在前面的排好的序列中无法达到降序,那么就得另外再开一条通道,使得每条通道都是降序,输出也就是降序的了。那么这就很容易联想到了LIS的模板题,最多要有多少个导弹系统,简直是一模一样=-=那么通道数就是等于我们最长递增子序列的长度。所以就是LIS的裸题。不懂LIS原创 2020-11-26 20:43:50 · 387 阅读 · 0 评论 -
PTA-L2-013 红色警报 (25分)
PTA-L2-013 红色警报 (25分)传送门这道题,并查集。判断有多少个连通的区域,其实就是并查集的操作中判断有多少个根节点。就是统计根节点的操作cnt。我们最开始应该保存每一条连通的边。在后面的攻占城市中,我们只需要不处理那些攻占城市连通的边即可。用vis[]记录。其他的继续重新使用并查集合并操作,进而统计有多少个根节点sum。判断两个的数量是否相等/相差1(原因是攻占一个城市之后,那个城市会消失,不算入我们连通性中,但是并查集数根节点的时候会计数,所以是相差1)因为题目中提到如果本原创 2020-11-26 20:03:50 · 372 阅读 · 0 评论 -
PTA-L2-012 关于堆的判断 (25分)
PTA-L2-012 关于堆的判断 (25分)传送门这道题关于堆的问题。小顶堆:根节点小于或等于所有左右子结点大顶堆:根节点大于或等于所有左右子结点这道题构造一个小顶堆。每读入一个数字就把它加进堆里面。然后进行堆的调整。比较左右子结点与根节点的大小。进行调整。把堆建好了,我们需要记录结点和结点所在的位置。用map来记录即可。让结点作为map的first,位置作为second.然后就是判断部分了。有结论:堆在连续数组的存储中,任意一个结点的父结点是位置/2;我们可以用上面的结论进而判原创 2020-11-26 19:02:36 · 456 阅读 · 0 评论 -
PTA-L2-007 家庭房产 (25分)
PTA-L2-007 家庭房产 (25分)传送门这道题,简单并查集。就是输出处理麻烦了些许。我们把个人的id作为数组的下标。然后进行存储,合并好之后,用set容器把每个家庭的代表的id存起来,然后相应的存入到结构体中,然后sort一下即可。代码部分:#include <bits/stdc++.h>#define mst(a, n) memset(a, n, sizeof(a))using namespace std;const int N = 1e4+ 10;const int原创 2020-11-26 14:42:52 · 461 阅读 · 0 评论 -
PTA-L2-006 树的遍历 (25分)
PTA-L2-006 树的遍历 (25分)传送门给出后序遍历和中序遍历,给出层次遍历。我们知道后序遍历:左右根中序遍历:左根右所以后序遍历的最后一个就是根节点,然后我们在中序遍历中找到这个根节点,把左子树和右子树区分开来,然后递归即可。递归过程中我们把构建出来。最后输出。bfs输出即可。代码部分:#include <bits/stdc++.h>#define mst(a, n) memset(a, n, sizeof(a))using namespace std;con原创 2020-11-25 21:49:21 · 294 阅读 · 0 评论 -
PTA-L2-005 集合相似度 (25分)
PTA-L2-005 集合相似度 (25分)传送门这道题是set的用法。然后我这个憨批还一次一次求有多少个不相等相同的元素和多少个不相等元素,因为用set的迭代器次数过多,导致我让一个测试点超时了。。应该还有我用了cin的原因。我们只要算出有多少个不相等相同的元素,然后用我们可以直接获取set的size,然后相加减去不相等相同的元素就是总共不相等的元素了。代码部分:#include <bits/stdc++.h>#define mst(a, n) memset(a, n, size原创 2020-11-25 21:11:36 · 307 阅读 · 0 评论 -
PTA-L2-004 这是二叉搜索树吗? (25分)
PTA-L2-004 这是二叉搜索树吗? (25分)传送门这道题树的问题。给出了前序遍历,问我们通过这个判断这个树是不是二叉搜索树的前序遍历或者这棵树镜像的前序遍历。是的话输出其后序遍历,不是的话输出“NO"根据二叉搜索树及前序遍历的特点,我们可以得知一个前序遍历中,第一个肯定是根节点,那么我们就要找出左子树和右子树的分界位置,找的方法就是根据二叉搜索树的特点,左子树都小于根节点,右子树都大于等于根节点,用指针过来索引。并且这两个指针的差满足等于1.因为是分界线的位置,不可能这两个指针的中间还有原创 2020-11-25 20:29:41 · 1280 阅读 · 1 评论 -
PTA-L1-050 倒数第N个字符串 (15分)
PTA-L1-050 倒数第N个字符串 (15分)传送门这道题相当于进制的题目我们可以算出给出的长度为L可以组合成多少个字符串,总数为pow(26, L);要我们算倒数第n个字符串,我们转化一下算第pow(26, L) - n + 1是多少。然后取模操作就行,从后往前输出。要注意的是:代码部分的输出是’a’ + ?的操作,所以应该是从0开始的。所以我们在算第几个的时候少算一个即可。即pow(26, L) - n,记录是从第0个到第pow(26, L) - 1个代码部分:#include &l原创 2020-11-24 20:50:52 · 488 阅读 · 0 评论 -
PTA-L1-046 整除光棍 (20分)
PTA-L1-046 整除光棍 (20分)传送门我可能一遇到数学题我就必挂。这道题相当于模拟。为了找出一个光棍数可以整除输入给的数x,我们可以先找出第一个大于x的光棍数,除以x得到的商输出,余数在末尾加上一个1继续除以x,知道余数为0结束,这样就可以得到我们的答案了。我们假设找到了一个光棍数ans,这个ans可以整除x,那么我们列算式的过程中就是我们前面的过程,得到余数,末尾加上一个1,一直到余数为0为止,得到的商就是我们要输出的s。代码部分:#include <bits/stdc++.原创 2020-11-24 18:01:31 · 405 阅读 · 0 评论 -
PTA-L1-043 阅览室 (20分)
PTA-L1-043 阅览室 (20分)传送门这道题其实是数据结构,不难,就是数据处理方面。我是把小时和分钟分开存储的书的编号作为各个数组的下标vis[num]标记编号为num的书是否为借阅状态h[num]标记编号为num的书借出小时数mi[num]标记编号为...原创 2020-11-24 09:41:52 · 756 阅读 · 0 评论 -
PTA-团体天梯赛-L1-049 天梯赛座位分配 (20 分)
@致“真香”“各种打脸”的小伙伴们嘤嘤嘤时隔不久我又发博客啦~~~这次我想废话几句嘛,这次做这道座位分配的题目我是真的各种打脸啊(脸都肿了QAQ),difficult还是在的嘛,level也还是在的嘛,实践告诉我们不要随便瞎说话!!!说话之前要经过大脑的思考!!!所以写一篇博客来纪念一下啦~题目精简描述:本题要求我们根据已知的学校数量和各个学校的队伍数量进行座位的分配注意题目的重点要求:同...原创 2019-08-11 20:57:59 · 920 阅读 · 2 评论 -
PTA-团体天梯赛-L1-002 打印沙漏(20分)精简版
@送给即将打天梯赛志同道合的朋友们题目精述分析:这一道题说实话是一道水题,按要求格式输出即可,但是为了寻求更为简便的方法,减少不必要的分类讨论,我们可以在打印的基础上先进行一定的数学分析。不仅仅可以减少代码量,也可以很好的锻炼思维。输入要求:输入一个整数和一个字符。输出要求:输出格式图形和多余的未使用的字符个数(最大程度的利用所给字符)分析:我们很容易观察到对于输入限定的字符个数n和行数x...原创 2019-08-01 20:56:14 · 335 阅读 · 0 评论