QFNU-11.08training
7-1 阅览室
题目:
天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。
注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。
代码:

1 #include<bits/stdc++.h>
2 using namespace std;
3 int main()
4 {
5 int a, b, book, ans = 0, k = 0, day;
6 char se[5];
7 map<int,int> m;
8 cin >> day;
9 while(day)
10 {
11 scanf("%d", &book);
12 scanf("%s%d:%d", &se, &a, &b);
13 if(book > 0)
14 {
15 if(se[0] == 'S')
16 m[book] = a * 60 + b;
17 else if(se[0] == 'E')
18 {
19 if(m.find(book) != m.end())
20 {
21 ans += a * 60 + b - m[book];
22 k++;
23 m.erase(book);
24 }
25 }
26 }
27 else
28 {
29 if(k != 0)
30 cout << k << " " << (int)(1.0 * ans / k + 0.5) << endl;
31 else
32 cout << "0 0" << endl;
33 k = 0;
34 ans = 0;
35 m.clear();
36 day--;
37 }
38 }
39 return 0;
40 }
思路:就是用map数组进行操作,而且进行时间操作的时候记得全部转换为分钟进行计算,也就是小时记得乘以60
注意:第一次用struct做的wa掉的点是同一本书被借多次,有不匹配,所以在用数组进行循环遍历的时候,排除多余的S或者E的时候是错的
7-9 树的遍历
题目:给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。
代码:

1 #include<stdio.h>
2 #include<string.h>
3 #include<queue>
4 #include<stdlib.h>
5 #include<iostream>
6 using namespace std;
7 int btree[100]={0};//用于承装后续遍历的数字
8 int ctree[100]={0};//用于承装中序遍历的数据
9 struct node
10 {
11 node *l;
12 node *r;
13 int data;
14 };
15
16 int num=0;
17 int n;
18 node *creattree(int btree[],int ctree[],int n)//反向推算创建二叉树,注意这是指针
19 {
20 if(n<=0) return NULL;
21 node *T=new node();
22 int root=btree[n-1];//找到根节点
23 int k;
24 T->data=root;//创建树的节点
25 for(int i=0;i<n;i++)//由于中序遍历使两边分开
26 {
27 if(ctree[i]==root)
28 {
29 k=i;
30 break;
31 }
32 }
33 T->l=creattree(btree,ctree,k);//左子树
34 T->r=creattree(btree+k,ctree+k+1,n-(k+1));//右子树
35 return T;
36 }
37 void print(node *T)//层次遍历输出二叉树
38 {
39 node *p;//为中间变量
40 node *pr[100];
41 int rear=-1,front=-1;
42 rear++;
43 pr[rear]=T;//将根节点放入到队列之中
44 while(rear!=front)
45 {
46 front++;
47 p=pr[front];//用来读取数据
48 cout<<p->data;
49 num++;//用来控制空格的输出,最后一位不用空格
50 if(num<n)
51 cout<<" ";
52 if(p->l!=NULL)
53 {
54 rear++;
55 pr[rear]=p->l;
56 }
57 if(p->r!=NULL)
58 {
59 rear++;
60 pr[rear]=p->r;
61 }
62 }
63 }
64 //个人理解,rear是用来存取数据的,而front是跟着屁股后面来输出的
65 int main()
66 {
67 int N;
68 int j,k,l;
69 cin>>N;
70 n=N;
71 for(j=0;j<N;j++)
72 {
73 cin>>btree[j];
74 }
75 for(j=0;j<N;j++)
76 {
77 cin>>ctree[j];
78 }
79 node *T=creattree(btree,ctree,n);
80 print(T);
81 return 0;
82
83 }
思路:可以多看看数据结构树上的描写进行想,然后用指针,结构体进行理解,暂时还没有理解,但想先存下来然后记记板子
7-10 关于堆的判断
将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种:
x is the root:x是根结点;x and y are siblings:x和y是兄弟结点;x is the parent of y:x是y的父结点;x is a child of y:x是y的一个子结点。
题目:
代码:

