自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 1093 Count PAT‘s (25 分)

题目链接题意给出一个仅包含P A T的字符串,可以组成多少个PAT子串。思路PAT中A处于中间,所以对于字符串中的每个A,都可以和它前面的所有P和后面的所有T组成p*t个PAT子串,因此只需找出每个A前P的个数和P后T的个数即可。从前往后遍历字符串,对于遇到的每个A,对应P的个数为已遍历P的个数,T的个数为T的总个数减已遍历T的个数,两者相乘即为这个A可组成的PAT子串个数。注意要对1000000007取模。代码#include <bits/stdc++.h>using name

2022-03-03 11:54:56 140

原创 1146 Topological Order (25 分)

题目题意给出一个有向图,判断给定的包含所有顶点的序列是不是拓扑序列分析本题主要是拓扑序列的定义:1.每个顶点出现且只出现一次2.序列中不能出现从后面结点到前面结点的路径在本题中,已经说明序列是所有顶点的排列,因此条件1恒满足。对于条件2,在输入路径时将翻转路径权值设为-1,再对所有顶点遍历,只要不出现权值为-1的路径即可。代码#include <bits/stdc++.h>using namespace std;int arr[1005][1005]={0};int ma

2021-09-04 20:24:16 63

原创 1012 The Best Rank (25 分)

题目题意分四类成绩给学生排名,输入待查询学生排名最好的课程名和对应排名。分析用结构体存储每个学生的信息:学号、所有科目成绩、排名、最好的一门课的编号。得到所有门类的成绩后按门类对学生进行排名,并将对应学科的排名放入rank[]数组中。再对某个学生的排名进行排序,查找最小值。注意点1、按门类对学生进行排名后,stu数组内的序列是最后一次排序后的序列,和原始的输入序列相比发生变化,因此学号和序号的对应应该是所有排序完成后再进行的代码#include <bits/stdc++.h>u

2021-09-03 17:34:10 58

原创 1151 LCA in a Binary Tree (30 分)

题目题意给出中序和先序序列,判断给定两个结点的最近公共祖先分析仅分析两结点都在树上的情况。对 一颗树上的两个结点而言,要么两个结点都在根结点的左子树或右子树,要么一左一右。如果一左一右,则两结点的公共祖先即为当前根结点;若都在左/右子树,则在左/右子树查询结点和根结点的相对位置。关键点使用map建立结点key值和位置间的映射,为判断待查询结点a、b与根结点的相对位置提供方便。代码#include <bits/stdc++.h>using namespace std;vect

2021-08-31 16:45:14 50

原创 1142 Maximal Clique (25 分)

题目链接题意给出一个图,判断它是不是clique,如果是,是不是最大clique。分析先判断是不是clique,用双重循环判断是不是所有的边都相连。如果是,在判断能不能找到一个非点集内的点满足该点到点集内所有点都有边。注意点变量多的时候一定要注意不要在变量名上出错啊!!!!!!!!!!!!!!!敲代码时候对照着题,按题中的循序输入输出代码#include <bits/stdc++.h>using namespace std;int a[210][210]={0};int m

2021-08-25 18:40:41 102

原创 1147 Heaps (30 分)

题目链接题意给出一个完全二叉树,判断它是不是堆。并输出树的后序遍历。分析因为是完全二叉树,所以直接使用数组进行存储即可。设置两个变量maxh和minh为false,遍历从第二个结点开始的所有结点,判断其与i/2结点值的大小,如果前者大于后者则为大堆,否则为小堆。如果两个变量同时为true则不是堆。使用DFS输出后序遍历序列。代码#include <bits/stdc++.h>using namespace std;int m,n;vector<int> v(100

2021-08-19 17:38:30 43

原创 1150 Travelling Salesman Problem (25 分)

题目链接题意给出一个图,判断其中某几个顶点是不是旅行商环路。如果是,判断该环路是否为简单环路。分析1.对任一组顶点,非旅行商环路:存在两个顶点间没有路径(arr[i][i+1]=0);起始顶点和终点不同(v[0]!=v[cnt-1]);未遍历完全部顶点(使用set,判断s.size=n?)。如果满足了旅行商环路的条件,再判断是否出现重复顶点,即判断cnt和n是否相等。最后输出所有旅行商环路的最短路径和对应的编号。代码#include <bits/stdc++.h>using nam

2021-08-19 16:02:32 60

原创 1134 Vertex Cover (25 分)

题目链接题意给出一个图和一组顶点序列,对这组序列逐个判断是否满足图的任一条边至少有一个顶点在序列中。分析1.对某一个序列而言,判断是否满足条件,可以通过双重循环遍历每一条边的顶点是否至少有一个包含在序列中。但本题数据规模是10^4,双重循环会导致超时,因此考虑采用find()函数判断是否可以在序列中查询到至少一个顶点。2.考虑使用set存储序列。故直接遍历所有的边,判断其顶点是否可在set中被查询。代码#include <bits/stdc++.h>using namespace

