![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PAT
paopaotiantianquan
一点一点,慢慢来
展开
-
1148 Werewolf - Simple Version (20分)
题意:有两个说谎者。至少有一批狼说谎,但是不超过所有狼,因此,我们遍历狼的个数,让遍历狼身份为-1,正常人为1,再对照他们说的话,判断是否有两个说谎者,且不全为狼; #include <vector> #include <iostream> #include <cmath> using namespace std; int adj[108]; int main(){ int N; cin >> N; for(int i = 1; ...原创 2020-12-17 09:47:44 · 72 阅读 · 0 评论 -
1152 Google Recruitment (20分)
题意:给出两个数,第一个数是数的位数N。第二个数是从第一个数开始一次往后的K个数,如果该数是素数,则输出,否者输出404; 这里需要注意,PAT中字符转整形用stoi,对于字符数组用atoi不能用; #include <cstdio> #include <cmath> #include <iostream> #include <string> using namespace std; bool is_Prime(int n){ if(n <...原创 2020-12-15 11:33:52 · 72 阅读 · 0 评论 -
1153 Decode Registration Card of PAT (25分)
题意:测试者的id分为四个部分; 我们给出三种类型:第一种:按照分数从大到小排,当分数相同,按照id从小到大排; 第二种:求出符合类型二的id数量和分数总和; 第三种:求出符合类型三的id,和数量,按照数量从大到小排,数量相同,按照id从小到大排; 这里排序,最好用unorder_map,输出用printf,否则会超时; #include <iostream> #include <string> #include <algorithm> #include <v...原创 2020-12-15 10:44:15 · 184 阅读 · 0 评论 -
1147 Heaps (30分)
首先建立完全二叉树,再后序遍历,并判断父节点和子节点的大小关系; #include <vector> #include <iostream> using namespace std; vector<int> list,listp; int M, N; bool flag[2]; struct Tree { Tree *left, *right; int Val; Tree(int val) : Val(val), left(NULL), rig..原创 2020-12-11 21:49:12 · 67 阅读 · 0 评论 -
1155 Heap Paths (30分)
题意:给出一个完全二叉树,打印从根节点到叶节点的路径,打印的顺序需要先右后左;这里节点的值存储在数组中,其实序列从1开始。 并且判断是大顶堆,小顶堆,不是堆, 首先构建树,再遍历树; #include <vector> #include <iostream> using namespace std; int num,a[1001]; vector<int> path; bool flag[2]; struct Tree{ Tree *left,*right;...原创 2020-12-11 19:45:10 · 65 阅读 · 0 评论 -
1010 Radix (25分)
题意:本题目给出两个整数,一个N1,N2,他们的大小范围在0~z之间,如果tag为1则N1的进制为radix,反之。求另一个数与它相等的最小进制。 这里有两点,第一点,可能整数非常大,用longlong,但是如果一出则为付的。 第二点:要找出另一个数进制的最小和最大值,用二分法,否则时间会超限。最小的为整数中为最大的加一,最大的为另一个整数加1; 第三点:用二分法,只用判断左边和右边的关系,不用比较中间和两边的关系; #include <iostream> #include <cmat..原创 2020-12-11 10:33:51 · 57 阅读 · 0 评论 -
1013 Battle Over Cities (25分)
题意;给出N个城市,在给出M个两个城市之间的路径,再给出我们需要关注的城市,如果每一个城市被占领,则去这个城市和出这个城市的路都被摧毁,问如何快速修复几条路进行剩余城市的路径进行同; 这题:使用图找连通快,下表要是从1到N,注意这两点; #include <iostream> #include <vector> #include <algorithm> using namespace std; vector<int>route[1001]; int N,M..原创 2020-12-10 11:25:41 · 55 阅读 · 0 评论 -
1012 The Best Rank (25分)
题意:给出每一个学生的id,和他的A,C,M,E四种成绩,之后给出M个id,如果上述的M个id没有出现过,则输出N/A;否则输出最好的成绩的排名。当然如果有好几个成绩排名是一样的,则输入优先级最大的排名A>C>M>E; 这里需要注意,当每个人的排名一样则序号也是一样的,可以使用数组村相互每一个排名,并且按照优先级的顺序存放每一个成绩的排名,这样使用最小函数的时候,第一个找到即使最小的,也是优先级最高的; #include <iostream> #include <ve..原创 2020-12-10 10:44:58 · 60 阅读 · 0 评论 -
1011 World Cup Betting (20分)
题意:买三个游戏,每一个游戏有W,T,L三种可能,每种可能的概率不一样,求最大的利润; #include <iostream> #include <algorithm> #include <cstdio> using namespace std; char flag[3] = {'W','T','L'}; double profit[3]; int main(){ double game[3][3]; for(int i = 0; i < 3; ..原创 2020-12-08 20:04:07 · 59 阅读 · 1 评论 -
1009 Product of Polynomials (25分)
这题:就是两个多项式相乘,注意相乘的数组的大小是前面两个之和,使用hash表; 在这里插入代码片 #include <cstdio> double hash_A[1001],hash_B[1001],hash_C[2001],val; int max_A,max_B; int k1,k2,index; int main(){ scanf("%d",&k1); for(int i = 0; i < k1; i++){ scanf("%d %lf",&a..原创 2020-12-05 16:28:15 · 34 阅读 · 0 评论 -
1008 Elevator (20分)
在这里插入代码片 #include <cstdio> int main(){ int N,res[100]; res[0] = 0; int time = 0; scanf("%d",&N); for(int i = 1; i <= N; i++) scanf("%d",&res[i]); for(int i = 1; i <= N; i++){ if(res[i] - res[i-1] >= 0.原创 2020-12-05 15:34:43 · 42 阅读 · 0 评论 -
1007 Maximum Subsequence Sum (25分)
题意:输出和最大的连续子序列;用动态规划做;如果所有的数都为负数,则和为0,再输出第一个数和最后一个数; 在这里插入代码片 `#include <cstdio> #include <algorithm> using namespace std; int main(){ int num,A[10001],dp[10001],k = 0; bool flag = false; scanf("%d",&num); for(int i = 0;..原创 2020-12-05 15:11:51 · 38 阅读 · 0 评论 -
1006 Sign In and Sign Out (25分)
这里:题意输出第一个进教室的,最后一个出教室的;把时间转换一下; 在这里插入代码片 #include<iostream> #include <string> #include <algorithm> using namespace std; struct Person{ string ID; string in; string out; }; int to_time(string a){ int time = (a[0] - '0') ..原创 2020-12-05 14:34:11 · 83 阅读 · 0 评论 -
1005 Spell It Right (20分)
这里,一开始使用了size_t的类型,它是无符号的,因此当等于0的时候,会溢出。 在这里插入代码片 #include <cstdio> #include <vector> #include <cstring> using namespace std; int main(){ char s[11][100]= {"zero","one","two","three","four","five","six","seven","eight","nine"}; v.原创 2020-12-05 13:59:42 · 49 阅读 · 0 评论 -
1004 Counting Leaves (30分)
题意:构建树,判断每一层节点是否有叶节点,输出每一层叶节点的数目; 第一列:第一个数是节点的总数N,第二个数是无叶子点数目M;相当于输入多少行; 接下来输入M行,第一个是父节点,接下来是子节点数目K,后面是子节点数; 第一点,需要注意定义全局变量,会自动初始化; 第二点,深度的叠加需要加在广度优先中; 第三点,vector声明大小后,可以直接用下标读入数据; 第四点,最后输入空格,可以使用if判断,满足要求; 在这里插入代码片 #include <cstdio> #include <v.原创 2020-12-05 12:51:47 · 45 阅读 · 0 评论 -
1003 Emergency (25分)
第一问:第一种当到m的最短路径加上m到j的路径小于到j的路径时,那么到j的最短路径就更新为到m的最短路径。 第二种情况:如果当m的最短路径加上m到j的路径等于到j的路径时,那么到j的最短路径就更新到m的最短路径加上之前到j的最短路径的数目。 图中:1\2\3\是到m的当前最短路径,4、5是当前到j的最短路径; 第二问:当m点加上到j的距离小于当前到j的最小距离时,那权重就自动更新为m点的权重加上m点到j的权重; 当相等的时候,就要比较当前大j的权重4,5和1,2,3,加上m点到j的权重的大小,取最大的。..原创 2020-12-04 15:57:54 · 124 阅读 · 0 评论 -
PAT 1002 A+B for Polynomials (25分)
代码: #include <cstdio> using namespace std; int main() { int k1,k2; double hash_1[1001] = {0}; double hash_2[1001] = {0}; int a1; double a2; scanf("%d",&k1); int max_1 = 0,max_2 = 0; for(int i = 0; i < k1; i++){.原创 2020-12-03 21:45:20 · 41 阅读 · 0 评论