
pat
温暖名字
isfp/enfj没有个性的研究僧
zju计算机技术在读硕士
可以忍受以年为单位的奋斗
有目标有毅力
展开
-
Zero-complexity Transposition上交复试机考题目
【代码】Zero-complexity Transposition上交复试机考题目。原创 2023-06-27 14:09:58 · 143 阅读 · 0 评论 -
7-2 Play with Linked List (25 分)
把num!=k+1写成了,num不等于1,导致只有测试点1错误,好几次这样,所以大部分都错误的时候,未必是思路不对,可能就是一个小细节没对#include<bits/stdc++.h>using namespace std;const int inf=0x3ffffff;struct node1{ int address,data,next,order=inf;}node[100000];bool cmp(node1 a,node1 b){ return a.orde原创 2021-09-09 22:02:36 · 1494 阅读 · 1 评论 -
模拟dijikstra选节点
#include<bits/stdc++.h>using namespace std;int dmin[1010];int d[1010][1010];bool isvis[1010] = { false };vector<int> vl[1010];int vn, ve;int main() { cin >> vn >> ve; for (int i = 0; i < ve; i++) { int a, b原创 2021-09-06 07:00:02 · 151 阅读 · 1 评论 -
7-2 Merging Linked Lists (25 分)
Given two singly linked lists L1=a1→a2→⋯→an−1→anand L2=b1→b2→⋯→bm−1→bm. If n≥2m, you are supposed to reverse and merge the shorter one into the longer one to obtain a list like a1→a2→bm→a3→a4→bm−原创 2021-09-06 06:49:14 · 761 阅读 · 1 评论 -
后缀表达式输出
7-3 Postfix Expression (25 分)Given a syntax tree (binary), you are supposed to output the corresponding postfix expression, with parentheses reflecting the precedences of the operators.Input Specification:Each input file contains one test case. For ea.原创 2021-09-06 06:46:55 · 268 阅读 · 0 评论 -
1139 First Contact (30 分)
都是重复代码,全是细节问题,,25分,,#include<bits/stdc++.h>using namespace std;bool isexist[10000] = { false };int G[10000][10000] = { 0 }, flag = 0;vector<int> girls, boys, res;bool cmp(pair<int,int> a,pair<int,int> b){ if(a.first!=b.fi原创 2021-09-05 16:02:07 · 207 阅读 · 1 评论 -
一端受限的双端队列
自己使蛮劲敲代码很愚蠢!!晴神的书一定要搞懂,大多数都是在这些基础上加一点,少变换一下!7-2 One Way In, Two Ways Out (25 分)Consider a special queue which is a linear structure that allows insertions at one end, yet deletions at both ends. Your job is to check, for a given insertion sequence, if a原创 2021-09-04 20:48:38 · 775 阅读 · 2 评论 -
1115 Counting Nodes in a BST (30 分)查找二叉树层序编号
①背会了平衡二叉树,查找二叉树就太简单了②层序编号用dfs不错,代码简洁③本题写了三个递归函数,,void getlevel(node* root, int lev) { if (root == NULL) return; root->level = lev; getlevel(root->left, lev + 1); getlevel(root->right, lev + 1);}#include<bits/stdc++原创 2021-09-03 16:36:57 · 147 阅读 · 1 评论 -
1124 Raffle for Weibo Followers (20 分)stl太好用,不知道考的啥内容
最近总是喜欢i=0,+i*k,其实只需要把变量定义在外边,然后每次+k就行,不要定义再循环里边,每次还得重新定位#include<bits/stdc++.h>using namespace std;int n,k,first;map<string,bool> m;string p[1010];vector<string> s;int main(){ cin>>n>>k>>first; for(int i=原创 2021-09-02 19:23:19 · 82 阅读 · 1 评论 -
1127 ZigZagging on a Tree (30 分)后序中序建树
①做到的遍历题,基本不会直接考前中后序了,会再原来的基础上,新定义一种遍历方法,往往只需要改极少的一部分代码,比如invert binary tree,只需要先访问右孩子再访问左孩子,而不需要真正的反转,本题也不需要额外设计一个zigzag遍历函数,只要bfs然后一行正者输出一行逆着输出②!!!就因为少写了 if(i>=v.size()) break;,一开始被扣了14分,真感觉是个大错误,没想到就少了这个,再循环嵌套的时候,一定要注意会不会越界,溢出等等③for循环时,stack.size()再原创 2021-09-02 18:28:52 · 203 阅读 · 1 评论 -
1109 Group Photo (25 分)结构体排序
①考察sort函数结构体排序写法②要注意列,行标号的变换,好像什么都没考,主要是vector真心好用#include<bits/stdc++.h>using namespace std;int n,row;struct person{ string name; int height;}p[10010];bool cmp(person a,person b){ if(a.height!=b.height) return a.height>b.height原创 2021-09-02 16:18:22 · 82 阅读 · 1 评论 -
1155 Heap Paths (30 分)大小堆的判断,根结点到各个叶结点的路径,dfs递归
自己写的不小心删了,,dfs不会写,不知道什么时候pop,①判断大小堆,这个方法真好,不用单独写成函数论,, for (int i = 2; i <= n; i++) { if (a[i/2] > a[i]) isMin = 0; if (a[i/2] < a[i]) isMax = 0; }按照习惯,我喜欢从堆底开始判断 for (int i = n; i >= 2; i--) { if (a[i] &l原创 2021-08-25 21:39:36 · 122 阅读 · 1 评论 -
1147 Heaps (30 分)大小堆的判断,层序遍历转后序遍历
①后序遍历的递归出口别忘了判断root是否超过树结点最大值②注意堆的存储从1开始,看成完全二叉树#include<bits/stdc++.h>using namespace std;int heap[110][1100];vector<int> res;bool maxheap(int i,int n){ for(int j=n;j>=2;j--){ if(heap[i][j]>heap[i][j/2]) ret原创 2021-08-25 20:59:30 · 152 阅读 · 1 评论 -
1111 Online Map (30 point(s))模板题
#include<iostream>#include<vector>using namespace std;const int MAXN=510;const int INF=0x3ffffff;int dis[MAXN][MAXN],cost[MAXN][MAXN],pre[MAXN],num[MAXN];bool isvis[MAXN]={false};vector<int> res1,res2;int d[MAXN],c[MAXN];int m,n,原创 2021-08-20 18:25:44 · 68 阅读 · 1 评论 -
1130 Infix Expression (25 point(s))还没想通再想想
inorder虽然遍历的是左中右,也可以在去左边的路上完成一些的别的操作,放在inorder(node->left)前面,也可以在结束右子树遍历后有别的操作,放在inorder(node->right)后边只能感觉是中序遍历,括号的添加实在巧妙#include<bits/stdc++.h>using namespace std;bool isexist[30]={false};int root=1;struct node{ string c; int le原创 2021-08-15 16:24:48 · 101 阅读 · 1 评论 -
7-4 Cartesian Tree (30 point(s))待续
首先这题不用建树,只要反复的在最小值为中介的左右区间找最小值输出即可,考虑到每次都是在一个区间找最小值,于是想到可以用递归,就像前序中序建树那样,但是写到一半发现不对!!递归讲究一个深度,也就是说他会不停到找左子区间最小的元素,然后知道没有!!!但是想要的结果是!左边找一下,右边找一下,其实这个只要用普通循环即可操作,以下是错误思路#include<bits/stdc++.h>using namespace std;#define MAXN 9999999;int n,s[40],fir原创 2021-08-11 21:05:22 · 103 阅读 · 1 评论 -
1123 Is It a Complete AVL Tree (30 point(s))平衡二叉树模板,记住!!
一开始把完全二叉树和满二叉树混淆了,其实好像也是可以全对的函数很多,注意哪些有返回值,哪些是引用,还是觉得吧*root写成全局变量比较好,直接引用了#include<iostream>#include<queue>#include<algorithm>using namespace std;struct node{ int data,height; node *left=NULL,*right=NULL;};int n,s[30],afte原创 2021-08-11 20:37:10 · 102 阅读 · 1 评论 -
1077 Kuchiguse (20 point(s))字符串带空格问题
1⃣️字符串带空格,不能用cin,遇到空格就停止了输入,要用getline,格式getline(cin,s[I]),注意cin的回车会留在缓冲区,会被getline读走,因此应该在前面加一个getchar,getline的结束回车不会留在缓冲区,更不会被getline读取2⃣️这题和昨天那个题类似,字符串或者数字串的处理,会重复一样的操作多次,而且会用到上一次处理的结果,可以用两个vector容器来处理,每次处理将上一次的结果放在res中,供下一次处理#include<iostream>原创 2021-08-09 17:15:40 · 95 阅读 · 0 评论 -
1140 Look-and-say Sequence (20 point(s))
每次将数组扫描一遍,如果出现数字和上次不同,说明count计数完成,push入count和新的数字,如此循环#include<bits/stdc++.h>using namespace std;int main(){ int d,n; vector<int> a; cin>>d>>n; a.push_back(d); while(n!=1){ vector<int> res;原创 2021-08-08 19:40:40 · 76 阅读 · 1 评论 -
1151 LCA in a Binary Tree (30 point(s))找共同祖先同一道408真题思路!!
这个共同祖先像不像那道找shared链表算法真题!不过真题答案只找到了公共值结点就算后边一致,万一后边不是共同后缀呢,感觉还得用栈,从最后一个元素开始弹出!代码思路:手工先序建立遍历栈:分别到u,v停止然后相当于那道真题,弹出第一个相同元素的是LCA#include<iostream>#include<stack>using namespace std;int in[1001],pre[1001],u,v,tagu=0,tagv=0;struct node{原创 2021-08-05 22:33:12 · 122 阅读 · 1 评论 -
由中序、前序构造二叉树
void create_tree(node* &root,int l1,int l2,int len){ if(len==0) return; root=new node; root->data=pre[l2]; if(len==1) return; int i; for(i=l1;i<l1+len;i++){ if(in[i]==pre[l2]) break; } create_tree(root->原创 2021-08-05 20:30:25 · 95 阅读 · 1 评论 -
1119 Pre- and Post-order Traversals (30 point(s))先序后序转中序,不熟悉递归
看了下面文章后的感悟:https://blog.youkuaiyun.com/destiny_balabala/article/details/99352715举例:前序:1、2、5、3、4后序:5、4、3、2、1二叉树不唯一原因:前序:NLR后序:LRN光看序列数字是看不出来位置的,要看相对位置例如前序与中序:LNR,由前序的N,可以在中序找到相对于N左边为左子树本题在后序中找到N,但是N前面是LR,二叉树可能只有左子树,只有右子树,或都有,因此后序中N前面的是L还是R不可知,由此造成了二叉树不唯原创 2021-08-05 11:07:26 · 133 阅读 · 1 评论 -
1136 A Delayed Palindrome (20 point(s))字符串和整数转换,字符串和字符数组
最后一个测试点段错误,18分反正我用指针经常段错误?或者大整数运算越界?1⃣️sscanf,sprintf的头文件是cstring将字符串转化成整数:sscanf(字符数组名,“整数类型,可以是%lld,%d,%lf等等”,&整数变量)将整数转换成字符串:sprintf(字符数组名,“整数类型,可以是%lld,%d,%lf等等”,整数变量)它们参数只差了一个 &,注意不能是string2⃣️字符数组不能直接赋值,使用strcpy(str1,str2)可以将str2的值赋给st原创 2021-05-20 20:27:54 · 72 阅读 · 0 评论 -
1122 Hamiltonian Cycle (25 point(s))没拿满分,应该是忽略了某些情况
#include<bits/stdc++.h>using namespace std;int G[200][200];int main(){ int v,m; cin>>v>>m; for(int i=0;i<m;i++){ int t1,t2; cin>>t1>>t2; G[t1][t2]=G[t2][t1]=1; } int k,num;原创 2021-05-17 22:02:08 · 90 阅读 · 0 评论 -
1110 Complete Binary Tree (25 分)完全二叉树的性质,遍历二叉树
①完全二叉树:每个节点和它等高的满二叉树1~n对应,不是说编号要对应,完全二叉树描述的是形态,因此要将本题的给的二叉树编号转换成根结点为1的二叉树②完全二叉树的性质:a:左孩子是2i,右孩子是2i+1b:结点数目等于编号最大结点③注意:sscanf中的str是字符数组,不能是字符串深度优先遍历法:#include<bits/stdc++.h>using namespace std;struct node{ int l,r;}n[20];int num,sign=1,l原创 2021-05-11 09:38:46 · 84 阅读 · 0 评论 -
1061 Dating (20 point(s))代码累赘呀,审题不清
1⃣️没必要用map,用hash,下标为x-‘A’即可2⃣️这道题要求的是第一对在同一位置的字符,而我找的是第一对相同的满足条件的字符,两个字符串应该平行扫描//小时:x-'A'+10#include<bits/stdc++.h>using namespace std;map<char,string> m1;int hash1[50];void tofindC(string s1,string s2){ int i=0,j=0,sign1=0,sign2=0;原创 2021-05-08 11:27:23 · 97 阅读 · 0 评论 -
1117 Eddington Number (25 分)没读懂题,要求是大于不能等于
//10 9 8 8 7 7 6 6 3 2#include<bits/stdc++.h>using namespace std;int a[1000000];bool cmp(int a,int b){ return a>b;}int main() { int n, e = 0; cin>>n; for(int i = 0; i < n; i++) scanf("%d", &a[i]); sor原创 2021-04-17 18:08:01 · 75 阅读 · 0 评论 -
1116 Come on! Let‘s C (20 分)测试点3错误(已改),没有判断是否是素数
太坎坷了,题读错了1⃣️1、prime表示是质数,不是1,首要的(第一)才能拿小黄鸭2⃣️并不会因为ranklist中的id不存在而让后边的排序上升,想复杂了,因此下边的代码没必要 for(int i=0;i<n2;i++) { cin>>idlist[i]; isexist[idlist[i]]=1; } for(int i=0;i<n1;i++){ rankhash[ranklist[i]]=su原创 2021-04-12 10:34:49 · 176 阅读 · 0 评论 -
1108 Finding Average (20 分)字符串转数字
没有用sscanf和sprintf因为可能会出现字符第三个测试点刚开始过不了,原因是以为只有一位合法数字时,不用精确到小数点后两位,,其实是想说明numbers后边没有s是c_str#include<bits/stdc++.h>using namespace std;string s[101];double islegal(int id){ double num=0; int sign=0,op=0; for(int i=0;i<s[id].lengt原创 2021-04-11 16:08:34 · 143 阅读 · 0 评论 -
1101 Quick Sort (25 分)大小决定位序
1⃣️题目要求虽然简单,但是不能用暴力法求解2⃣️没有.end()-13⃣️刚开始没有设置max,导致答案部分正确,题目指出了distinct integers,只要其左边的都比它小,并且它的位置和排序后一样,只用满足这个条件,那它右边的元素一定都比它大。1.如果只是大于左边最大元素,位序不一致,那一定在其右边还有比它小的元素2.如果位序一致,可能左边有比它大的在滥竽充数,也不行。#include<bits/stdc++.h>using namespace std;int main原创 2021-04-10 14:48:16 · 90 阅读 · 0 评论 -
1093 Count PAT‘s (25 分)字符串组合问题+最后三个测试点超时原因
思想:刚开始想的以T为计算标志,即出现T时开始计算前边pat的个数,但是没有办法确定a是否在p后边,就换成A为计算标志,pat的个数是A前面和后面p和t的个数乘积;找到第一个A后边T的个数,再每次遇到T就t–,否则后边三个测试点超时。#include<bits/stdc++.h>using namespace std;int main(){ string s; cin>>s; long long l=0,p=0,a=0,t=0; char te原创 2021-04-05 16:55:59 · 172 阅读 · 0 评论 -
1112 Stucked Keyboard (20 分)字符串拼接,hash
vector没有find函数,分三种情况讨论1.只要存在没有重复k次,这个按键必定没坏2.重复k次,但满足13.重复k次,不满足1#include<bits/stdc++.h>using namespace std;bool hash1[1000]={false},hash2[1000]={false},hash3[1000]={false};vector<char> v1,v2;int main(){ int k,num=0; string s,s1原创 2021-04-05 08:31:29 · 151 阅读 · 0 评论 -
1087 All Roads Lead to Romne (30 分)字符串转化+dijkstra+dfs
当标尺比较多的时候,可以用dijkstra+dfs,这样dijkstra只需要找出最短路径下所有的pre即可,然后在dfs中便利这些路径,在单独由第二标尺第三标尺找出最佳路径#include<bits/stdc++.h>using namespace std;const int MAXN=210;const int INF=100000000;int n,m,st,G[MAXN][MAXN],weight[MAXN];int d[MAXN],numpath=0,maxw=0;dou原创 2021-03-06 10:42:36 · 87 阅读 · 0 评论 -
1030 Travel Plan (30 分)
#include<bits/stdc++.h>using namespace std;const int MAXN=510;const int INF=100000;int n,m,s,ed;int G[MAXN][MAXN],cost[MAXN][MAXN];int d[MAXN],c[MAXN],pre[MAXN];bool vis[MAXN]={false};void dijkstra(int p){ fill(d,d+MAXN,INF); fill(c,c原创 2021-03-05 23:10:04 · 89 阅读 · 0 评论 -
1018 Public Bike Management (30 分)Dijkstra边都是正的,三个标尺
1⃣️第一标尺一般是距离,可以在Dijkstra时唯一确定2⃣️当第二第三标尺不具有最优子结构性质时,即必须要遍历完所有路径后才能确定时,比如本题的minremain和minneed必须要把路径上所有点遍历完才可以确定,此时必须要用Dijkstra+dfs3⃣️为什么dfs时一定要倒着遍历呢?累加的话正着加和倒着加答案为什么不一样?#include<bits/stdc++.h>using namespace std;const int MAXN=510;const int INF=1原创 2021-03-05 20:49:02 · 116 阅读 · 0 评论 -
1057 Stack (30 分) 分块思想,pop,push的重载
分块+hashint block[101]={0};int hashtable[100001]={0};#include<bits/stdc++.h>using namespace std;stack<int> s;int block[101]={0};int hashtable[100001]={0};int getmid(){ int k,sum=0,num=0,now; if(s.size()%2==0) k=s.size()/原创 2021-03-03 17:50:22 · 107 阅读 · 1 评论 -
1076 Forwards on Weibo (30 分)测试点1,3,4答案错误bfs,计数
直接看代码没有找到思维漏洞,然后找了柳诺的代码,修改了测试用例、7 33 2 3 402 5 62 3 12 3 41 41 54 1 3 5 7柳诺的运行结果是:5550而我是5 6 4 0#define _CRT_SECURE_NO_WARNINGS 1#include<bits/stdc++.h>using namespace std;vector<int> adj[1010];bool vis[1010] = { false };原创 2021-03-01 21:15:28 · 434 阅读 · 0 评论 -
1021 Deepest Root (25 分)连通图个数、图的遍历dfs
①测试点3超时,我没有考虑有环的情况,拓扑排序好像是可以判断有向无环图吧,应该是for dfs用太多啦②memset的头文件是string.h,fill是algorithm③并查集可以找两个集合的共同元素,也可以合并,但是求连通图个数,如果需要dfs,用这个最简单 for(int i=1;i<=n;i++){ if(vis[i]==false){ dfs(i,1); block++; } }#includ原创 2021-02-27 11:47:54 · 176 阅读 · 0 评论 -
1013 Battle Over Cities (25 分)十分委婉的让你求连通图个数
①删除结点并不一定真的要删除它,只要在dfs时当它不存在即可②要将不连通的图变为连通图,并查集中学习到只需增加一条边即可。总共需要增加的边等于各个连通图个数-1.#include<bits/stdc++.h>using namespace std;const int N=1010;vector<int> G[N];bool vis[N];int nowdelete;void dfs(int v){ if(v==nowdelete) return; vi原创 2021-02-25 19:08:00 · 88 阅读 · 0 评论 -
1003 Emergency (25 分) 最短路径dijkstra
1⃣️int数组的默认值为0,所以={0}这个加不加都一样,如果a[100]={1},表示a[0]=1,其余都是0,可以用fill函数,例如:fill(d,d+MAXN,INF);2⃣️dijkstra模板当最小距离一样时,可以添加点权,第二边权,路径数量。#include<iostream>using namespace std;const int MAXN=510;const int INF=100000000;int n,e,st,ed,G[MAXN][MAXN],weig原创 2021-02-22 20:58:49 · 138 阅读 · 1 评论