山东科技大学2020年6月1日作业题解

题目一: STL——灵活的线性表

Description

数组和链表是我们熟知的两种线性结构,但是它们不够灵活(不能同时实现直接插入、删除和访问操作),给你若干种操作,你能通过一种灵活的容器,实现它们的功能吗?
操作1:Build a b (产生一个大小为a的线性表,其值全部赋为b,每组样例仅出现一次,在起始行)
操作2:Modify a b (将线性表的第a个元素的值设为b)
操作3:Insert a b c (在线性表的第a个位置插入第b到第c个位置的所有元素)
操作4:Erase a b(删除线性表第a到第b个位置的所有元素)
操作5:Print a b (输出线性表的第a到第b个元素)
程序在执行操作5的时候要输出结果,格式如“[1]:3 [2]:4 [3]:5”([]内为线性表的位置,“:”后面为元素的值,不带引号,每组输出占一行)

Input

输入有多行,对应5个操作,以EOF结束

Output

见Sample

Sample Input

Build 10 1
Modify 2 2
Insert 3 1 2
Modify 6 4
Erase 3 5
Print 1 8

Sample Output

[1]:1 [2]:2 [3]:4 [4]:1 [5]:1 [6]:1 [7]:1 [8]:1

HINT

使用vector可以很容易解决

标程

#include<map>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<iomanip>
#include<cstring>
#include<iterator>
#include<iostream>
#include<algorithm>
#define R register
#define LL long long
#define pi 3.141
#define INF 1400000000
using namespace std;int main() {string s;vector<int> v;while (cin >> s) {int n, m, k;if (s == "Build") {scanf("%d%d", &n, &m);v.assign(n, m);}else if (s == "Modify") {scanf("%d%d", &n, &m);v.erase(v.begin() + n - 1), v.insert(v.begin() + n - 1, m);}else if (s == "Insert") {scanf("%d%d%d", &n, &m, &k);v.insert(v.begin() + n - 1, v.begin() + m - 1, v.begin() + k);}else if (s == "Erase") {scanf("%d%d", &n, &m);v.erase(v.begin() + n - 1, v.begin() + m);}else {scanf("%d%d", &n, &m);for (R int i = n - 1; i < m; ++i) {if (i != m - 1) {printf("[%d]:%d ", i + 1, v[i]);}else {printf("[%d]:%d\n", i + 1, v[i]);}}}}return 0;
}

题目二: STL——集合运算

Description

集合的运算就是用给定的集合去指定新的集合。设A和B是集合,则它们的并差交补集分别定义如下:
A∪B={x|x∈A∨x∈B}
A∩B={x|x∈A∧x∈B}
A-B={x|x∈A∧x不属于 B}
SA ={x|x∈(A∪B)∧x 不属于A}
SB ={x|x∈(A∪B)∧x 不属于B}

Input

第一行输入一个正整数T,表示总共有T组测试数据。(T<=200)
然后下面有2T行,每一行都有n+1个数字,其中第一个数字是n(0<=n<=100),表示该行后面还有n个数字输入。

Output

对于每组测试数据,首先输出测试数据序号,”Case #.NO”,
接下来输出共7行,每行都是一个集合,
前2行分别输出集合A、B,接下5行来分别输出集合A、B的并(A u B)、交(A n B)、差(A – B)、补。
集合中的元素用“{}”扩起来,且元素之间用“, ”隔开。

Sample Input

1
4 1 2 3 1
0

Sample Output

Case# 1:
A = {1, 2, 3}
B = {}
A u B = {1, 2, 3}
A n B = {}
A - B = {1, 2, 3}
SA = {}
SB = {1, 2, 3}

标程

