pta 甲级
m714星云
渣渣
展开
-
L2-1 特立独行的幸福 (25 分)
#include <bits/stdc++.h>using namespace std;int diedai(int x){//计算平方累加和 int d = 0; while(x){ d+= (x%10)*(x%10); x/=10; } return d;}int num[10010];bool isprime(int x){ //判断素数 if(x==1) return false; for(int原创 2021-04-21 21:32:40 · 317 阅读 · 0 评论 -
L2-030 冰岛人 (25分)
题目2018年世界杯,冰岛队因1:1平了强大的阿根廷队而一战成名。好事者发现冰岛人的名字后面似乎都有个“松”(son),于是有网友科普如下:冰岛人沿用的是维京人古老的父系姓制,孩子的姓等于父亲的名加后缀,如果是儿子就加 sson,女儿则加 sdottir。因为冰岛人口较少,为避免近亲繁衍,本地人交往前先用个 App 查一下两人祖宗若干代有无联系。本题就请你实现这个 App 的功能。输入格式:输入首先在第一行给出一个正整数 N(1<N≤105 ),为当地人口数。随后 N 行,每行给出一原创 2020-11-08 21:36:06 · 448 阅读 · 0 评论 -
2017-L3-1 二叉搜索树的结构 (30分)
题目二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉搜索树。(摘自百度百科)给定一系列互不相等的整数,将它们顺次插入一棵初始为空的二叉搜索树,然后对结果树的结构进行描述。你需要能判断给定的描述是否正确。例如将{ 2 4 1 3 0 }插入后,得到一棵二叉搜索树,则陈述句如“2是树的根”、“1和4是兄弟结点”、“3和0在同一层上”(指自顶向下的深度相原创 2020-10-31 19:30:52 · 521 阅读 · 0 评论 -
PTA甲级 1002 A+B for Polynomials
题意求A有序多项式+B有序多项式后的有序多项式,输入中前者是指数,后者是系数。思路双指针法思想:用一个指针遍历a数组,一个指针遍历b数组。比较两者的指数大小。如果a当前指向的元素指数大的话,将此元素放入答案数组,同时a当前指针往后移动一个。同理对b进行同样的操作。如果a和b当前的指针相同,则将其系数相加(不为0)放入答案数组。边界条件:可能会导致a或b提前遍历完,所以要将剩余的元素全部...原创 2019-12-31 21:16:45 · 257 阅读 · 0 评论 -
PTA甲级 1001 A+B Format
题意给定a,b,求出a+b的和,然后每三位数字以逗号分隔,除非数少于三位。思路利用to_string 将数据转换为字符串,然后逆序每三位加逗号代码#include <bits/stdc++.h>using namespace std;int main(){ int a,b; cin>>a>>b; string s=to_st...原创 2019-12-31 20:44:30 · 236 阅读 · 0 评论 -
1119 Pre- and Post-order Traversals (30 分)
解题思路检查每个节点是否有两个子结点因为只有一个子结点的话,它既可以是左儿子也可以是右儿子。(前序和中序不能确定一颗唯一二叉树的原因。)题目中如果是NO的话,随便选一个,(答案不唯一)code#include <bits/stdc++.h>using namespace std;vector<int> pre(30),post(30),in;int ju...原创 2019-11-27 21:01:16 · 111 阅读 · 0 评论 -
1014 Waiting in Line (30 分)
解题思路先让n×mn\times mn×m个数进入分界线内,但要判断一下人数,有k<n×mk<n\times mk<n×m 和 k>=n×mk>=n\times mk>=n×m 两种情况结构体存入三个数据:队首出队时间最后结束时间一个队列这样处理的话,后面就可以通过遍历找到每个窗口的队首处理时间,找到最小值,一个一个插入到对应的窗口中。注意...原创 2019-11-27 16:50:09 · 112 阅读 · 0 评论 -
1080 Graduate Admission (30 分)
解题思路题目条件第一条:先排序按成绩大小题目条件第二条:按照指定的规则排序,总分相同比GE,GE相同排名相同题目条件第三条:按照学生的排名进行录取,如果该学校满了,则跳去学生的第二志愿,依此下去题目条件第四条:排名相同的且志愿相同的同时录取(可以记录每个学校的靠后的排名,如果后面排名相同就进行补录)用set可以进行升序,记录学生数code#include <bits/std...原创 2019-11-26 19:33:19 · 78 阅读 · 0 评论 -
1095 Cars on Campus (30 分)
解题思路首先得找出in和out都匹配的车辆,不然在后面找有多少辆车在里面且pair是很麻烦的先按车牌相同的筛选出来pair的停车和离开的时间将其保存在car数组里面,并将car排序通过car数组可以知道在当前车之前有多少辆车在里面,in记为1,out记为-1比较该车与条件时间,可以知道车辆数code#include <bits/stdc++.h>using nam...原创 2019-11-26 16:54:15 · 112 阅读 · 0 评论 -
1016 Phone Bills (25 分)
题意不能直接输出姓名,因为如果你的账单不符合,你的名字是不会被打印出来的。排序题code#include <bits/stdc++.h>using namespace std;struct node{ string name; int month,day,hh,mm,status; int last;};int p[25];bool cmp...原创 2019-11-26 14:21:32 · 152 阅读 · 0 评论 -
1068 Find More Coins (30 分)
题意状态方程:dp[j]=max(dp[j],dp[j−w[i]]+w[i])dp[j]=max(dp[j],dp[j-w[i]]+w[i])dp[j]=max(dp[j],dp[j−w[i]]+w[i]) 其中dp[j]dp[j]dp[j]表示不超过j的最大价格我们只要知道最后dp[m]==mdp[m]==mdp[m]==m是否有此等式成立即可。 code#include <b...原创 2019-11-22 19:37:30 · 123 阅读 · 0 评论 -
1067 Sort with Swap(0, i) (25 分)
题意贪心,题目要求用0去交换其它的位置,使得最后序列有序。那么其实可以分为两种情况:0不在0位和0在0位。一。如果0不在0位,我们就用0去交换应该在这个位置上的树比如说01234402131位上应该是1,但却是0,于是我们就用0去换3位上的1012344· 1203依次下去。。。。。二。如果0在原位,就不...原创 2019-11-21 20:07:17 · 82 阅读 · 0 评论 -
1150 Travelling Salesman Problem (25 分)
题意这道题其实跟哈密顿回路问题差不多。是要找一个能遍历图中所有顶点的简单回路(即每个顶点只访问 1 次)最后因为是回路,1. 起点和终点是一致的,2. 其次用一个集合存放所有的结点,看集合里面的个数是否为n,3. 所有点都被访问且被访问一次就是输入的数据只能是n+1个结点。最后循环一遍给定的结点, 看一下前后向另两个结点是否有边,加权路径即可code#include <bits/...原创 2019-11-21 19:17:12 · 73 阅读 · 0 评论 -
1122 Hamiltonian Cycle (25 分)
题意是要找一个能遍历图中所有顶点的简单回路(即每个顶点只访问 1 次)最后因为是回路,1. 起点和终点是一致的,2. 其次用一个集合存放所有的结点,看集合里面的个数是否为n,3. 所有点都被访问且被访问一次就是输入的数据只能是n+1个结点。最后循环一遍给定的结点, 看一下前后向另两个结点是否有边即可。code#include <bits/stdc++.h>using na...原创 2019-11-20 17:03:42 · 606 阅读 · 1 评论 -
1053 Path of Equal Weight (30 分)
题意先将每个结点的孩子按照权值大小进行降序排序,这样就满足题目中要求的从右往左顺序。然后就是如果到了叶子节点且权值等于给定的数值,就打印路径。主要是这三行代码 path.push_back(a[g[st][i]]); if(!vis[g[st][i]]) dfs(g[st][i],v+a[g[st][i]]); path.pop_back();code#include <b...原创 2019-11-19 13:27:23 · 73 阅读 · 0 评论 -
1142 Maximal Clique (25 分)
题意给定几个点,判断是否为极大团,即每两个顶点都有边连接。判断给定的点是否两两都有边,将题目中的所给的测试顶点的所有邻接的点都加1,最后在这几个点循环看一下每个点入度是否等于k-1(顶点数减1),如果是则为团。然后如果存在一个点,使得其不为极大团,则必有一个或多个不在给出的数据里面的点,其入度为kcode#include <bits/stdc++.h>using nam...原创 2019-11-17 18:18:22 · 196 阅读 · 0 评论 -
1126 Eulerian Path (25 分)
题意对于无向图来说:是欧拉图,连通且所有节点的度为偶数是半欧拉图,连通且只有两个节点的度为奇数????欧拉图????code#include <bits/stdc++.h>using namespace std;vector<int> g[510],d(510,0);bool vis[510];int n,m,u,v,sum=0,cnt=0;void dfs(...原创 2019-11-15 19:50:25 · 276 阅读 · 0 评论 -
1155 Heap Paths (30 分)
题意判断最大堆,最小堆,不是堆。然后输出从根节点道叶子节点的路径首先叶子节点没有左右孩子,所以其判断条件就是其2×leave+12\times leave+12×leave+1和2×leave2\times leave2×leave超过n然后还要考虑到倒数第二层上有一个节点会只有一个孩子,在递归的时候要判断一下。code#include <bits/stdc++.h>us...原创 2019-11-15 13:43:30 · 68 阅读 · 0 评论 -
1147 Heaps (30 分)
#include <bits/stdc++.h>using namespace std;int a[1010],m,n,d,fir=0;bool judge(int st,int d){ if(st>n) return true; if(d==1){ if(2*st<=n&&a[st]<a[2*st]) retur...原创 2019-11-15 12:45:30 · 114 阅读 · 0 评论 -
1098 Insertion or Heap Sort (25 分)
题意找到两个排序中那个最容易分辨出来,明显是插入排序,先b数组扫一遍,遇到不是有序的位置停下来,从该位置与原数组比较,如果后半部分都相同就是插入排序,否则就是堆排序 然后堆排序可以就可以套用模版perdown函数就可以了。堆排序直接在b数组进行(将第一个元素与后面的元素比较,找到小于第一个的元素,从该位置perdown)code#include <bits/stdc++.h&g...原创 2019-11-14 17:16:18 · 330 阅读 · 0 评论 -
1130 Infix Expression
题意注意到运算符出现在非根节点处,只要不是在根节点处就要加括号,用递归去做。注意如果是在第一个根节点不需要加括弧code#include <bits/stdc++.h>using namespace std;struct node{ string s; int left,right;}tree[25];int a[25],n,root=0;string...原创 2019-11-14 17:11:15 · 199 阅读 · 0 评论 -
1151 LCA in a Binary Tree (30 分)
题意这种题目模版吧。。。把它记住就可以了。。。用depth存储每个节点的高度, 用parent存储每个节点的父结点,根节点设置为-1.LCAint LCA(int u,int v){ if(parent[u]==-1) return u; if(parent[v]==-1) return v; while(depth[u]>depth[v]) u=parent...原创 2019-11-13 13:06:46 · 91 阅读 · 0 评论 -
1127 ZigZagging on a Tree (30 分)
题意拿层序遍历做的(题目告诉我的),如果当前层为奇数层(从0开始算)则向右????扫,偶数层向左????扫。 这道题。。就很有必要说一下了最后一个测试点一直过不去。。。因为一直以为结点就30,我的level数组也开成30了。 所以万一树退化成了线性表。。。?我的level index不是得最起码230−12^{30}-1230−1个空间吗。。所以数组开大点就过了#include <bits/st...原创 2019-11-13 11:20:40 · 162 阅读 · 0 评论 -
1146 Topological Order (25 分)
题意判断是否为拓扑排序,拓扑排序的算法是,给定一个有向无环图, 判断队首结点的入度是否为0即可code#include <bits/stdc++.h>using namespace std;vector <int> d(10010,0),t(10010,0),g[10010];int main(){ int n,m,x,y,k,fir=0; ci...原创 2019-11-13 10:21:19 · 125 阅读 · 0 评论 -
1143 Lowest Common Ancestor (30 分)
题意找他的最近公共祖先结点。。听着名字就被糊弄过去了其实这是道很简单的题,因为他是BST啊!左边的树比根节点小,右边的树比根节点大,那么就是循环一下数组,看一下有没有满足比x结点大,比y结点小的这么一个点 或者(比x小,比y大)主要最近在学LCA类的算法。。。就直接做了,完全没想到BST的特点。。。对code2解法感兴趣的可以去????这里????看看code 1#include <bit...原创 2019-11-12 19:30:29 · 156 阅读 · 0 评论 -
1154 Vertex Coloring (25 分)
题目大意就是相邻的结点不能有共同的颜色,统计花了几个颜色涂(set) 这道题暴力居然过去了。。。。 贴上一张可爱的图。。。code#include <bits/stdc++.h>using namespace std;int main(){ int n,m,x,y,k; cin>>n>>m; vector<int&g...原创 2019-11-12 16:04:36 · 92 阅读 · 0 评论 -
1149 Dangerous Goods Packaging (25 分)
水题领接表的方式存储每一个结点不相容的结点。然后hash看该物品有没有在该清单上出现code#include <bits/stdc++.h>using namespace std;int main(){ int n,q,x,y,k; cin>>n>>q; vector <int> g[100000]; fo...原创 2019-11-12 15:26:12 · 278 阅读 · 0 评论 -
1145 Hashing - Average Search Time (25 分)
题目最后的搜索平均时间也是用正向的平方探测法去做的。居然?hash[h]==x||hash[x]==0 写错了,浪费生命啊///code#include <bits/stdc++.h>using namespace std;bool judge(int k){ if(k==1) return false; for(int i=2;i*i<=k;i+...原创 2019-11-11 19:37:45 · 92 阅读 · 0 评论 -
1114 Family Property (25 分)
这道题写完看了一下网上的,普遍用的是并查集我用dfs直接当图来写的,,,,过些天用并查集再写一遍code#include <bits/stdc++.h>using namespace std;struct node{ int num=0; int k=0;}num[10100];struct node1{ int id,p,f,m;};vect...原创 2019-11-11 13:42:29 · 135 阅读 · 0 评论 -
1082 Read Number in Chinese (25 分)
???查阅文献得:大数的读法:从高位读起,一级一级往下读;读万级的数时,先按照个级的数的读法来读,然后在后面加上一个“万”字;每级末尾的0都不读,如果其他数位有一个或连续几个0,都只读一个“零”。代码太臭了,太烦了。。。过些天回头写的时候再改一下。。。吐血啊????》〉》《〈《〈code#include <iostream>using namespace std;stri...原创 2019-11-08 13:23:40 · 292 阅读 · 0 评论 -
1040 Longest Symmetric String (25 分)(DP)
problemGiven a string, you are supposed to output the length of the longest symmetric sub-string. For example, given Is PAT&TAP symmetric?, the longest symmetric sub-string is s PAT&TAP s, he...原创 2019-10-20 14:13:54 · 95 阅读 · 0 评论