UVA 230 Borrowers(vector和map的应用,模拟)

 1 //#include<bits/stdc++.h>
 2 #include<cstdio>
 3 #include<queue>
 4 #include<algorithm>
 5 #include<cstring>
 6 #include<string>
 7 #include<iostream>
 8 using namespace std;
 9 typedef long long ll;
10 /**
11     题意:SHELVE指令表示把所有已归还但还未上架的图书排序后依次插入书架
12             排序方法:先作者从小到大,再标题从小到大
13        需要用到一些string类的方法  ,如果用C,需要用到cstring的一些方法
14     思路:
15         结构体Book保存信息,status表示图书状态,放入vector中
16
17     上面那个思路龊了,但因为懒,代码就不改了
18     **************
19     :加入用vector保存图书信息,在还书和借书改变status时,需要遍历vector,妈呀太浪费资源了
20     正确的姿势应该是
21         用vector<string> title 保存书名
22         用map<string,book> books    K:书名  V:book中存放 author和 status
23         这样在排序vector时:vector用 map里的信息排序
24             bool compare(string a, string b){
25                 if(books[a].author == books[b].author) return a < b;
26                 else return books[a].author < books[b].author;
27             }
28         SHELVE操作时候
29             for(int i = 0; i < title.size(); i++)
30                 if(books[title[i]].status == 0){
31                     int j;
32                     for(j = i; j >= 0; --j)
33                         if(books[title[j]].status == 1) break;
34                 }
35 */
36 struct Book{
37     string title;
38     string author;
39     int status;
40 };
41 bool cmp(Book b1,Book b2){
42     if(b1.author == b2.author)
43         return b1.title < b2.title;
44     return b1.author < b2.author;
45 }
46 vector<Book> vec;
47 int main(){
48
49     string str,op,name,title,author;
50     while(getline(cin,str)){
51         if(str == "END") break;
52         int pos = str.find_last_of("\"");
53         title = str.substr(0,pos+1);    //不包含pos
54         author = str.substr(pos+5);     //包含pos
55         Book tmp; tmp.author = author; tmp.title = title;
56         tmp.status = 1;
57         vec.push_back(tmp);
58     }
59     sort(vec.begin(),vec.end(),cmp);
60     while(cin >> op){
61         if(op == "END") break;
62         getchar();
63         if(op == "BORROW"){
64             getline(cin,name);
65             for(int i = 0 ; i < vec.size() ; i ++){
66                 if(vec[i].title == name){
67                     vec[i].status = -1;
68                     break;
69                 }
70             }
71         }else if(op == "RETURN"){
72             getline(cin,name);
73             for(int i = 0 ; i < vec.size() ; i ++){
74                 if(vec[i].title == name){
75                     vec[i].status = 0;
76                     break;
77                 }
78             }
79         }else if(op == "SHELVE"){
80             for(int i = 0 ; i < vec.size() ; i ++){
81                 int index1 = 0 , index2 = -1;
82                 if(vec[i].status == 0){
83                     index1 = i;
84                     for(int j = index1 - 1 ; j >= 0 ; j --){
85                         if(vec[j].status == 1){
86                             index2 = j;
87                             break;
88                         }
89                     }
90                     if(index2 == -1) cout << "Put " << vec[index1].title << " first" << endl;
91                     else    cout << "Put " << vec[index1].title << " after " << vec[index2].title << endl;
92                     vec[index1].status = 1;
93                 }
94             }
95             cout << "END" << endl;
96         }
97     }
98     return 0;
99 }
时间: 2024-10-14 12:46:09

UVA 230 Borrowers(vector和map的应用,模拟)的相关文章

uva 230 Borrowers(摘)&lt;vector&gt;&quot;结构体“ 膜拜!

I mean your borrowers of books--those mutilators of collections, spoilers of the symmetry of shelves, and creators of odd volumes. --Charles Lamb, Essays of Elia (1823) 'The Two Races of Men' Like Mr. Lamb, librarians have their problems with borrowe