#include<set>
#include<map>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<iomanip>
#include<cstring>
#include<iterator>
#include<iostream>
#include<algorithm>
#define R register
#define LL long long
#define pi 3.141
#define INF 1400000000
using namespace std;int main() {int T, count = 0;cin >> T;while (T--) {set<int> s1, s2, s3, s4, s5, s6, s7;set<int>::iterator it;int n;cin >> n;for (R int i = 0; i < n; ++i) {int number;cin >> number;s1.insert(number);}cin >> n;for (R int i = 0; i < n; ++i) {int number;cin >> number;s2.insert(number);}printf("Case# %d:\n", ++count);printf("A = {");for (it = s1.begin(); it != s1.end(); ++it) {if (it == s1.begin()) {cout << *it;}else {cout << ", " << *it;}}printf("}\n");printf("B = {");for (it = s2.begin(); it != s2.end(); ++it) {if (it == s2.begin()) {cout << *it;}else {cout << ", " << *it;}}printf("}\n");set_union(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s3, s3.begin()));printf("A u B = {");for (it = s3.begin(); it != s3.end(); ++it) {if (it == s3.begin()) {cout << *it;}else {cout << ", " << *it;}}printf("}\n");set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s4, s4.begin()));printf("A n B = {");for (it = s4.begin(); it != s4.end(); ++it) {if (it == s4.begin()) {cout << *it;}else {cout << ", " << *it;}}printf("}\n");set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s5, s5.begin()));printf("A - B = {");for (it = s5.begin(); it != s5.end(); ++it) {if (it == s5.begin()) {cout << *it;}else {cout << ", " << *it;}}printf("}\n");set_difference(s3.begin(), s3.end(), s1.begin(), s1.end(), inserter(s6, s6.begin()));printf("SA = {");for (it = s6.begin(); it != s6.end(); ++it) {if (it == s6.begin()) {cout << *it;}else {cout << ", " << *it;}}printf("}\n");set_difference(s3.begin(), s3.end(), s2.begin(), s2.end(), inserter(s7, s7.begin()));printf("SB = {");for (it = s7.begin(); it != s7.end(); ++it) {if (it == s7.begin()) {cout << *it;}else {cout << ", " << *it;}}printf("}\n");}return 0;
}

题目三: STL——Jerry的问题

Description

最近Jerry正在刻苦的学习STL中的set的功能函数,他发现set可以用现有的函数实现并、交、差、对称差等功能,但是他没有找到怎么来比较两个集合是否相等的功能函数,所以他想自己用其他的功能函数来实现能判断两个集合是否相等的功能函数。聪明的Jerry不一会就想到了解决办法,现在他想拿这道题来考考你,看你有没有他聪明。

Input

输入有多组,每组数据有两行,每一行都代表一个集合,每一行有若干个正整数(0<d<=2147483647),并且每行的最后一个数字都是0,代表该行数据的结束,且末尾的0不计入集合中。最后以EOF结束输入。

Output

对于每组数据输出都要输入一个结果,如果两个集合相等便输出“YES”,否则输出“NO”,每个结果占一行

Sample Input

1 2 3 4 0
1 2 3 4 0
1 2 2 2 2 2 0
1 2 0
1 2 3 4 0
1 3 3 4 0

Sample Output

YES
YES
NO

标程

#include<set>
#include<map>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<iomanip>
#include<cstring>
#include<iterator>
#include<iostream>
#include<algorithm>
#define R register
#define LL long long
#define pi 3.141
#define INF 1400000000
using namespace std;int main() {int N;set<int> s1, s2, s3;while (cin >> N) {if (N) {s1.insert(N);while (cin >> N && N) {s1.insert(N);}}while (cin >> N && N) {s2.insert(N);}set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s3, s3.begin()));if (s3.empty()) {printf("YES\n");}else {printf("NO\n");}s1.clear (), s2.clear(), s3.clear();}return 0;
}

题目四: STL——表达式求值

Description

给出一个表达式,求出其值。表达式中只存在 +、-、*、三种运算,我们假设表达式是正确的,
且不存在除数为零的情况。

Input

第一行输入一个正整数 n(1<=n<=30) ,表示有表达式 n 个数(每个数均小于100),表达式中只有数值(都是大于零的数)
和运算符(包括+、-、*、=四种运算符,其中 = 只在表达式最后,表示一个表达式输出结束,且整个表达式不存在空格)

Output

表达式的值(表达式的值不会超出 double 的范围并保留两位小数)

Sample Input

5
12345=
5
5-1-2+3+4=

Sample Output

120.00
9.00

标程

#include<set>
#include<map>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<iomanip>
#include<cstring>
#include<iterator>
#include<iostream>
#include<algorithm>
#define R register
#define LL long long
#define pi 3.141
#define INF 1400000000
using namespace std;int main() {int N;char c;double answer = 0, number;while (cin >> N) {cin >> number;answer = 0, N -= 1;stack<double> num;num.push(number);while (N--) {cin >> c >> number;if (c == '+') {num.push(number);}else if (c == '-') {num.push(-number);}else if (c == '*') {number *= num.top();num.pop();num.push(number);}}cin >> c;while (!num.empty()) {answer += num.top(), num.pop();}printf("%.2lf\n", answer);}return 0;
}

题目五: STL——括号匹配

Description

给出一堆括号,看其是否匹配,例如 ()、()()、(()) 这样的括号就匹配,
)(、)()) 而这样的括号就不匹配

