当前位置: 首页 > news >正文

UVA230 Borrowers 图书管理系统 解题报告

题目链接

https://vjudge.net/problem/UVA-230

题目大意

你的任务是模拟一个图书管理系统。首先输入若干图书的标题和作者(标题各不相同,以END结束),然后是若干指令:BORROW指令表示借书,RETURN指令表示还书,SHELVE指令表示把所有已归还但还未上架的图书排序后依次插入书架并输出图书标题和插入位置(可能是第一本书或者某本书的后面)。

图书排序的方法是先按作者从小到大排,再按标题从小到大排。在处理第一条指令之前,你应当先将所有图书按照这种方式排序。

解题思路

用map< string, int >维护书名与书的状态之间的映射,1为在书架,2为借出,3为归还但不在书架,剩下的就全都是按照题意硬模拟,用最纯粹的,最朴素的,最丁真(bushi)的循环遍历是足够AC的,也就懒得想优化了,细节很多,具体参考代码和注释。

代码

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e3 + 10;
const int INF = 0x3fffffff;
const int mod = 1000000007;
struct Book {string title;string author;bool operator < (const Book &other) const {if (author == other.author)return title < other.title;return author < other.author;}
};
vector<Book> books;
map<string, int> state; // 书的状态,1为在书架,2为借出,3为归还但不在书架void solve() {string s, title, author;while (getline(cin, s), s != "END") {int pos = s.find("\"", 1);title = s.substr(1, pos);pos += 5;author = s.substr(pos);books.push_back({title, author});state[title] = 1;}sort(books.begin(), books.end());while (getline(cin, s), s != "END") {if (s[0] == 'B') {title = s.substr(8);state[title] = 2;} else if (s[0] == 'R') {title = s.substr(8);state[title] = 3;} else {for(int i = 0 ; i < books.size() ; i++) {if (state[books[i].title] == 3) {int j;for (j = i - 1; j >= 0; j--) {if (state[books[j].title] == 1) {break;}}cout << "Put \"" << books[i].title << " ";if (j != -1) {cout << "after \"" << books[j].title <<endl;} else {cout << "first" << endl;}state[books[i].title] = 1;}}cout << "END\n";}}
}int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout << fixed;cout.precision(18);solve();return 0;
}

相关文章:

  • 谈谈Python中的单元测试和集成测试
  • Docker内更新Jenkins详细讲解
  • 如何使用Arduino IDE对STM32F103C8T6进行编程
  • 比较好玩的车子 高尔夫6
  • TCP-IP详解卷一:协议——阅读总结
  • UML学习
  • ORAN C平面 Section Extension 22
  • Flutter之TabBar篇
  • hive管理之ctl方式
  • spring test配合junit4 实现单元测试
  • OpenAI曾转录100万小时视频数据,训练GPT-4
  • Java每日一题(三道同一类型的题)
  • 关于yolov8x-p2.yaml
  • 【算法刷题】八大排序算法总结(冒泡、选择、插入、二分插入、归并、快速、希尔、堆排序)
  • python-pytorch实现CBOW 0.5.000
  • 【剑指offer】让抽象问题具体化
  • 【译】理解JavaScript:new 关键字
  • 07.Android之多媒体问题
  • CODING 缺陷管理功能正式开始公测
  • codis proxy处理流程
  • ECMAScript6(0):ES6简明参考手册
  • HTML中设置input等文本框为不可操作
  • If…else
  • Java Agent 学习笔记
  • javascript面向对象之创建对象
  • JavaScript设计模式与开发实践系列之策略模式
  • java正则表式的使用
  • uva 10370 Above Average
  • 基于axios的vue插件,让http请求更简单
  • 检测对象或数组
  • 如何在 Tornado 中实现 Middleware
  • 实战|智能家居行业移动应用性能分析
  • 使用common-codec进行md5加密
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 走向全栈之MongoDB的使用
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #前后端分离# 头条发布系统
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (C++17) std算法之执行策略 execution
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (MATLAB)第五章-矩阵运算
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (剑指Offer)面试题34:丑数
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (转)Oracle存储过程编写经验和优化措施
  • (转)Windows2003安全设置/维护
  • (转)甲方乙方——赵民谈找工作
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .cn根服务器被攻击之后
  • .net core 3.0 linux,.NET Core 3.0 的新增功能