- 博客(149)
- 收藏
- 关注
原创 操作系统期末题库整理
处理器管理(15分)进程和线程的关系定义:进程:进程是动态的,是程序的一次执行过程。进程是由程序段、数据段、PCB组成线程:线程是一个基本的CPU执行单元,也是程序执行流的最小单位。引入线程后,有什么变化:资源分配、调度:传统的进程机制中,进程是资源分配、资源调度的基本单位引入线程后,进程是资源分配的基本单位,线程是资源调度的基本单位并发性:传统机制中,只能进程间并发引入线程后,各进程间也能并发,提升了并发度系统开销:传统的进程间并发,需要切换进程的运行环境,系统开
2021-12-23 08:25:32 2113 7
原创 1069 The Black Hole of Numbers (20 分)
1069 The Black Hole of Numbers (20 分)题目大意简单的数字处理问题。基本思路有如果当输入N值为6174的时候,依旧要进行下面的步骤,直到差值为6174才可以。所以用do while语句,无论是什么值总是要执行一遍while语句,直到遇到差值是0000或6174。s.insert(0, 4 – s.length(), ‘0’);用来给不足4位的时候前面补0。代码#include <bits/stdc++.h>using namespace std;
2022-01-26 22:46:37 957
原创 1108 Finding Average (20 分)
1108 Finding Average (20 分)题目大意简单的数字处理问题。给出一组序列,找出其中的合法元素(在[-1000,1000]之内的最多保留小数点后两位的浮点数),并求合法浮点数的个数和平均值。基本思路用下面两个函数可以巧妙地解决这个问题:sscanf() – 从一个字符串中读进与指定格式相符的数据sprintf() – 字符串格式化命令,主要功能是把格式化的数据写入某个字符串中看不明白可以打开我的注释,一目了然~代码/*sscanf() – 从一个字符串中读进与指定格式相
2022-01-26 21:59:43 283
原创 1009 Product of Polynomials (25 分)
1009 Product of Polynomials (25 分)题目大意简单模拟多项式乘法。基本思路double类型的arr数组保存第一组数据,ans数组保存结果。当输入第二组数据的时候,一边进行运算一边保存结果。最后按照指数递减的顺序输出所有不为0的项。注意:因为相乘后指数可能最大为2000,所以ans数组最大要开到2001。代码#include <bits/stdc++.h>using namespace std;int main(){ int n1,n2;
2022-01-26 21:03:42 1047
原创 1002 A+B for Polynomials (25 分)
1002 A+B for Polynomials (25 分)题目大意计算多项式A+B的和。基本思路设立c数组,长度为指数的最大值,c[i] = j表示指数i的系数为j,接收a和b输入的同时将对应指数的系数加入到c中,累计c中所有非零系数的个数,然后从前往后输出所有系数不为0的指数和系数。代码#include <bits/stdc++.h>using namespace std;int main(){ float c[1001]={0};//下标为指数,值为系数
2022-01-26 20:36:08 762
原创 1132 Cut Integer (20 分)
1132 Cut Integer (20 分)题目大意给一个偶数个位的正整数num,把它从中间分成左右两个整数a、b,问num能不能被a和b的乘积整除,能的话输出yes,不能的话输出no。基本思路直接用int保存num的值,计算出num的长度len,则令d = pow(10, len / 2)时,num取余d能得到后半部分的整数,num除以d能得到前半部分的整数,计算num % (ab)是否等于0就可以得知是否可以被整除。注意:ab如果为0的时候不能取余,否则会浮点错误。代码#include
2022-01-25 23:02:45 281
原创 1058. A+B in Hogwarts (20)
1058. A+B in Hogwarts (20)题目大意17个Sickle对换一个Galleon,29个Knut对换一个Sickle。根据Galleon.Sickle.Knut的方式相加A和B基本思路像相加算术一样从后往前按位相加,处理好进位。代码#include <bits/stdc++.h>using namespace std;int main(){ int a1,b1,c1,a2,b2,c2,a,b,c; scanf("%d.%d.%d %d.%d.%
2022-01-25 12:45:01 107
原创 1019 General Palindromic Number (20 分)
1019 General Palindromic Number (20 分)题目大意给出两个整数a和b,问十进制的a在b进制下是否为回文数。是的话输出Yes,不是输出No。并且输出a在b进制下的表示,以空格隔开。基本思路将a转换为b进制形式,保存在int的数组里面,比较数组左右两端是否对称。注意:可以使用do-while方式计算数组arr,可以减少一步特例0的判断。代码#include <bits/stdc++.h>using namespace std;int main()
2022-01-25 12:37:08 100
原创 1027 Colors in Mars (20 分)
1027 Colors in Mars (20 分)题目大意给三个十进制的数,把它们转换为十三进制的数输出。要求在前面加上一个"#"号基本思路因为0~168的十进制转换为13进制不会超过两位数,所以这个两位数为(num / 13)(num % 13)构成的数字代码#include <bits/stdc++.h>using namespace std;int main(){ char c[14]={"0123456789ABC"}; cout<<"#";
2022-01-25 12:17:25 98
原创 1028 List Sorting (25 分)
1028 List Sorting (25 分)题目大意根据c的不同取值,采取不同的排序方式对结构体进行排序,然后输出。基本思路简单的排序问题,直接看代码注释就行。代码#include <bits/stdc++.h>using namespace std;int n,c;struct NODE{ int no; string name; int score;};int cmp1(NODE a,NODE b){ if(c==1){
2022-01-25 10:56:59 162
原创 1083 List Grades (25 分)
1083 List Grades (25 分)题目大意给出n个考生的信息,按照分数从高到低排序,并且输出给定区间的考生信息。如果不存在满足条件的考生就输出NONE基本思路建立结构体数组,将不满足条件的学生grade改为-1,并统计满足条件的学生的个数cnt,然后进行排序,输出前cnt个考生的信息。注意:因为每个学生的成绩都不同,所以按照下降排列即可,return a.grade > b.grade;代码#include <bits/stdc++.h>using namesp
2022-01-25 10:31:23 446
原创 1024. Palindromic Number (25)
1024. Palindromic Number (25)题目大意给定一个数字,和允许翻转后相加的次数cnt,求要多少次才能变成一个回文数字,输出那个回文数字和翻转相加了多少次,如果本身就是回文数字就输出0次,如果超过给定的次数cnt了,就输出那个不是回文的结果,并且输出给定的次数cnt。基本思路用字符串完成大整数的相加操作。可以通过对字符串翻转后比较来判断是否为回文串。代码#include <bits/stdc++.h>using namespace std; string
2022-01-23 22:55:02 287
原创 1031. Hello World for U (20)
1031. Hello World for U (20)题目大意用所给字符串按U型输出。n1和n3是左右两条竖线从上到下的字符个数,n2是底部横线从左到右的字符个数。要求:n1 == n3n2 >= n1n1为在满足上述条件的情况下的最大值基本思路假设n = 字符串长度 + 2,因为2 * n1 + n2 = n,且要保证n2 >= n1, n1尽可能地大,分类讨论:如果n % 3 == 0,n正好被3整除,直接n1 == n2 == n3;如果n % 3 == 1,因
2022-01-23 21:58:25 140
原创 1065 A+B and C (64bit) (20 分)
1065 A+B and C (64bit) (20 分)题目大意判断a、b两数之和是否大于c,是输出true,否输出false。注意:需要进行溢出判断。基本思路若A、B异号或其中一个为0,则可直接相加;若A、B > 0。若C <= 0,则直接true;若C > 0,转换为A > C - B若A、B < 0。若C >= 0,则直接false;若C < 0,转换为A > C - B也可以利用溢出后变号的规律,最大值+1 = 最小值,相当于取值范围
2022-01-23 21:25:49 168
原创 1042 Shuffling Machine (20 分)
1042 Shuffling Machine (20 分)题目大意简单模拟洗牌操作。基本思路通过数组start、end、next完成洗牌相关的操作。通过转换关系输出最终结果。代码#include <bits/stdc++.h>using namespace std;const int N=54;int start1[N+1],end1[N+1],next1[N+1];int main(){ int n;//洗牌次数 cin>>n; //初
2022-01-23 20:53:56 226
原创 1124 Raffle for Weibo Followers
1124 Raffle for Weibo Followers题目大意小明PAT考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔N个人就发出一个红包。请你编写程序帮助他确定中奖名单。注意:可能有人转发多次,但不能中奖多次。所以如果处于当前中奖位置的网友已经中过奖,则跳过他顺次取下一位。按照输入的顺序输出中奖名单,每个昵称占一行。如果没有人中奖,则输出“Keep going…”基本思路用map存储当前用户有没有已经中奖过~当输入的时候,判断当前字符串是否已经在map中出现过,如果出
2022-01-23 12:03:32 211
原创 1036. Boys vs Girls (25)
1036. Boys vs Girls (25)题目大意给出N个同学的信息,输出女生中的最高分获得者的信息与男生中最低分获得者的信息,并输出他们的分数差。如果不存在女生或者男生,则对应获得者信息处输出Absent,而且差值处输出NA。基本思路用string类型的female和male保存要求的学生的信息,femalescore和malescore处保存男生的最低分和女生的最高分。一开始设femalescore为最低值-1,malescore为最高值101,最后根据分值是否为-1或者101来判断是否
2022-01-23 11:45:11 201
原创 1046 Shortest Distance (20 分)
1046 Shortest Distance (20 分)题目大意简单模拟。基本思路所有结点连起来会形成一个环形。dis[i]存储第1个结点到第i个结点的下一个结点的距离。sum保存整个路径一圈的总和值。求得结果就是dis[right – 1] – dis[left – 1]和 sum – dis[right – 1] – dis[left – 1]中较小的那一个。代码#include <bits/stdc++.h>using namespace std;int main() {
2022-01-22 22:32:18 242
原创 1136 A Delayed Palindrome (20 分)
1136 A Delayed Palindrome (20 分)题目大意大整数运算,直接看测试样例就能知道题意。基本思路1 将字符串倒置与原字符串比较看是否相等可知s是否为回文串2 字符串s和它的倒置t相加,只需从头到尾相加然后再倒置(记得要处理最后一个进位carry,如果有进位要在末尾+’1’)3 倒置可采用algorithm头文件里面的函数reverse(s.begin(), s.end())直接对s进行倒置代码#include <bits/stdc++.h>using
2022-01-22 22:00:49 102
原创 1006. Sign In and Sign Out (25)
1006. Sign In and Sign Out (25)题目大意给出n个人的id、sign in时间、sign out时间,求最早进来的人和最早出去的人的ID。基本思路将时间都转换为总秒数,最早和最迟的时间保存在变量minn和maxn中,并同时保存当前最早和最迟的人的ID,最后输出代码#include <bits/stdc++.h>using namespace std;int main(){ int n; int minn=INT_MAX,maxn=I
2022-01-22 21:14:39 122
原创 1011. World Cup Betting (20)
1011. World Cup Betting (20)题目大意给出三场比赛以及每场比赛的W、T、L的赔率,选取每一场比赛中赔率最大的三个数a b c,先输出三行各自选择的是W、T、L中的哪一个,然后根据计算公式 (a * b * c * 0.65 - 1) * 2 得出最大收益~基本思路以三个数一组的形式读取,读取完一组后输出最大值代表的字母,然后同时ans累乘该最大值,最后根据公式输出结果~代码#include <bits/stdc++.h>using namespace
2022-01-20 22:47:57 462
原创 1149 Dangerous Goods Packaging (25 分)
1149 Dangerous Goods Packaging (25 分)题目大意集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里。比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸。给定一张不相容物品的清单,需要你检查每一张集装箱货品清单,判断它们是否能装在同一只箱子里。对每箱货物清单,判断是否可以安全运输。如果没有不相容物品,则在一行中输出 Yes,否则输出 No~基本思路用map存储每一个货物的所有不兼容货物~在判断给出的一堆货物是否是相容的时候,判断任一货物的不兼容货物
2022-01-20 21:18:16 222
原创 1120. Friend Numbers
题目大意给出一串数字序列,对于其中任意一个数字,求出它的各位相加之和,并按照升序顺序输出结果。基本思路在接收输入数据的时候就把该数字的每一位相加,并把结果插入一个set集合中。因为set是有序的、不重复的,所以set的size值就是输出的个数,set中的每一个数字即所有答案的数字序列代码#include <bits/stdc++.h>using namespace std;int n;set<int> s;//将某一个数字每一位相加并返回int getFri
2022-01-20 21:05:05 341
原创 1092 To Buy or Not to Buy (20 分)
1092 To Buy or Not to Buy (20 分)题目大意小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。基本思路字符串a和b分别存储摊主的珠串和小红想做的珠串,遍历字符串a,将每一个字符出现的次数保存在book数组中,表示摊主的每个珠子的个数,遍历字符串b,如果book[b[i]]>0,表示小
2022-01-20 13:05:58 96
原创 1050 String Subtraction (20 分)
1050 String Subtraction (20 分)题目大意给出两个字符串,在第一个字符串中删除第二个字符串中出现过的所有字符并输出基本思路用hashtable[256]数组变量标记str2出现过的字符为true,输出str1的时候根据hashtable[str1[i]]是否为true,如果是true就不输出代码#include <bits/stdc++.h>using namespace std;char str1[10010];char str2[10010];b
2022-01-20 12:38:12 594
原创 1041. Be Unique (20)
1041. Be Unique (20)题目大意题目大意:给n个数字,按照读入顺序,哪个数字是第一个在所有数字中只出现一次的数字。如果所有数字出现都超过了一次,则输出。基本思路建立一个数组,存储每个数字出现的次数,然后遍历一遍输入的顺序看是否有出现次数为1的数字代码#include <bits/stdc++.h>using namespace std;const int maxn=100001;int n;int a[maxn];int hashtable[maxn]={0
2022-01-20 11:48:19 447
原创 1104 Sum of Number Segments
1104 Sum of Number Segments题目大意给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列{0.1, 0.2, 0.3, 0.4},我们有(0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4) 这10个片段。给定正整数数列,求出全部片段包含的所有的数之和。如本例中10个片段总和是0.1 + 0
2022-01-18 22:01:49 363
原创 1152 Google Recruitment
1152 Google Recruitment题目大意给出一个n长度的字符串,求出其中第一个m位的素数基本思路枚举每个k位的子串,转换成整数,判断是否是素数(判断素数的时候要把0和1也考虑进去)~代码#include <bits/stdc++.h>using namespace std;bool prime(int n){ if(n<2) return false; for(int i=2;i<=sqrt(n);i++){ if(n%i
2022-01-18 21:28:19 303
原创 1116 Come on,Let‘s C (20 分)
1116 Come on! Let’s C (20 分)题目大意给出每个id的排名,请根据不同的排名,做出不同的输出。基本思路ran数组标记每个id对应的排名,集合ss存储所有已经询问过的id,如果发现当前id已经出现在ss中,则输出“Checked”,如果ran[id] == 0说明当前id不在排名列表中,所以输出“Are you kidding?”,如果ran[id]为1则输出“Minion”,如果ran[id]为素数则输出“Mystery Award”,否则输出“Chocolate”代码#
2022-01-18 21:17:45 87
原创 1015 Reversible Primes (20 分)
1015 Reversible Primes (20 分)题目大意如果一个数本身是素数,而且在d进制下反转后的数在十进制下也是素数,就输出Yes,否则就输出No基本思路简单的进制转换、素数问题,直接看注释就好。其中关于进制转换的代码可以当作模板来使用。代码#include <bits/stdc++.h>using namespace std;//判断数字n是否是素数bool check(int n){ if(n<2) return false; for(i
2022-01-18 18:46:20 286
原创 1054. The Dominant Color (20)
1054. The Dominant Color (20)题目大意选取主色调,就是M列N行的矩阵里面出现次数多余一半的那个数字。基本思路STL中map的应用~使用mp[i] = j表示i元素在矩阵中出现了j次,在输入的同时比较mp当前的值是否已经超过半数,如果超过,就直接输出该数字并退出程序。代码#include <cstdio>#include <iostream>#include <map>using namespace std;map<in
2022-01-17 21:50:46 194
原创 1039 Course List for Student (25 分)
1039 Course List for Student (25 分)题目大意有N个学生,K门课,给出选择每门课的学生姓名,并在唱吧给出N个学生的姓名,要求按顺序给出每个学生的选课情况基本思路考虑到string、cin、cout会超时,可以使用hash(262626*10+10)将学生姓名变为int型,然后存储在vector里面。代码#include <cstdio>#include <iostream>#include <cstring>#includ
2022-01-17 21:35:32 252
原创 1047 Student List for Course (25 分)
1047 Student List for Course (25 分)题目大意题目大意:给出选课人数和课程数目,然后再给出每个人的选课情况,请针对每门课程输出选课人数以及所有选该课的学生姓名,按照字典序。基本思路定义一个vector< string> v[2510];//下标是课程编号,值是选这门课的学生姓名。将每个学生的选课信息装入容器vector< string>v[2050];枚举i从1到m:输出每门课程的选课人数,对容器中的姓名(字符串)按字典序升序的排序,再输
2022-01-17 21:20:12 298
原创 1070 Mooncake (25 分)
1070 Mooncake (25 分)题目大意题目大意:N表示月饼种类,D表示月饼的市场最大需求量,给出每种月饼的数量和总价,问根据市场最大需求量,这些月饼的最大销售利润为多少~基本思路首先根据月饼的总价和数量计算出每一种月饼的单价,然后将月饼数组按照单价从大到小排序,根据需求量need的大小,从单价最大的月饼开始售卖,将销售掉这种月饼的价格累加到res中,最后输出res即可代码#include <bits/stdc++.h>using namespace std;int
2022-01-16 22:33:46 109
原创 1125. Chain the Ropes (25)
1125. Chain the Ropes (25)题目大意给定一段一段的绳子,你需要把它们串成一条绳。每次串连的时候,是把两段绳子对折,再如下图所示套接在一起。这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连。每次串连后,原来两段绳子的长度就会减半。给定N段绳子的长度,你需要找出它们能串成的绳子的最大长度分析分析:因为所有长度都要串在一起,每次都等于(旧的绳子长度+新的绳子长度)/2,所以越是早加入绳子长度中的段,越要对折的次数多,所以既然希望绳子长度是最长的,就必须让长的段对折
2022-01-16 21:14:19 100
原创 1113. Integer Set Partition (25)
1113. Integer Set Partition (25)题目大意要求把一个集合分成两个不相交的集合,使得这两个集合的元素个数相差最小的前提下,两个集合的总和之差最大基本思路先把集合内n个元素排序,计算前n/2个元素的总和,然后用总的总和sum - 2 * halfsum即为 |S1 - S2|。|n1 - n2|就是n % 2的结果,奇数为1,偶数为0。注意:总和sum的值其实可以在输入的时候就累加得到。代码#include <bits/stdc++.h>using n
2022-01-16 21:00:06 204
原创 1037 Magic Coupon (25 分)
1037 Magic Coupon (25 分)题目大意给出两个数字序列,从这两个序列中分别选取相同数量的元素进行一对一相乘,问能得到的乘积之和最大为多少基本思路把这两个序列都从小到大排序,将前面都是负数的数相乘求和,然后将后面都是正数的数相乘求和代码#include <bits/stdc++.h>using namespace std;int m,n;int main(){ cin>>m; vector<int> v1(m);
2022-01-16 20:17:38 137
原创 1038. Recover the Smallest Number (30)
1038. Recover the Smallest Number (30)题目大意给一些字符串,求它们拼接起来构成最小数字的方式基本思路不是按照字典序排列就可以的,必须保证两个字符串构成的数字是最小的才行,所以cmp函数写成return a + b < b + a;的形式,保证它排列按照能够组成的最小数字的形式排列。因为字符串可能前面有0,需要移除掉(用s.erase(s.begin())输出拼接后的字符串即可。注意:如果移出了0之后发现s.length() == 0了,说明这个数是0
2022-01-16 19:29:26 149
原创 1051 Pop Sequence (25 分)
1051 Pop Sequence (25 分)题目大意给出k个出栈序列,请你依次判断它们是否合法基本思路用堆栈模拟出入栈的过程,直接看注释就好。代码#include <bits/stdc++.h>using namespace std;int main(){ int m,n,k; cin>>m>>n>>k; while(k--){ int flag=0; //读入出栈序列
2022-01-15 20:32:54 176
原创 1101 Quick Sort (25 分)
1101 Quick Sort (25 分)题目大意题目大意:快速排序中,我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边。 给定划分后的N个互不相同的正整数的排列,请问有多少个元素可能是划分前选取的主元?例如给定N = 5, 排列是1、3、2、4、5。则:1的左边没有元素,右边的元素都比它大,所以它可能是主元;尽管3的左边元素都比它小,但是它右边的2它小,所以它不能是主元;尽管2的右边元素都比它大,但其左边的3比它大,所以它不能是主元;
2022-01-15 20:04:18 199
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人