UVA 230 Borrowers (STL 行读入的处理 重载小于号)

题意: 输入若干书籍和作者名字,然后先按作者名字升序排列,再按标题升序排列,然后会有3种指令,BORROW,RETURN, SHELVE. BORROW 和 RETURN 都会带有一个书名在后面,如: BORROW "The Canterbury Tales"RETURN "The Canterbury Tales" 当遇到SHELVE指令,输出已还但没上架的书排序后(规则同上)依次插入书架的序列. 用例: 输入: "The Canterbury Tale

【UVA】230 - Borrowers(map模拟)

利用map<string,int>判断一本书的状态,0代表借出去了,1代表在书架,2代表借出去换回来但是还未放回书架 设计一些字符串的处理问题,用一些字符串搜索函数比如 strstr , strchar等等 14072706 230 Borrowers Accepted C++ 0.015 2014-08-21 02:59:27 AC代码: #include<cstdio> #include<cstring> #include<iostream> #incl

[UVA 12589]Learning Vector[DP]

题目链接:[UVA 12589]Learning Vector[DP] 题意分析:给出n个矢量,从中选择k个,以坐标原点为起点,收尾相连,问:这样的k个周围相连矢量与x轴围成图形的最大面积的两倍是多少? 解题思路:考虑状态:dp[id][pick][h]代表到第id个矢量为止,选择pick个矢量离最大面积还差多少,h为当前图形最右端高度.具体转移看代码. 这里着重说一下为什么要对这些矢量按斜率进行排序: 首先,整个求解过程其实就是在暴力枚举这些向量的组合,只不过采用了记忆化搜索优化. 其次,对于

10、Cocos2dx 3.0游戏开发找小三之容器篇:Vector、Map、Value

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27705613 容器 3.0版本之前Cocos2d-x 引擎为我们提供了 CCArray. CCDictionary 等 Objective-C 风格的容器: 使用 Cocos2d-x 容器的一个重要原因在于 Cocos2d-x 的内存管理. 一般来说,被存入容器的对象在移除之前都应该保证是有效的, 但值得注意的是,在v3.0 beta版本中加入了数据结

cocos2dx 3.x Value、Vector和Map的认识

1. Value cocos2d::Value 是一个包含了很多原生类型(int,float,double,bool,unsigned char,char* 和 std::string)外 加std::vector<Value>, std::unordered_map<std::string,Value> 和 std::unordered_map<int,Value> 的类. 你可以把所有上面的提及的原生类型放入 cocos2d::Value 对象中,然后将它们转化为对

C++回顾 统计词频问题 -- vector、map、hash_map(三种方式时间比较)

本博文我们通过三个程序比较统计词频问题的时间复杂度问题: 问题描述; 1).找一篇文章,将所有单词输入至程序:(The Bible Holy为例) 2).统计出每个单词的数量,即词频问题: 3).增加停用词功能:(遇到此类词,直接略过)(网上搜) 4).分别统计出读取文件并计算词频时间.排序所用时间: 5).用 类 实现各函数(处统计时间的函数除外). vector.map.hash_map 都要处理字符串的 去除标点符号.将大写字母转换成小写字母.不对数字进行统计 问题.因此,我们可以将处理这

UVA - 10895Matrix Transpose(vector)

题目:UVA - 10895Matrix Transpose(vector) 题目大意:给出一个矩阵求它的转置矩阵. 解题思路:因为数组可以达到10000 * 10000 然后里面非0的数最多1000,所以用vector数组来存储. 代码: #include <cstdio> #include <cstring> #include <vector> using namespace std; const int N = 10005; struct Mat { int th

Java中List,ArrayList、Vector,map,HashTable,HashMap区别用法

Java中List,ArrayList.Vector,map,HashTable,HashMap区别用法 标签: vectorhashmaplistjavaiteratorinteger ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动 等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,Linke