2021-08-17 21:32:58 57

原创 1139 First Contact (30 分)

题目链接题意给定n个人之间的m对朋友关系,判断根据给定的认识规则,任意两个人之间的有多少种认识方式。规则:追求者A找到自己的同性朋友C,C找到B的同性朋友D,则成功搭建AB友谊的桥梁。思路1.如果AB可以互相认识,则需要满足A的同性朋友C和B的同性朋友D认识。如果AB是同性,则需要排除AB直接相连的情况。2.首先存储所有相识的关系,同时构建邻接表存储同性朋友关系。3.对待认识的A和B,在邻接表中分别遍历A、B所有的朋友,如果她们的朋友有相识的,则认为双方可以相识。同时要排除同性交友中两者已经相识

2021-08-16 22:59:30 96

原创 1154 Vertex Coloring (25 分)

题目链接题意思维误区1.使用unordered-map存储边,但一个顶点可能和几个顶点有映射关系,导致边信息被遗漏。

2021-08-12 22:11:07 41

原创 1137 Final Grading (25 分)

题目链接题意根据排名规则对可以拿到证书的同学进行排名。1.平时分>=200 2.按成绩从高到低排名,成绩相同则按姓名次序注意点1.成绩要四舍五入。四舍五入的解决办法:在原数字基础上+0.5...

2021-08-12 11:07:14 48

原创 1148 Werewolf - Simple Version (20 分)

题目链接题意n个人玩狼人杀,有两个狼人,其余全是好人。其中一个好人说谎,一个狼人说谎。要求根据指认情况推断狼人的编号。分析重点是读懂题意1.容易想到枚举,重点是如何枚举。两种枚举,要么枚举说谎的人,要么枚举狼。如果设i,j为一狼一人,则不确定谁是狼谁是人,而且另一个狼也无法确定。因此按图索骥,直接设狼。2.通过狼的序号和说谎者的序号、人数,共同排除不合题意的情况。首先设置数组a[],存储当前情况下的身份情况;说谎的人必须是一狼一人,因此设置lie数组存储说谎者的身份,由题lie数组中只能有两个元

2021-08-09 17:58:15 84

原创 1141 PAT Ranking of Institutions

题目链接题意根据给出的各学校参赛学生成绩,对学校进行排名,名次有并列。关键点1.如何将学校名同时和总成绩、人数两个数据项对应?建立两个map,使用一个map的first对两个map同时遍历2.名次并列。设置flag表示上一个学校的成绩,如果相等则rank不变,如果不等则rank=i+1思维误区1.习惯性将所有输入学生信息放入一个结构体数组中,再对结构体数组进行操作。但在写代码过程中往往对数据的使用是一次性的,所以对于在单次循环中即可完成操作的数据,可以直接在循环中读入数据。注意点1.数据类

2021-08-07 12:14:13 56

原创 1137 Final Grading (25分)

题目链接知识点:排序、unordered_map思路1、理清规则,是否具有在线考试成绩,成绩如何计算等2、设置mp数组将具有考试资格的学生进行排号,并将学生信息放入v中。期中期末成绩先置为-1,总成绩置为03、通过mp数组的对应关系,将mp[t]不为0的考生对应的期中期末成绩进行更新,要注意mp[t]=0的同学,有不具备考试资格的同学,也有0号同学,因此加入条件t==v[0].name代码#include <bits/stdc++.h>using namespace std;

2020-09-04 11:22:14 126

原创 1144 The Missing Number (20分)

题目链接知识点:map思路要找缺少的数,设置mp数组,将每一个数与之出现的次数对应,形成mp数组后从1开始查找,当遇到mp[i]的值为0时,输出该值。代码#include <bits/stdc++.h>using namespace std;int main(){ //freopen("1.txt","r",stdin); int n,t; scanf("%d",&n); map<int,int> mp; for(i

2020-09-01 22:02:50 67

原创 1097 Deduplication on a Linked List (25分)

题目链接知识点:链表思路主要是去重。先查找出有效结点、形成链表并存储在temp中,再对temp中数据进行操作。设置bool数组,初值为false,当temp[i].data未出现过,将flag置为true,数据项存储进ans1数组中;若已出现过,数据项存储进ans2中。代码#include <bits/stdc++.h>using namespace std;struct Node{ int id,data,next;}node[100000];vector<

2020-09-01 13:15:21 96

原创 1074 Reversing Linked List (25分)

