pat
zane_wing
这个作者很懒,什么都没留下…
展开
-
1144 消失的正数
本来用的vector,结果最后答案有问题,就看了一下柳神的代码,柳神使用的是map,我发现map对这种对应关系有奇效。AC代码:#include<iostream>#include<map>using namespace std;int main(){ int n,d; cin >>n; int num=0; map<int,int> m; for(int i=0;i<n;i++){ cin >> d; m[d]+原创 2020-08-15 21:04:58 · 86 阅读 · 0 评论 -
1097利用1074的思路
分两个结果链表,ans1[maxn],ans2[maxn]AC代码:#include<iostream>#include<algorithm>using namespace std;const int maxn=100010;int main(){ int hash[maxn]={0}; int n,begin; cin >> begin >> n; int data[maxn],next[maxn],list[maxn],ans1[max原创 2020-08-15 21:54:00 · 112 阅读 · 0 评论 -
A1017银行窗口排队(没做出来,重要)
搞不清楚的点在于窗口的选择可以把时间转换为int类型的数自,然后排序,需要的数据就有了,但是如何选择窗口没搞明白。借鉴柳神的思路原创 2020-08-05 15:04:09 · 142 阅读 · 0 评论 -
1132 string字符串+数学问题
题意:Z%(A*B)==0思路:普通数学问题AC代码:#include<iostream>using namespace std;int main(){ int n; string s; cin >> n ; for(int i=0;i<n;i++){ long long a,b,c; cin >> s; int k=s.size(); c=stoll(s); a=stoll(s.substr(0,k/2)); b=st原创 2020-08-15 17:22:14 · 95 阅读 · 0 评论 -
1052链表排序
题意链表排序思路:模板题AC代码:#include<iostream>#include<algorithm>using namespace std;const int maxn=100010;struct Node{ int address,key,next; bool flag;}node[maxn];bool cmp(Node a,Node b){ if(a.flag==false||b.flag==false){ return a.flag>原创 2020-08-15 18:01:14 · 87 阅读 · 0 评论 -
1145哈希+二次探测法
Quadratic probing (二次探测法)题意:哈希+二次探测法+平均查找时间思路平方探测法原理AC代码:#include<iostream>#include<algorithm>#include<vector>using namespace std;bool isPrime(int n){ if(n==0||n==1) return false; for(int i=2;i*i<n;i++){ //这边易错,容易从0开始,就会出现原创 2020-08-17 09:01:49 · 348 阅读 · 0 评论 -
1141排序+unorder_map+vector
题意输入n个学生的信息,求学校排名思路跟1153差不多,结构体+vector+unordered_map但是这次创建了两个对应的unordered_map——cnt和sum,学校数据都整理好了之后,rank也需要专门分析,分数相同的排名相同,=前面的排名,之后不相等的=i+1;AC代码:#include<iostream>#include<vector>#include<map>#include<unordered_map>#includ原创 2020-08-21 07:55:36 · 110 阅读 · 0 评论 -
PAT第一遍分类刷题
水题逻辑题题目时间点10088/51017(难)8/5原创 2020-08-05 15:04:45 · 110 阅读 · 0 评论 -
分类刷题:A1136 palindromic number
题意:在10次以内,字符串转换的数字+字符串反转转换的数字之和再转字符串,最后的字符串是否能够达成对称。思路:字符串+stoi()函数+字符串反转+判定代码:#include<iostream>#include<cstring>#include<algorithm>using namespace std;string rev(string s){ reverse(s.begin(),s.end()); return s;}int main(){原创 2020-08-06 10:19:04 · 98 阅读 · 0 评论 -
分类刷题:A1008乘电梯
题目总结:6s上一层,4s下一层,每层停5s。完成后最后不需要返回第0层。AC代码:#include<cstdio>#include<algorithm>#include<cmath>using namespace std;int main(){ int n,ans,a[110]; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } ans=a[0]*6+5原创 2020-08-05 11:14:33 · 113 阅读 · 0 评论 -
1074 链表翻转(柳神代码思路)yyds
题意:n,k,翻转链表思路采用data[maxn],next[maxn]和list[maxn],ans[maxn]来记录链表其他的都挺简单的,就是翻转的规律难找:ans[i]=list[i/k*k+k-1-i%k];AC代码:#include<iostream>#include<algorithm>using namespace std;const int maxn=100010;int main(){ int n,k,p,sum=0; int data[m原创 2020-08-15 20:33:56 · 279 阅读 · 0 评论 -
1133分割链表
题意:begin,n,k把链表分三类:<0;>=0&&<k;>=k;这三类按照排列的顺序输出思路:一种分类的模板+vector(压入的顺序即排列的顺序)AC代码:#include<iostream>#include<vector>using namespace std;struct Node{ int address,data,next;}node[100010];int main(){ int begin,n,k,原创 2020-08-16 08:23:34 · 111 阅读 · 0 评论 -
PAT A1015进制翻转之后的数是否还是素数
题意给出一个数N,和进制D,确认N和经过进制D翻转的数是否都为素数。思路1)先写出isPrime()函数,来确实数字是否为素数2)再利用进制转换翻转,求出翻转后的数3)读出时,如果只读入一个负数,则结束程序。利用while(scanf("%d",&n)!=EOF)来解决。代码#include<cstdio>#include<cmath>using namespace std;bool isPrime(int n){ //判断n是否为素数 if(n&原创 2020-07-03 15:04:54 · 114 阅读 · 0 评论 -
PAT A1036Boys VS Girls
普通的结构体做法boys和girls用不同的if条件分开AC代码:#include<iostream>using namespace std;int main(){ int n,c1=0,c2=0; int max=-1,min=101; string maxid,maxname,minid,minname; struct student{...原创 2019-08-12 16:31:03 · 105 阅读 · 0 评论 -
PAT A1002A+B for Polynomials
题目大意计算多项式A+B的和思路跟B1010 一元多项式求导有类似的地方按格式分别读入第一行和第二行直接代入数组最后从大到小输出tips:幂数最大可以取到1000,那么数组的大小最少为1001需要保留一位小数最后输出不能有空格AC代码#include<iostream>using namespace std;int main(){ float c[1...原创 2019-08-09 15:05:54 · 72 阅读 · 0 评论 -
PAT A1031Hello World for U
思路读题意,n1=n3<=n2,n1要尽可能的大 ->n1=n2=n3时最大所以n1=n3=row=(n+2)/3;n2=row+(n+2)%3; 分配字符个数,get.我个人的思路是第i行(i从0开始)第一个字符是str[i],只要知道一共输入进几个字符,就可以知道这行最后的字符是str[n-i-1],中间的空格数为n2-2;接下来只剩最后一行,最后一行就是按顺序输入s...原创 2019-08-14 14:10:38 · 67 阅读 · 0 评论 -
A1079供应链总共售出的价值(树的遍历)
题意:树从上至下是供应商与消费者的关系,最底层(叶节点)是单纯的消费者,除根节点外的非叶结点都是消费者+转售商,求出售出的总价值思路1)重建二叉树,找出根节点2)层次遍历,求出转售的次数3)求出叶节点处的产品个数AC代码:#include<cstdio>#include<cstring>#include<vector>#include<queue>#include<cmath>//自己做出来的思路 using names原创 2020-07-12 16:11:50 · 94 阅读 · 0 评论 -
PAT A1042 Shuffling Machine
模拟思路借鉴的算法笔记和柳神的代码使用start[n]和end[n]来储存每次开始和结束的代码scan[i]是用来调换的顺序数组char c={“SHCDJ”}编号与花色之间的关系需要注意AC代码#include<cstdio>using namespace std;int main(){ int n; scanf("%d",&n); ...原创 2019-08-06 14:23:51 · 74 阅读 · 0 评论 -
PAT A1011
思路W,T,L组成数组,a,b,c分别代表W,T,L的盈利总的来说就是三位数的比较?#include<iostream>using namespace std;float max(float a,float b,float c){ float m; if(a>=b && a>=c) m=a; else if(b>=a &&a...原创 2019-08-12 15:18:21 · 129 阅读 · 0 评论 -
PAT A1058
跟PAT B1037一个套路但是注意加和,可能超出int类型范围使用long long比较保险,我一开始用int结果有一个测试点爆了AC代码:#include<iostream>using namespace std;int main(){ int a1,b1,c1,a2,b2,c2; int t1,t2,t3; scanf("%d.%d.%d",&...原创 2019-08-15 18:11:42 · 64 阅读 · 0 评论 -
PAT A1034团伙头目
题意:给出N条通话记录,这些通话将他们分为若干组。每个组的总边权为该组内的所有通话的长度之和,每个人的点权设为该人参加的通话长度之和。给定阀值K,超过阀值且大于二人的组被视为犯罪团伙,而组内点权最大的人被视为头目,要求输出团伙个数和每个团伙的头目,以及成员个数。思路:首先是姓名字符串和编号的对应关系:map<string,int>求某点相连的边权之和进行图的遍历,获取每个连通块的头目、成员个数、总边权。如果总边权>K,且人数>2,则记录为一个犯罪团伙代码:...原创 2020-07-16 06:52:22 · 154 阅读 · 0 评论 -
PAT A1019General Palindromic Number
转换进制(循环,数组)确认是否为回文(判断)tips:No和Yes注意大小写AC代码#include<iostream>using namespace std;int main(){ int n,b,z[40],num=0; cin >> n >> b; do{ z[num++]=n%b; ...原创 2019-08-15 16:15:07 · 98 阅读 · 0 评论 -
PAT A1049计算1的个数
题意输入N,从1~N求有几个1。简单思路枚举,先用子函数求出每一个数中出现1的次数,然后在主函数中循环从1-N。#include<iostream>#include<algorithm>using namespace std;int get_one(int n){ int a,sum=0; while(n){ a=n%10; //循环每一位 if(a==1) sum++; n=n/10; } return sum;} int main(){原创 2020-07-02 07:23:26 · 116 阅读 · 0 评论 -
PAT A1009Product of Polynomials
思路从算法笔记上学到的:先获得第一个多项式的系数与幂次方,然后在输入第二个系数的循环时,与第一个多项式的系数相乘,并将结果相加。AC代码:#include<iostream>using namespace std;int main(){ int m,n,a,cnt=0; scanf("%d",&m); double b,arr[1001]=...原创 2019-08-09 15:30:42 · 112 阅读 · 0 评论 -
PAT A1065A+B and C
思路因为范围在[−263,263],所以,a,b,c都是long long 型。a+b存在数据溢出的情况,所以需要单独分析因为数据正溢出后,从-263开始,到[(264-2)-263]-263(前面是溢出的数据,再减263是因为从-263开始。所以正溢出的范围为[-263,-2]同理 负溢出的范围为[0,263]所以a+b与c的情况可以分三类:1.a>0 &am...原创 2019-08-07 13:29:36 · 68 阅读 · 0 评论 -
PAT A1029找中间数
把两个数组合在一起,求其中间数。直接合并,然后求中间数就好了。坑点:分奇偶偶数的话,要用index/2-1;奇数的话,直接index/2;代码:#include<iostream>#include<algorithm>using namespace std;int S1[1000010],S2[1000010];int R[1000010];int main(){ int n,m; scanf("%d",&n); for(int i=0;i<原创 2020-06-29 22:31:37 · 93 阅读 · 0 评论 -
PAT A1094求出人数最多的一代(BFS+树的遍历)
思路1)构建树2)BFS求出每代人的个数3)循环求最多一代代码#include<cstdio>#include<vector>#include<queue>#include<algorithm>using namespace std;const int maxn=110;struct node{ int layer; vector<int> child;}Node[maxn];int sum[maxn]={0};vo原创 2020-07-13 15:03:49 · 117 阅读 · 0 评论 -
PAT A1027Colors in Mars
一开始想的太复杂了,虽然想到了最多只有两位数,但是还是按照惯性思维用进制转换的万能公式,然后代入二维数组中,最后答案还是错误QAQ。就看了一下柳神的代码,然后轻松AC了。AC代码:#include<iostream>using namespace std;int main(){ char c[14]={"0123456789ABC"}; printf("#");...原创 2019-08-15 17:59:11 · 89 阅读 · 0 评论 -
PAT A1076微博转发(图的BFS遍历)
题意:依次输入的是i号关注的人(这点一开始搞错了),然后输入查询id,求不超过转发上限的情况下的转发量思路:1)建图,采用邻接链表会好一点。2)BFS遍历,需要加上一个约束限制(不超过转发限制)AC代码:#include<cstdio>#include<vector>#include<queue>#include<cstring>using namespace std;const int N=1100;struct Node{ int原创 2020-07-16 15:40:55 · 124 阅读 · 0 评论 -
A1107社交圈(并查集)
题意输入n个人的爱好,爱好相同的在同一个社交圈,跟书上的好朋友一样,如果A、B都喜欢活动1,B、C都喜欢活动2,A和B在同一圈,B和C在同一圈,则A和C也在同一圈。思路:跟书上一样,书上直接给出朋友关系,本题需要先依靠hobby[]来判断是否在同一个集合,还有就是书上是直接用bool数组判断是根节点的个数,本题更进一步,需要求出每个集合中的元素个数。AC代码:#include<cstdio>#include<algorithm>using namespace std;原创 2020-07-15 14:46:26 · 239 阅读 · 0 评论 -
PAT A1059素因子分解(教学题)
题意求出n所能分解的素因子。思路这个应该是套路题,就是打印素数表,然后利用fac数组,枚举1~sqrt(n)范围内的所有素因子p,判断p是否为n的因子。还要注意如果在枚举完之后,n仍然>1,那么必定有一个大于sqrt(n)的素因子(很有可能就是n本身),这部分也需要处理。#include<cstdio>#include<cmath>using namespace std;const int maxn=100010;struct factor{ int x,cnt;原创 2020-07-03 15:51:49 · 168 阅读 · 0 评论 -
PAT A1046 Shortest Distance
最短距离一开始的思路:顺时针从a->b,逆时针从b->n->a,比较两种方法的count后来看算法笔记,发现顺时针+逆时针=整个数组的和可以直接求顺时针,如果输入a,b不形成顺时针,则调换a,b。#include<cstdio>#include<algorithm>using namespace std;int dis[100005],A[1...原创 2019-08-06 18:39:15 · 66 阅读 · 0 评论 -
PAT A1006Sign In and Sign Out
思路跟PAT B1028人口普及一个套路AC代码#include<iostream>using namespace std;int main(){ int n; string id,lockid,unlockid,mintime="00:00:00",maxtime="24:00:00",begintime,endtime; cin >>...原创 2019-08-12 15:56:39 · 106 阅读 · 0 评论 -
PAT A1086先序遍历+中序遍历-》后序遍历
push输入的顺序是先序pop输出的顺序是中序最后的结果应该是后序输出两个子函数:1)先序+中序重建二叉树2)后序输出二叉树//pat a 1086#include<cstdio>#include<algorithm>#include<cstring>#include<stack> using namespace std;const int maxn=100;int pre[maxn],in[maxn],post[maxn];sta原创 2020-07-10 16:41:23 · 80 阅读 · 0 评论 -
PAT B1006
AC代码:#include<iostream>using namespace std;int main(){ int n,k1,k2,k3; cin >> n; k1=n/100; n=n%100; k2=n/10; k3=n%10; for(int i=0;i<k1;i++){ cout ...原创 2019-08-16 17:12:50 · 62 阅读 · 0 评论 -
PAT B1037在霍格沃茨找零钱 (20 分)
思路1.先计算差多少纳特2.再由纳特转换为加隆和西可3.负数注意后两位变成正数tips:小数点不知道怎么输入,我把它变成了字符。AC代码#include<iostream>using namespace std;int main(){ int a1,a2,b1,b2,c1,c2; char c; int t1,t2,t3; cin &g...原创 2019-08-15 15:24:15 · 69 阅读 · 0 评论 -
PAT B1041考试座位
思路跟书上找x差不多但是,就是有两个对应关系我设定的是考试座位->试机座位和考试座位->考生号因为查找的是试机座位#include<iostream>using namespace std;int main(){ int n,m; long long a[1001],k; int b[1001],c1,c2,x; scanf(...原创 2019-08-10 15:46:56 · 79 阅读 · 0 评论 -
PAT B1010一元多项式求导
思路没有给定输入的结束条件,使用while……EOFa[]数组用来存放对应的指数的系数从低次项至高次项进行枚举,通过公式来得到求导之后的数组,覆盖原数组,同时计数导数项不为零的个数。最后从高次项往低次项枚举,输出。AC代码#include<cstdio>int main(){ int a[1010]={0}; int k,e,count=0; ...原创 2019-08-07 16:06:17 · 104 阅读 · 0 评论 -
***PAT B1014福尔摩斯的约会(没有思路)
没思路我一开始连题目都读得是错的,我以为是一个个,从第一个字符串到第二个字符串中找成对,然后不会做看别人的blog,发现不是我想的那样,而是第一个字符串的第一个位置,对应第二个字符串的第一个位置,相同位置上的字符相同成对。AC代码:#include<iostream>#include<cctype>using namespace std;int main(){...原创 2019-08-19 13:46:17 · 91 阅读 · 0 评论 -
PAT B1003我要通过
这个题目太具有迷惑性了。重点是规律。1.整个字符串里面只能有P、A、T三个字符2.像PAT、APATA、AAPATAA……这种都可以3.可推如果是PAT,则ac都为0,那么PAAT可以,PAAAAT可以,PAAAAAAA……AT都可以如果是APATA,则APAATAA,APAAATAAA,APAAAATAAAA可以如果是AAPATAA,那么AAPAATAAAA,AAPAAATAAAAAA都可以总结规律:只能有一个P和T,中间和末尾可以随便插入;开头的A的个数*中间A的个数=结尾的A的个数。原创 2020-07-01 16:21:42 · 98 阅读 · 0 评论