- 博客(51)
- 收藏
- 关注
原创 第四届“传智杯”全国大学生IT技能大赛(练习赛)
据说正式赛要难一点。符合条件的数可能输入的数就满足条件的。#include <iostream>using namespace std;long long k ;bool check(long long x){ int cnt = 0; while(x) { if(x % 10 == 3) cnt ++; x/=10; } return cnt == k;}int main(){ long long n; cin >&g
2021-11-21 11:46:46 947
原创 C/C++语言基础题...持续更新
题记回首往昔,自己学C语言已经有一段时间了,在学习的过程中也遇到了很多的问题,也通过看其他大佬的博客得到解决。到今天,自己学有余力,准备记录一下自己的学习心得,帮助大家更好的理解题目。 近期的先从基础的开始写,到后面会慢慢的更新一些数据结构算法还有一些题,比如pat甲级乙级这些。 ...
2021-11-10 17:48:07 3223 10
原创 1040 Longest Symmetric String (25 分)
最长回文子串1.dp 2.双指针dp#include <iostream>#include <cstring>using namespace std;const int N = 1010;bool f[N][N];//f[i][j] 表示i~j是否为回文 1是回文,0不是int main(){ memset(f,true,sizeof f); string s;int ans = 1; getline(cin,s); f
2022-02-20 12:45:00 307
原创 1093 Count PAT‘s (25 分)
第一种思路求出每个A左右两遍P,T的个数,然后相乘求和。第二种,遍历一遍字符串,每次出现一次A就累加前面P,每次出现一次T再累加前面A,最后T就是答案,只要其中一个没出现最后T肯定是0,T的值由前面A决定,A由P决定。#include <iostream>using namespace std;long long P,A,T,mod = 1e9 + 7;int main(){ string s; cin >> s; for(auto c :
2022-02-19 18:57:03 157
原创 1043 Is It a Binary Search Tree (25 分)
给出一个树的遍历序列,如果是二叉搜索树的前序遍历或者其镜像的前序遍历,那么就输出后序遍历。利用二叉搜索树的中序遍历是有序来求后序遍历并判断给定的序列是否是二叉搜索树的前序遍历。如果原序列不对,那就进行一次镜像的判断,此时中序是降序,注意找根的时候要从右->左找。其实就是跑两遍前序中序求后序。#include <iostream>#include <vector>#include <algorithm>using namespace std;co
2022-02-19 18:39:14 568
原创 1044 Shopping in Mars (25 分)
找到区间和等于w,如果不存在,就让区间和大于w取最小。前缀和+双指针#include <iostream>using namespace std;const int N = 100010;int a[N],b[N];//前缀和+双指针int main(){ int n,w; cin >> n >> w; for(int i = 1; i <= n; i ++) cin >> a[i]; for(in
2022-02-19 16:15:06 384
原创 1053 Path of Equal Weight (30 分)
求从根节点到叶子节点路径权值和等于w的全部路径单调递减输出,我们直接把路径上的权值存到二维vector里,对vector进行排序。#include <iostream>#include <vector>#include <algorithm>using namespace std;int n,m,w,r,k,x,v[1010],cnt,idx;vector<int>e[1010],ans[1010],res;void dfs(int u,
2022-02-18 17:15:26 151
原创 1063 Set Similarity (25 分)
Nc:两个集合共有的不同数的个数,其实就是检查去重后,两个集合相等数的个数Nt:两个集合中不同数的个数,其实就是去重后有多少个数#include <iostream>#include <unordered_set>#include <unordered_map>using namespace std;int main(){ int n,k; cin >> n; unordered_map<int,unorder
2022-02-17 18:59:23 157
原创 1064 Complete Binary Search Tree (30 分)
1.完全二叉搜索树的中序遍历是有序的2.完全二叉搜索树的最大节点编号等于节点个数所以我们就可以根据这两点,先将读入的数据排序,然后跑一边中序遍历!#include <iostream>#include <algorithm>using namespace std;int v[1010],in[1010];int n,x,cnt;void dfs(int u) //中序遍历,完全二叉树的最大节点编号等于节点个数{ if(u > n) return
2022-02-17 17:35:35 218
原创 1071 Speech Patterns (25 分)
题目大意:给定一个字符串,求哪个词组出现最多次,次数相同去字典序小的getline读取一行词组包含字母和数字,每个词组间会被非数字字母分隔。#include <iostream>#include <unordered_map>using namespace std;unordered_map<string,int>mp;int main(){ string s; getline(cin,s); for(auto &
2022-02-16 21:47:33 158
原创 1072 Gas Station (30 分)
题目大意:要确定一个加油站,到所有居民房的最短距离最大,如果不唯一,输出平均距离最短的加油站,如果还不唯一,输出id小的。注意:所有的居民房都必须要服务范围内!假设有m个加油站,需要跑m次最短路,最后注意答案输出的精度。#include <iostream>#include <cstring>using namespace std;const int N = 1015;int n,m,k,d;int g[N][N],dis[N];bool st[N];vo
2022-02-16 20:53:44 192
原创 1075 PAT Judge (25 分)
注意没有编译通过的id不能被输出。#include <iostream>#include <algorithm>using namespace std;struct node{ int id; int sum[6],flag[6]; int sol,res,f; bool operator < (const node &w) { if(res != w.res) return res > w
2022-02-16 14:49:31 82
原创 1076 Forwards on Weibo (30 分)
题目大意:给定每个用户的关注,求在L层内最大转发的数量。这题时限3000ms,应该想考的是floyd,但是我们正常看到这种类型的题会直接去搜索。给出搜索和floyd的代码bfs#include <iostream>#include <queue>#include <cstring>using namespace std;vector<int>v[10010];bool st[10010];int k,x,n,l;int bfs(
2022-02-15 20:27:03 138
原创 1079 Total Sales of Supply Chain (25 分)
已经出现了很多次这种题了,做法也都是一样。#include <iostream>#include <queue>#include <unordered_map>#include <cmath>using namespace std;int n,k,x;double p,r,ans;vector<int>e[100010];unordered_map<int,int>mp,cnt;void bfs(){
2022-02-15 16:24:14 255
原创 1080 Graduate Admission (30 分)
一道排序模拟题,按总成绩和初试成绩排序,注意如果出现并列排名,并且并列申请人正在申请同一所学校,就算名额满了,学校都要录取。#include <iostream>#include <vector>#include <algorithm>using namespace std;int v[110],n,m,k;struct node{ int ge,gi,id,sum; int ch[10]; bool operator <
2022-02-15 15:35:09 235
原创 1086 Tree Traversals Again (25 分)
入栈是前序,出栈是中序#include <iostream>#include <vector>using namespace std;const int N = 50;int stk[N],top,f;vector<int>pre,in;//入栈是前序,出栈是中序 void dfs(int preL,int preR,int inL,int inR){ if(preL > preR) return ; int k = inL; w.
2022-02-14 16:35:39 74
原创 1087 All Roads Lead to Rome (30 分)
多条件限制的最短路,数据范围很小,直接写个朴素版。用两个map存名字对应编号,和编号对应名字见代码#include <iostream>#include <unordered_map>#include <cstring>using namespace std;const int N = 300;int g[N][N],dis[N],disha[N],ha[N],path[N],cnt[N],res[N],n,m;bool st[N];strin
2022-02-14 16:07:03 160
原创 1094 The Largest Generation (25 分)
题目大意:给出一个族谱树,相同一层为一代人,求人数最多的一代,和第几层。bfs,dfs都可以#include <iostream>#include <queue>#include <unordered_map>using namespace std;vector<int>e[200];unordered_map<int,int>mp,root;int u,h,s;void bfs(){ queue<pair<
2022-02-14 12:31:47 136
原创 1095 Cars on Campus (30 分)
题目大意:给出每个车牌的进出时间,每一个in只与下一个相同号牌的out匹配,若没有匹配的in或out则被忽略,然后给出相应的询问,求某个时间段内的有多少辆车停留,并求出停留的最长时间。思路:1.先将所有数据读入按车牌号和时间排序。(时间化为秒)2.两两比较,处理出合法的车牌,并用map保存每个车牌的停留总时间,记录最大值。3.处理询问,可以预处理每个时间段车辆停留的个数(前缀和,经测试不用前缀和也不会超时)4.最后就是遍历一遍map把相同停留时间的车牌输出即可如果停留最长时间的车辆不
2022-02-14 12:28:58 143
原创 1099 Build A Binary Search Tree (30 分)
题目大意:树的每个节点左右孩子确定,将给定的值插入使得是二叉搜索树。把二叉搜索树压扁是有序的,也就是中序遍历是有序的。根据这一性质,中序遍历一遍,保存节点编号和深度,排序后就是层次遍历(按深度和编号排序)#include <iostream>#include <vector>#include <algorithm>using namespace std;struct node{ int l,r,h,idx,val;}e[200];vector&l
2022-02-13 14:40:52 295
原创 1103 Integer Factorization (30 分)
题目大意:将一个数n,划分k个数的p次方的和。dfs:预处理小于n的p次方所有的数,然后从最大的数开始搜索,注意剪枝。背包:其实就是求容量为n的背包可以装的最大价值(各位数之和最大)搜索代码#include <iostream>#include <cmath>#include <vector>using namespace std;const int N = 10001;int n,k,p;int v[N],s = 1,maxsum = -1
2022-02-13 12:50:13 223
原创 1106 Lowest Price in Supply Chain (25 分)
题目大意:供应商为根节点,零售商为叶子节点,从上向下供应商品,每次向下一层价格会上涨r%,求出售的最低价格,和这个价格的数量。bfs,dfs都可以,求一下这棵树的最小深度,和最小深度这个节点的数量。#include <iostream>#include <vector>#include <cmath>using namespace std;vector<int>v[100010];int minh = 1e9,sum;void dfs(i
2022-02-12 21:29:54 276
原创 1107 Social Clusters (30 分)
题目大意:每个人都喜欢一些活动爱好,有相同爱好的算一个群体,输出群体的个数,以及每个群体的人数,从大到小输出。转化题意求连通块的数量,以及块内点的个数。这里不要把爱好编号和人的编号混掉了,我们把活动爱好用人的标号来标记,然后就是并查集模板了。#include <iostream>#include <vector>#include <algorithm>using namespace std;const int N = 1000;int p[N],st[
2022-02-12 20:13:30 159
原创 1110 Complete Binary Tree (25 分)
题目大意:给定每个节点的左右孩子,判断这棵树是不是完全二叉树如果最大节点编号等于节点数那么就是完全二叉树#include <iostream>#include <queue>#include <unordered_map>using namespace std;int n,last,res;struct Eg{ string l,r;}e[100];unordered_map<int,int>mp;void dfs(int u,i
2022-02-12 16:49:45 432
原创 1111 Online Map (30 分)
题目大意:最短路!给定n个点,m条边,可能是无向边,可能是有向边,再给定两点之间的距离,时间,最后给出起点终点,求起点到终点的最短路路径和最快到达路径。最短路路径:如果最短路不唯一,相同最短路取最快到达的路径。最快到达路径:如果最快到达路径不唯一,输出经过最少点的路径。如果路径相同输出 Distance = D; Time = T: source -> u1 -> ... -> destination如果不相等输出Distance = D: source -> v
2022-02-12 15:51:05 296
原创 112 Stucked Keyboard (20 分)
题目大意:如果一个键盘卡住,就会连续输出k次,判断哪些键盘卡住了,并且输出原序列注意点:假如一个字符出现过连续k次和不是连续k次的,那么这个键就是好的。(k的倍数)#include <iostream>#include <unordered_map>#include <vector>using namespace std;unordered_map<char,int>mp1,mp2,st;int k,cnt;int main(){.
2022-02-12 00:56:17 211
原创 1114 Family Property (25 分)
题目大意:给定每个家庭成员的关系,需要求每个家庭的人数,人均房产套数,人均面积。按人均房产面积降序输出,如果相等按id升序输出(id是每个家庭中最小的id)一看就是一个并查集的题目,需要输出的是最小id,所以我们要以最小id为根节点建树。题目不难,转化一下题意就是求连通块的数量,以及每个连通块内点的个数,并附带更新一下房产的信息。题目我踩坑了,我连通块内点的个数初始化的时候没有把0000这个编号算进去,debug了半天。。。#include <iostream>#includ
2022-02-11 17:00:17 102
原创 1115 Counting Nodes in a BST (30 分)
题目大意:按给定的序列,建二叉搜索树,求最后两层节点数量插入节点建树,宽搜或深搜求每层的节点数量#include <iostream>#include <queue>#include <unordered_map>using namespace std;int n,x,f;unordered_map<int,int>mp;struct node{ int v; node *left,*right; node(int x): v(x
2022-02-11 14:03:33 70
原创 1118 Birds in Forest (25 分)
题目大意:给定若干个照片,照片树上有若干个鸟,判断有多少棵树和多少只鸟,然后给定若干个查询,判断两只鸟是否在一棵树上。题目说到鸟的编号一定是1到某个数连续的,所以鸟的数量就是最大值编号,如果这没读懂没关系,直接用set存每只鸟,最后的长度就是数量。鸟的数量解决了,树的数量其实就是求连通块的数量,这里就可以用dfs,bfs,或者并查集来实现,但是后面我们需要来查询两只鸟是否在同一棵树,所以本题用并查集写方便。#include <iostream>#include <vecto
2022-02-11 13:21:35 78
原创 1119 Pre- and Post-order Traversals (30 分)
题目大意:给定前序和后序遍布,来判断中序遍历是否唯一因为当一个节点只有一个孩子的时候,不管是左孩子还是右孩子,他们的前序遍历都是一样的,后序遍历也是一样。A A/ \B B\ /C C这两个树的前序都是ABC后序都是CBA,所以我们无法确定左右孩子。我们知道前序和后序不能唯一确定一颗树,前序是根左右,后序是左右根,我们发现前序遍历的第一个节点preL肯定是等于后序遍历的最后一个节点postR,preL+1是左孩子(当左孩子不存在,就是右孩子),postR-1是右孩子(同理),
2022-02-11 12:30:04 479
原创 1122 Hamiltonian Cycle (25 分)
哈密顿回路满足的条件1.经过所有点2..终点和起点相同3.回路的点数等于图顶点+1(也就是除去起点终点每个点都走一次)#include <iostream>#include <vector>#include <unordered_map>using namespace std;int n,m,a,b,T;int g[300][300];int main(){ cin >> n >> m; for(int i =
2022-02-10 22:51:19 186
原创 1123 Is It a Complete AVL Tree (30 分)
本题主要掌握左旋右旋的操作就可以解了。判断是否为完全二叉树:第一种方法在层次遍历的时候记录索引编号,最后一个点的编号等于节点的个数就是完全二叉树,第二种方法,如果在层次遍历的时候出现一个某个孩子为空的节点,那么如果之后出现某个孩子不为空的节点那么就不是完全二叉树,否则就是。#include <iostream>#include <queue>using namespace std;struct node{ int v; node *left,*right; n
2022-02-10 22:10:03 284
原创 1126 Eulerian Path (25 分)
题目大意:判断一个无向图,是欧拉图还是半欧拉图1.所有点连通,且度数都为偶数:欧拉图2.所有点连通,有两个点度数为奇数,其余为偶数:半欧拉图不满足1,2就是非欧拉图这道题扩展一下还可以找欧拉回路或者欧拉路径,有奇点就从奇点开始找,没有就从任意点开始找。言归正传,本题邻接矩阵建图,然后dfs一遍求连通点的数量,然后根据题意判断即可!附上本题代码#include <iostream>using namespace std;const int N = 1000;in
2022-02-10 14:26:28 118
原创 1127 ZigZagging on a Tree (30 分)
题目大意:给定一个中序和后序序列,求层次遍历,注意不是普通的层次,这个题目的输出要求是每隔一层要逆序输出。正常中后序建树,数据范围小就可以不用哈希表优化建树,然后宽搜一遍把层次遍历存一下,然后将需要逆序的层翻转一下就行了。#include <iostream>#include <queue>#include <algorithm>using namespace std;const int N = 1000;int post[N],iner[N],f,c
2022-02-10 13:25:44 71
原创 1130 Infix Expression (25 分)
题目大意:求一个二叉树的中缀表达式首先表达式树是不存在左孩子非空,右孩子空的情况。直接根据中序遍历,不过需要加上()表示运算的优先级,在中序遍历的时候,不是根结点且不是叶子结点输出括号即可。#include <iostream>using namespace std;int n,m,root;struct node{ string v; int l,r;}e[100];bool st[100];void dfs(int u ){ if(root !=
2022-02-09 15:52:51 451
原创 1131 Subway Map (30 分)
题目大意:给定一个无向图并带有编号,给定两个点,求两点最短路径,如果存在多条最短路径,要求取换乘最少的路径。单源最短路径,权值为1可以直接bfs,也可以dfs+剪枝或者dijkstra,这里dijkstra需要堆优化。本题难就难如何建图上,要保存两点之间的路线编号,可以用偏移量存储两点的编号,也可以直接邻接表同步信息。下面提供dfs和dijkstra版本的代码dfs#include <iostream>#include <queue>#include <
2022-02-09 14:42:52 274
原创 1134 Vertex Cover (25 分)
题目大意:给你一个图,然后再给定若干个集合,判断图中每条边的两个端点是否都至少有一个点在集合中,是输出Yes,否则No邻接表建图,不需要建无向图,把集合存在哈希表里,然后查询图中每对边的端点是否至少有一个点在哈希表中即可!#include <iostream>#include <vector>#include <unordered_set>using namespace std;int n,m,a,b,k,x;vector<int>e[10
2022-02-08 22:26:20 64
原创 1139 First Contact (30 分)
题目大意 A暗恋B 找到一个A的同性朋友C,B的同性朋友D,如果C,D是朋友关系那就输出用map套个set来实现邻接表(懒得写vector)。判断同性的方法:女性id前有负号,因为可能存在-0000,所以我们用字符串读取,长度相等就是同性,题目存在同性恋注意C不等于B,D不等于A#include <iostream>#include <unordered_map>#include <vector>#include <unordered_set
2022-02-08 19:05:25 155
原创 1138 Postorder Traversal (25 分)
题目大意:前序中序求后序老套路题了,不过需要注意N最大取到50000,正常会超时,但是数据好像没取到极限,正常做刚好可以过。为什么会超时,正常做的时候会耗费直接去查找根结点,所以我们直接用哈希表优化。可以试试用哈希表和不用,确实速度差了好多。#include <iostream>#include <unordered_map>using namespace std;const int N = 50010;int n;int pre[N],in[N],f =
2022-02-08 00:28:26 222
原创 1142 Maximal Clique (25 分)
题目大意:有一个无向图,判断所给的集合是否为最大团1.如果集合内的某两个点不能连通,那么就不是团。2.如果集合的点都能相互连通,且都至少能连向集合外相同的一个点,那么就不是最大团,否则就是最大团这一题就是直接枚举就好了#include <iostream>#include <vector>#include <unordered_map>using namespace std;const int N = 300;int n,m,k,a,b;in
2022-02-07 23:38:13 257
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人