Input

每一行代表一组测试样例,每组测试样例只包含’(‘和’)’,样例长度不超过100个字符

Output

如果所有的括号都匹配,那么输出YES,否则输出NO

Sample Input

()
)(

Sample Output

YES
NO

标程

#include<set>
#include<map>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<iomanip>
#include<cstring>
#include<iterator>
#include<iostream>
#include<algorithm>
#define R register
#define LL long long
#define pi 3.141
#define INF 1400000000
using namespace std;int main() {char s[105];while (cin >> s) {int length = strlen(s);stack<char> Stack;for (R int i = 0; i < length; ++i) {if (Stack.empty()) {Stack.push(s[i]);}else {if (Stack.top() == '(' && s[i] == ')') {Stack.pop();}else {Stack.push(s[i]);}}}if (Stack.empty()) {printf("YES\n");}else {printf("NO\n");}}return 0;
}

题目六: STL——字典

Description

输入n个字符串对(str1,str2),再输入k个查询字符串str,从字符串对中查找查询字符串,即如果str=str2,则输出str1,如果查询不到则输出"eh"(不包含引号)。输入保证所有字符串对的str2不相同,字符串只含有字母和数字,长度小于20!

Input

输入包含多组数据,直到文件结尾。

每组数据第一行包含一个整数n(0≤n≤10^5)。接下来n行,每行描述一个字符串对。

接下来包含一个整数m(0≤m≤10^5)。接下来m行,每行描述一个查询字符串。

见样例

Output

输出每个查询的结果。

Sample Input

5
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay
3
atcay
ittenkay
oopslay

Sample Output

cat
eh
loops

标程

#include<set>
#include<map>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<iomanip>
#include<cstring>
#include<iterator>
#include<iostream>
#include<algorithm>
#define R register
#define LL long long
#define pi 3.141
#define INF 1400000000
using namespace std;int main() {int N;while (cin >> N) {map<string, string> maps;while (N--) {string s1, s2;cin >> s1 >> s2;maps[s2] = s1;}cin >> N;while (N--) {string s;cin >> s;map<string, string> :: iterator it = maps.find(s);if (it == maps.end()) {cout << "eh\n";}else {cout << maps[s] << "\n";}}}return 0;
}

题目七: STL——水果店

Description

小明经营着一个不大的水果店.现在他想要一份水果销售情况的明细表,这样就可以很容易掌握所有水果的销售情况了.

Input

输入包含多组数据.每组测试数据的第一行是一个整数M(0<M<=100),表示有M次成功的交易.其后有M行数据,每行表示一次交易,由水果名称(长度不超过80)和交易的水果数目(正整数,不超过100)组成.

Output

对于每一组测试数据,请你输出一份排版格式正确(请分析样本输出)的水果销售情况明细表.这份明细表包括所有水果的名称和其销售总数的信息.按照水果名称排序。格式见样例!

Sample Input

3
apple 3
sugarcane 1
pineapple 3

Sample Output

apple:3
pineapple:3
sugarcane:1

标程

#include<set>
#include<map>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<iomanip>
#include<cstring>
#include<iterator>
#include<iostream>
#include<algorithm>
#define R register
#define LL long long
#define pi 3.141
#define INF 1400000000
using namespace std;int main() {int N;while (cin >> N) {map<string, int> sale_list;while (N--) {string s;int number;cin >> s >> number;sale_list[s] += number;}for (R map<string, int> ::iterator it = sale_list.begin(); it != sale_list.end(); ++it) {cout << it->first << ":" << it->second << "\n";}}return 0;
}

题目八: STL——字符串排序

Description

对N个字符串排序。
0<N<=50000。每个字符串长度不超过50000,所有字符串长度总和不超过1000000。

Input
第一行读入N。
后面N行,每行一个字符串(只包含字母)。

Output

输出共N行,按字典序从小到大输出。

Sample Input

5
bcdef
qwer
tyuiphdjf
asdfghjklzzzz
z

Sample Output

asdfghjklzzzz
bcdef
qwer
tyuiphdjf
z

标程

#include<set>
#include<map>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<iomanip>
#include<cstring>
#include<iterator>
#include<iostream>
#include<algorithm>
#define R register
#define LL long long
#define pi 3.141
#define INF 1400000000
using namespace std;string s[51000];int main() {int N, count = 0;cin >> N;while (N--) {cin >> s[count];++count;}sort(s, s + count);for (R int i = 0; i < count; ++i) {cout << s[i] << "\n";}return 0;
}

山东科技大学2020年6月1日作业题解相关推荐

  1. 2019年10月18日作业题解

    讲真题目质量很低,各种莫名其面的细节,有的题目提交三四遍都过不了.... 口区... 顺便写个题解吧QWQ A题2的多少次幂 Description 从键盘输入一个数x,x是2的整数次幂(x=2^y) ...

  2. 【财经期刊FM-Radio|2020年11月19日】

    title: [财经期刊FM-Radio|2020年11月19日] 微信公众号: 张良信息咨询服务工作室 [今日热点新闻一览↓↓] 疫苗利好不敌疫情担忧,美股盘中转跌,特斯拉再逆市大涨,人民币和比特币 ...

  3. 大江论坛服务器维护,2020年9月22日定期维护解读

    [本周内容] [全部服务器放出内容]1.2020"群雄逐鹿(X9精英争霸赛)"第六赛季决赛第六轮"冠军争夺战"(精锐.勇武.神威.天科.天启.天元组)将于202 ...

  4. 今日新闻大事件 2020年11月25日 星期三

    今日新闻大事件汇总,热点新闻简短汇总,就在365资讯简报,每日推送12条新闻大事件和一条励志语录.60s读懂世界 [365资讯简报]每天一分钟,知晓天下事! 2020年11月25日 星期三 农历十月十 ...

  5. MongoDB Server 3.4版本将于2020年1月31日停止支持

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「Mongoing中文社区」 Mongo ...

  6. 2021考研时间公布 2020年12月26日至27日进行初试

    中新网客户端9月4日电 记者从教育部获悉,2021年全国硕士研究生招生考试初试时间,安排在2020年12月26日至27日(每天上午8:30-11:30,下午14:00-17:00),超过3小时或有使用 ...

  7. 全国各地区最低工资标准情况(截至2020年3月31日)

    人社部网站4月26日发布全国各地区最低工资标准情况(截至2020年3月31日),数据显示,上海月最低工资标准最高,为2480元:北京为2200元,广东为2100元,其中深圳为2200元.

  8. Python之pyecharts:利用pyecharts绘制2020年11月16日微博话题热度排行榜实时变化

    Python之pyecharts:利用pyecharts绘制2020年11月16日微博话题热度排行榜实时变化 目录 利用pyecharts绘制2020年11月16日微博话题热度排行榜实时变化 Bar( ...

  9. AI:2020年7月10日世界人工智能大会WAIC青少年人工智能创新发展论坛《人工智能从娃娃抓起》

    AI:2020年7月10日世界人工智能大会WAIC青少年人工智能创新发展论坛<人工智能从娃娃抓起> 导读:教育是生态系统,包括北大清华的本硕博正在逐设人工智能课程,五年以后,中国将会迈向人 ...

最新文章

  1. 笔记本电脑无线被禁用 是哪个服务器,无线网关,小编教你笔记本无线网络禁用后怎么开启...
  2. CDR配置助手 1.0 绿色免费版
  3. Py之xlwt:python库之xlwt的简介、安装、使用方法之详细攻略
  4. 4.1 Qt绘图原理
  5. ffmpeg avformat_open_input返回失败的解决办法
  6. Command Magicks:如何使用控制台处理文件和字符串
  7. JS之颠倒数组元素的reverse方法
  8. C 和 C++ 宏 详解
  9. Redis各个数据类型的使用场景
  10. sklearn 文本处理
  11. android selector 开始自定义样式
  12. storm流式处理框架
  13. 基于javaweb+mysql数据库实现的宠物领养|流浪猫狗网站项目源代码
  14. 手机12306买卧铺下铺技巧_手机12306怎么买下铺(微信买火车票指定下铺)
  15. deeping linux下安装配置nginx+django
  16. 后台管理导航菜单及模板
  17. 电脑格式化恢复|电脑格式化数据如何恢复?
  18. QQ抢车位游戏PhysicalDataModel
  19. event是什么?事件对象
  20. 浮点型数据单片机传输

热门文章

  1. 如何引流中老年粉?中老年人群怎么引流?中老年粉如何变现?
  2. 关于正确处理0x80070426等错误的方法
  3. 解决蓝牙鼠标和电脑连接出现卡顿的情况
  4. 层次模型的概念,举出三个层次模型的实例!
  5. 拼多多店铺类型区别介绍
  6. 【信息系统项目管理师】第七章 项目成本管理(考点汇总篇)
  7. centos7FastDFS分布式安装部署
  8. PHP-CGI远程代码执行
  9. 04.Nginx代理(学习)
  10. GITHUB下载慢解决办法-插件解决