1 #include<iostream>
2 #include<cmath>
3 #include<cstring>
4 #include<string>
5 #include<cstdio>
6 #include<algorithm>
7 #include<set>
8 #include<queue>
9 #include<stack>
10 #define MAX_VERTS 500
11 using namespace std;
12 int num[10000] = {0};
13 void createHael(int len){
14 for(int i = len/2-1; i >= 0; i--){
15 if(num[i]>num[2*i+1]){
16 int temp = num[i];
17 num[i] = num[2*i+1];
18 num[2*i+1] = temp;
19 if(2*(2*i+1)+1<len&&num[2*i+1]>num[2*(2*i+1)+1]||2*(2*i+1)+2<len&&num[2*i+1]>num[2*(2*i+1)+2]){
20 createHael(len);
21 }
22 }
23 if(num[i]>num[2*i+2]){
24 int temp = num[i];
25 num[i] = num[2*i+2];
26 num[2*i+2] = temp;
27 if(2*(2*i+2)+1<len&&num[2*i+2]>num[2*(2*i+2)+1]||2*(2*i+2)+2<len&&num[2*i+2]>num[2*(2*i+2)+2]){
28 createHael(len);
29 }
30 }
31 // for(int j = 0; j < len; j++){
32 // cout << num[j] << " ";
33 // }
34 // cout << endl;
35 }
36 }
37
38 int find(int t,int n){
39 for(int i = 0; i < n; i++){
40 if(num[i]==t){
41 return i;
42 }
43 }
44 }
45 int main(){
46 int n, m, a, b;
47 string s1,s2,s3,s4,s5,s6;
48 cin >> n >> m;
49 for(int i = 0; i < n; i++){
50 cin >> num[i];
51 createHael(i);
52 }
53
54 for(int i = 0; i < m; i++){
55 cin >> a >> s1;
56 if(s1=="and"){
57 cin >> b >> s2 >> s3;
58 if(ceil(find(a,n)*1.0/2)-1==ceil(find(b,n)*1.0/2)-1){
59 cout << "T" << endl;
60 }else{
61 cout << "F" << endl;
62 }
63 }else{
64 cin >> s2;
65 if(s2=="a"){
66 cin >> s3 >> s4 >> b;
67 if(ceil(find(a,n)*1.0/2)-1==find(b,n)){
68 cout << "T" << endl;
69 }else{
70 cout << "F" << endl;
71 }
72 }else{
73 cin >> s3;
74 if(s3=="root"){
75 if(find(a,n)==0){
76 cout << "T" << endl;
77 }else{
78 cout << "F" << endl;
79 }
80 }else{
81 cin >> s4 >> b;
82 if(ceil(find(b,n)*1.0/2)-1==find(a,n)){
83 cout << "T" << endl;
84 }else{
85 cout << "F" << endl;
86 }
87 }
88 }
89 }
90 }
91 return 0;
92 }
思路:先理解小根堆是什么,然后用二叉树下标的关系,用本下标i和i/2进行比较,多次进行比较,直到不能比较,或者本来就是这个位置最大
QFNU-11.08training的更多相关文章
- 地区sql
/*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : lo ...
- WinForm 天猫2013双11自动抢红包【源码下载】
1. 正确获取红包流程 2. 软件介绍 2.1 效果图: 2.2 功能介绍 2.2.1 账号登录 页面开始时,会载入这个网站:https://login.taobao.com/member/login ...
- C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)
#include <iostream> using namespace std; int main() { using cullptr = const unsigned long long ...
- CSS垂直居中的11种实现方式
今天是邓呆呆球衣退役的日子,在这个颇具纪念意义的日子里我写下自己的第一篇博客,还望前辈们多多提携,多多指教! 接下来,就进入正文,来说说关于垂直居中的事.(以下这11种垂直居中的实现方式均为笔者在日常 ...
- C++ 11 多线程--线程管理
说到多线程编程,那么就不得不提并行和并发,多线程是实现并发(并行)的一种手段.并行是指两个或多个独立的操作同时进行.注意这里是同时进行,区别于并发,在一个时间段内执行多个操作.在单核时代,多个线程是并 ...
- CSharpGL(11)用C#直接编写GLSL程序
CSharpGL(11)用C#直接编写GLSL程序 +BIT祝威+悄悄在此留下版了个权的信息说: 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharp ...
- ABP(现代ASP.NET样板开发框架)系列之11、ABP领域层——仓储(Repositories)
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之11.ABP领域层——仓储(Repositories) ABP是“ASP.NET Boilerplate Proj ...
- C++11 shared_ptr 智能指针 的使用,避免内存泄露
多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...
- C++11网络编程
Handy是一个简洁优雅的C++11网络库,适用于linux与Mac平台.十行代码即可完成一个完整的网络服务器. 下面是echo服务器的代码: #include <handy/handy.h&g ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(11)-系统日志和异常的处理①
系列目录 系统需要越来越自动化,我们需要引入日志记录和异常捕获管理员的操作记录需要被记录,看出哪些模块是频繁操作,分析哪些是不必要的功能,哪些是需要被优化的.系统的异常需要被捕获,而不是将系统出错显示 ...
随机推荐
- Harry And Magic Box HDU - 5155
题目链接:https://vjudge.net/problem/HDU-5155#author=0 题意:在一个n*m的方格中要满足每一行每一列至少有一个珠宝,问总共有多少种方案. 思路:利用递推的思 ...
- [倍增]luogu P4155 [SCOI2015]国旗计划
题面 https://www.luogu.com.cn/problem/P4155 问在环上最少取多少个区间能完全覆盖环 分析 首先发现是环,先把端点变为2n方便处理,注意离散化 其次要删去贡献不如其 ...
- Hive中静态分区和动态分区总结
目录 背景 第一部分 静态分区 第二部分 动态分区 第三部分 两者的比较 第四部分 动态分区使用的问题 参考文献及资料 背景 在Hive中有两种类型的分区:静态分区(Static Partitioni ...
- SqlServer触发器的创建与使用
前言 上期我们介绍了SqlServer的视图和存储过程创建与使用,这期我们介绍一下触发器. 有需要回顾的可以电梯直达看一下: SqlServer视图的创建与使用 SqlServer存储过程的创建与使用 ...
- 量体裁衣方得最优解:聊聊页面静态化架构和二级CDN建设
量体裁衣方得最优解:聊聊页面静态化架构和二级CDN建设 上期文章中我们介绍了CDN和云存储的实践,以及云生态的崛起之路,今天,我们继续聊一聊CDN. 我们通常意义上讲的CDN,更多的是针对静态资源类的 ...
- 痞子衡嵌入式:从头开始认识i.MXRT启动头FDCB里的lookupTable
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT启动头FDCB里的lookupTable. 一个MCU内部通常有很多外设模块,这些外设模块是各MCU厂商做差异化产品的本质, ...
- [Fundamental of Power Electronics]-PART II-7. 交流等效电路建模-7.5 状态空间平均 7.6 本章小结
7.5 状态空间平均 现有文献中已经出现了很多变换器交流建模的方法,其中包括电流注入法,电路平均和状态空间平均法.尽管某种特定方法的支持者可能更愿意使用该方法去建模,但所有方法的最终结果都是等效的.并 ...
- vs2019新建数据库后插入中文变问号
在使用VS创建了数据库后如果直接给字符类型插入中文内容的话查询结果插入的中文会以"?"的格式展现. 原因是因为默认创建的数据库的排序类型为拉丁文不支持中文. 所以需要讲这个排序的字 ...
- 2020 OO 第三单元总结 JML语言
title: 2020 OO 第三单元总结 date: 2020-05-21 10:10:06 tags: OO categories: 学习 第三单元终于结束了,这是我目前为止最惨的一单元,第十次作 ...
- (四)Struts2的Action(深入讲解版)
Struts2的Action 开发者需要提供大量的Action,并在struts.xml中配置Action.Action类里包含了对用户请求的处理逻辑,因为我们也称Action为业务控制器. 一.编写 ...