![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PAT A
qq_52051345
博客转移至www.acming.net和51codefly.com
展开
-
PAT A1076
题目大意给出每个用户关注的人的 id,和转发最多的层数,求一个 id 发了条微博最多会有多少个人转发。分析带层数的广度优先,因为一个用户只能转发一次,所以用 vis 数组判断当前结点是否入队过了,如果入队过了就不能重复入队(即重复转发消息)。queue的数据类型必须为node,同时保存它的 id 和 layer 层数,控制不超过层。AC代码#include <iostream>...原创 2019-10-27 16:04:04 · 117 阅读 · 0 评论 -
PAT A1021
题目大意给出n个结点(1~n)之间的 n - 1条边,问是否能构成一棵树,如果不能构成则输出它有的连通分量个数,如果能构成一棵树,输出能构成最深的树的高度时,树的根结点。如果有多个,按照从小到大输出。分析首先深度优先搜索判断它有几个连通分量。如果有多个,那就输出Error: x components,如果只有一个,就两次深度优先遍历,先从一个结点遍历后保留最高高度拥有的结点们,然后从这些结点...原创 2019-10-26 18:39:29 · 349 阅读 · 0 评论 -
PAT A1013
题目大意给出n个城市之间有相互连接的m条道路,当删除一个城市和其连接的道路的时候,问其他几个剩余的城市至少要添加多少个路线才能让它们重新变为连通图。分析添加的最少的路线,就是他们的连通分量数-1,因为当a个互相分立的连通分量需要变为连通图的时候,只需要添加a-1个路线,就能让他们相连。所以这道题就是求去除了某个结点之后其他的图所拥有的连通分量数。使用邻接矩阵存储,对于每一个被占领的城市,去...原创 2019-10-26 17:29:00 · 103 阅读 · 0 评论 -
1054 求平均值
题目传送门 #include <iostream>#include <cstdio>#include <string.h>using namespace std;int main(){ int n, cnt = 0; cin >> n; char a[50], b[50]; double t, sum = 0; for (int...原创 2019-07-24 22:14:04 · 76 阅读 · 0 评论 -
1061 判断题
题目传送门 #include <iostream>using namespace std;int main(){ int n, m; cin >> n >> m; int total[105], right[105]; for (int i = 0; i < m; i++) { cin >> total[i]; } f...原创 2019-07-25 10:50:42 · 124 阅读 · 0 评论 -
1031 查验身份证
题目传送门 #include <iostream>using namespace std;int a[17] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };int b[11] = { 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 };string s;bool isTrue() { ...原创 2019-07-20 21:23:34 · 92 阅读 · 0 评论 -
1062 最简分数
题目传送门 #include <iostream>using namespace std;int gcd(int x, int y){ return y ? gcd(y, x % y) : x;}int main(){ int n1, m1, n2, m2, k; scanf("%d/%d %d/%d %d", &n1, &m1, &n2, ...原创 2019-07-25 11:07:21 · 92 阅读 · 0 评论 -
1063 计算谱半径
题目传送门 #include <iostream>#include <cmath>using namespace std;int main() { int n; cin >> n; float m = 0; for (int i = 0; i < n; i++) { float a, b, ans; cin >> ...原创 2019-07-25 11:10:12 · 70 阅读 · 0 评论 -
1064 朋友数
题目传送门 #include <iostream>#include <set>using namespace std;int f(int num) { int sum = 0; while (num) { sum += num % 10; num /= 10; } return sum;}int main() { set<int&...原创 2019-07-25 11:13:12 · 99 阅读 · 0 评论 -
1065 单身狗
题目传送门原创 2019-07-25 12:36:53 · 71 阅读 · 0 评论 -
1066 图像过滤
题目传送门 这题输入t一定要用scanf,不然第四个测试点超时#include <iostream>using namespace std;int main() { int m, n, a, b, num, t; cin >> m >> n >> a >> b >> num; for (int i = 0; i...原创 2019-07-25 12:37:56 · 101 阅读 · 0 评论 -
1060 爱丁顿数
题目传送门 分析:对n个数据从大到小排序,i表示了骑车的天数,那么满足a[i] > i的最大值即为所求#include <iostream>#include <algorithm>using namespace std;int a[1000000];int main() { int n; cin >> n; for (int i = 1...原创 2019-07-25 10:41:54 · 58 阅读 · 0 评论 -
1059 C语言竞赛
题目传送门 #include <cmath>#include <iostream>#include <set>using namespace std;int ran[10000];bool isprime(int a) { if (a <= 1) { return false; } for (int i = 2; i * i &l...原创 2019-07-25 10:34:24 · 98 阅读 · 0 评论 -
1058 选择题
题目传送门 自己菜,写不出来,以下是柳神大佬代码~分析:n个学⽣生,m道题⽬目。对于每一道题⽬目,将题⽬目的总分存储在total[i]数组里面,将题目的选项插入存储在right[i](为集合类型)里面。wrongCnt[i]存储第i道题错误的人数,对于n个学生,每一个学生的答案插入⼀一个集合st里面,比较st与right[i]是否相等,如果相等说明该生答对了,他的score += total[...原创 2019-07-25 10:19:04 · 144 阅读 · 0 评论 -
1055 集体照
题目传送门原创 2019-07-24 22:13:55 · 75 阅读 · 0 评论 -
1056 组合数的和
题目传送门 ⽤用sum统计所有可能组合出来的两位数字之和,在sum累加的过程中,对于每一个输入的数字t,都能和其他n-1个数字组合出新的数字,t能够放在个位也能够放在十位,所以每个数字t都能在个位出现(n-1)次,十位出现(n-1)次,在个位产生的累加效果为t * (n-1),而在十位产生的累加效果为t * (n-1) * 10,所以所有数字的累加结果sum即是所有可能组合出来的2位数字的和#...原创 2019-07-24 22:13:20 · 335 阅读 · 0 评论 -
1057 数零壹
题目传送门 #include <iostream>#include <string>using namespace std;int main() { string s; getline(cin, s); int n = 0; for (int i = 0; i < s.length(); i++) { if (isalpha(s[i])) ...原创 2019-07-24 22:16:44 · 111 阅读 · 0 评论 -
1024 科学计数法
题目传送门 #include <iostream>#include <string>using namespace std;int main(){ string s; cin >> s; int i = 0; while (s[i] != 'E') { i++; } string t = s.substr(1, i - 1); in...原创 2019-07-20 16:48:39 · 105 阅读 · 0 评论 -
1025 反转链表
题目传送门 核心代码://数组模拟链表while (first != -1){list[sum++] = first;first = next[first];}#include <iostream>#include <algorithm>using namespace std;int main() { int first, k, n, temp;...原创 2019-07-20 17:28:28 · 65 阅读 · 0 评论 -
1026 程序运行时间
题目传送门 #include <iostream>#include <cmath>using namespace std;int main(){ int a, b; cin >> a >> b; int n = round((b - a) / 100.0); int h = n / 3600; n %= 3600; int m ...原创 2019-07-20 18:08:33 · 69 阅读 · 0 评论 -
1028 人口普查
题目传送门 #include <iostream>#include <string>using namespace std;int main(){ int n; cin >> n; int ans = 0; string name, birth, maxname, minname, maxbirth = "1814/09/06", minbir...原创 2019-07-20 19:08:15 · 104 阅读 · 0 评论 -
1029 旧键盘
题目传送门 ① C++头文件algorithm中find()函数(非容器)举例:find(a.begin(), a.end(), ‘c’) == a.end()②toupper(‘c’)转换成大写,tolower(‘C’)转换成小写(不用管原始是否大小写)#include <iostream>#include <vector>#include <stri...原创 2019-07-20 19:36:13 · 133 阅读 · 0 评论 -
1067 试密码
题目传送门 注意空格,使用getline()输入#include <iostream>using namespace std;int main() { string password, t; int n, cnt = 0; cin >> password >> n; getchar(); while (1) { getline(cin...原创 2019-07-25 12:42:57 · 77 阅读 · 0 评论 -
1068 万绿丛中一点红
题目传送门 #include <iostream>#include <vector>#include <map>#include <cmath>using namespace std;int m, n, tol;vector<vector<int>> v;int dir[8][2] = { {-1, -1}, ...原创 2019-07-25 19:03:24 · 83 阅读 · 0 评论 -
1034 有理数四则运算
题目传送门 #include <iostream> using namespace std;long long int gcd(long long int x, long long int y){ return y == 0 ? x : gcd(y, x % y);}void f(long long m, long long n){ if (m * n == 0) ...原创 2019-07-22 12:54:22 · 72 阅读 · 0 评论 -
PAT A1086
PAT A1086#include <iostream>#include <vector>#include <stack>#include <cstring>using namespace std;//push 中序//pop 前序 vector<int> pre, in, post, value;void func(...原创 2019-09-14 09:44:40 · 99 阅读 · 0 评论 -
PAT A1102
PAT A1102#include <vector>#include <algorithm>#include <iostream>using namespace std;struct node { int value, l, r, index, level;} a[100];vector<node> v1;vovalue dfs(i...原创 2019-09-14 11:14:33 · 123 阅读 · 0 评论 -
PAT A1043
PAT A1043题意给出N个正整数来作为一棵二又排序树的结点插入顺序,问:这串序列是否是该二叉排序树的先序序列或是该二叉排序树的镜像树的先序序列。所谓镜像树是指交换二叉树的所有结点的左右子树而形成的树(也即左子树所有结点数据域大于或等于根结点,而根结点数据域小于右子树所有结点的数据域)。如果是镜像树,则输出YES,并输出对应的树的后序序列;否则,输出NO。思路通过给定的插入序列,构建出二...原创 2019-10-06 11:16:15 · 168 阅读 · 0 评论 -
PAT A1064
PAT A1064因为⼆叉搜索树的中序满足:是一组序列的从小到大排列,所以只需排序所给序列即可得到中序,然后根据中序遍历构建二叉树,用数组存储层次遍历序列。#include <iostream>#include <cstdio>#include <algorithm>using namespace std;int n, index = 0;int...原创 2019-10-06 19:06:50 · 287 阅读 · 0 评论 -
PAT A1066
PAT A1066题意AVL树是自平衡二叉搜索树,在AVL树中,任何节点的两个子树的高度最多相差一个。如果在任何时候它们相差多于⼀个,则重新平衡以恢复此属性。 图中说明了旋转规则,现在给出⼀一系列插入序列,要求输出根节点的值。分析写出构建AVL(衡二叉搜索树)的代码模版即可。//生成一个新结点,v为结点权值node *newNode(int v)//获取以root为根结点的子树的当前...原创 2019-10-06 20:05:08 · 103 阅读 · 1 评论 -
PAT A1107
PAT A1107题意有 n 个人,每个人喜欢 k 个活动,如果两个人有任意一个活动相同,就称为他们处于同一个社交网络。求这 n 个人一共形成了多少个社交网络。分析并查集,先写好init、getf、merge。① course[t] 表示任意一个喜欢t活动的人的编号。如果当前的活动 t,之前并没有人喜欢过,那么令course[t] = i,i为它自己的编号,表示 i 为喜欢 cours...原创 2019-10-07 12:21:48 · 140 阅读 · 0 评论 -
PAT A1098
题意给出n和n个数的序列a和b,a为原始列列,b为排序其中的一个步骤,问b是a经过了堆排序还是插入排序的,并且输出它的下一步。分析① 插入排序的特点是:b 数组前面的顺序是从小到大的,后面的顺序不一定,但一定和原序列后面的顺序相同,所以只要遍历一下前面几位,遇到不是从小到大的时候,就判断 b 和 a 是不是对应位置的值相等,相等就说明是插入排序,否则就是堆排序。插入排序的下一步就是把第一个不...原创 2019-10-07 13:48:39 · 214 阅读 · 0 评论 -
PAT A1013
PAT A1013题意给出 n 个城市之间有相互连接的 m 条道路,当删除一个城市和其连接的道路的时候,问其他几个剩余的城市至少要添加多少个路线才能让它们重新变为连通图。分析添加的最少的路线,就是他们的连通分量数-1,因为当 a 个互相分立的连通分量需要变为连通图的时候,只需要添加 a - 1个路线,就能让他们相连。使用邻接矩阵存储,对于每一个被占领的城市,去除这个城市结点即把它标记为已经...原创 2019-10-07 14:40:16 · 175 阅读 · 0 评论 -
PAT A1020
PAT A1020#include <iostream>#include <vector>#include <algorithm>using namespace std;struct node{ int index, value;};bool cmp(node a, node b){ return a.index < b.index...原创 2019-09-14 09:11:08 · 95 阅读 · 0 评论 -
1078 字符串压缩与解压
题目传送门 #include <iostream>using namespace std;int main(){ char t; cin >> t; getchar(); string s, num; getline(cin, s); int cnt = 1; if (t == 'D') { for (int i = 0; i < s.le...原创 2019-07-26 20:07:06 · 80 阅读 · 0 评论 -
1070 结绳
题目传送门 #include <iostream>#include <algorithm>#include <vector>using namespace std;int main() { int n; cin >> n; vector<int> v(n); for (int i = 0; i < n; i++)...原创 2019-07-25 19:57:40 · 73 阅读 · 0 评论 -
1071 小赌怡情
题目传送门 #include <iostream>using namespace std;int main() { int T, K, n1, n2, b, t; scanf("%d %d", &T, &K); for (int i = 0; i < K; i++) { scanf("%d %d %d %d", &n1, &b...原创 2019-07-25 20:12:06 · 78 阅读 · 0 评论 -
1072 开学寄语
题目传送门 #include <iostream>using namespace std;int f[10000];int main(){ int n, m, t, k, snum = 0, fsum = 0; cin >> n>> m; for (int i = 0; i < m; i++) { cin >> t; ...原创 2019-07-25 20:28:11 · 149 阅读 · 0 评论 -
1073 多选题常见计分法
题目传送门原创 2019-07-25 21:51:38 · 98 阅读 · 0 评论 -
1074 宇宙无敌加法器
题目传送门 这题有个疑问,后面输出ans时ans = ans.substr(ans.find_first_not_of(‘0’));cout << ans;有一个测试报点运行时错误但是用循环就不报错,不知道为啥。。先不管吧~~这题感觉一个思路很重要:相加时,先反转俩字符串,然后后面追加0对齐,模拟计算就行了,最后输出别忘了,反转回来。#include <iostr...原创 2019-07-26 12:00:29 · 101 阅读 · 0 评论