题目链接知识点:链表、元素反转思路1.可能存在不在链表内的数据项,因此先从起始位置开始往后查找有效元素,将其置于temp数组中,并记录链表长度len2.对temp数组进行操作。根据题意,将有效数据分为len分为len/k组,每一组组内进行翻转,最后的len-len%k按原顺序输出,即ans[i]=temp[i/k*k+k-1-i%k]将ans[]输出即可。代码#include <bits/stdc++.h>using namespace std;struct Node{

2020-09-01 11:18:28 105

原创 1052 Linked List Sorting (25分)

题目链接知识点:链表思路1.给出的数据项不一定在给定的起始位置形成的链表中,因此先从起始位置向后查找有效结点,将其存储在一个新的结构体数组ans中,并记录个数2.如果个数为0,直接输出0 -1;如果存在有效结点,将ans中的数据进行排序,输出信息即可。代码#include <bits/stdc++.h>using namespace std;struct Node{ int id,data,next;}node[100005],ans[100005];bool c

2020-08-31 13:46:28 68

原创 1032 Sharing (25分)

题目链接知识点:链表思路根据给出的地址将第一个字符串连成串,将其中出现的字符置为true,再连接第二个字符串,由地址的唯一指向性,只要出现标记为true的字符,则该字符重复,输出其id即可。代码#include <bits/stdc++.h>using namespace std;struct Node{ int id,next; bool flag;}node[100005];int main(){ //freopen("1.txt","r",s

2020-08-27 11:02:54 94

原创 1031 Hello World for U (20分)

题目链接知识点:图形打印,模拟思路由题2 * n1+n2-2=N,且n1是不大于n2的最大整数,故n1=(int)(N+2)/3,此处使用int的特性,取整数部分,因为n1<=n2。以此推断出底部字符个数即n2以及上面几行字符中两个字符间的距离gap。代码#include <bits/stdc++.h>using namespace std;int main(){ string s; cin>>s; int len=s.size();

2020-08-25 18:48:55 54

原创 1144 The Missing Number (20分)

题目链接知识点:map映射思路构建数字和其出现次数间的映射,读取从1开始第一个出现次数为0的数字代码#include <bits/stdc++.h>using namespace std;int main(){ int n,t; scanf("%d",&n); map<int,int> mp; for(int i=0;i<n;i++){ scanf("%d",&t); mp[t]

2020-08-04 22:30:54 99

原创 1132 Cut Integer (20分)

题目链接知识点:字符串处理思路使用substr函数取子串,转化为整数,判断输入的整数是否能被两个子串对应的整数的乘积整除。如果能输出Yes,否则输出No代码#include <bits/stdc++.h>using namespace std;int main(){ int n; scanf("%d",&n); while(n--){ string s,s1,s2; cin>>s; i

2020-08-04 11:39:08 81

原创 1148 Werewolf - Simple Version (20分)

题目链接代码参考柳婼小姐姐的题解知识点:枚举思路题意:两狼,一个说真话一个说假话,剩余的好人中有一个说真话,按顺序(保证了最小序列)找出符合题意的两个玩家序号即可。思路:首先是理解题意,明白题目的规则。设置数组p存储玩家发言,按照枚举的方法将i和j分别从1号和2号开始进行枚举,假设其为狼,设置数组a代表玩家真实身份,狼为-1,人为1,验证该情况下所有玩家话语真实性。设置lie数组保存说谎的玩家的序号,当玩家k所指证的玩家abs(p[k])的身份与实际情况不符时,将k置于lie数组中。当lie数组

2020-08-04 11:37:05 124

原创 1136 A Delayed Palindrome (20分)

题目链接代码参考柳婼的题解知识点:大整数加法、字符串处理思路1、判断字符串s是否为回文串。是,则结束程序。2、使用reverse()函数对s进行翻转,得另一个加数。记得处理末尾进位。代码#include <bits/stdc++.h>using namespace std;string rev(string s){ reverse(s.begin(),s.end()); return s;}bool judge(string s){ if(s

2020-08-04 11:33:57 63

原创 1140 Look-and-say Sequence (20分)

题目链接知识点:字符串思路根据题意,后一个是对上一个字符串进行局部搜索,而不是全局搜索,因此应从头开始记录字符串中每个数字相同的子串的数字值和长度。代码#include <bits/stdc++.h>using namespace std;int main(){ string s; int n,i,j; cin>>s>>n; for(int cnt=1;cnt<n;cnt++){ string t;

2020-08-04 11:30:04 110

原创 1152 Google Recruitment (20分)

题目链接知识点:判断素数、字符串处理思路遍历从0到len-k+1的所有长度为k的子串,遇到素数则终止。代码#include <bits/stdc++.h>using namespace std;bool isprime(int n){ if(n==0||n==1) return false; for(int i=2;i*i<=n;i++){ if(n%i==0) return false; } return true;}

2020-08-04 11:26:37 54

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除