UVa 230 Borrowers
来源:互联网 发布:淘宝店铺显示的是昵称 编辑:程序博客网 时间:2024/05/22 10:45
这个题我用了三个map表,就是下面三个(~orz,看起来有点多):
typedef pair<string, string> PLL; //作者,书名map<PLL, int> s; //图书馆的所有书,value为0表示已借,为1表示未借map<string, string> d; //一个索引 d[书名] = 作者名map<PLL, int> re; //表示目前归还,还未上书架的书。
首先解释一下为什么要使用pair<string, string>
,这是为了简单,题目要求图书的排序方法是先按作者从大到小,再按标题从小到到排。所以我们把作者设置为pair的第一个元素,书名设置为第二个元素。这样一来我们使用map<PLL, int>
来存储所有数据,map就会自动按照上面那个顺序排好。
(这是因为map自动对key进行排序,而我们这个的key为pair类型,pair类型比较时有个特点,就是先比较第一个元素,若一样再比较第二个元素。这个pair中的元素全为string类型,string类型有自定义好的比较运算符,所以这样一来我只须往map表中存元素就行,不用担心顺序问题)
接下来是main函数 :
int main() { string buf; while(getline(cin, buf) && buf != "END") { size_t a = buf.find("by"); PLL p = make_pair(buf.substr(a), buf.substr(0, a-1)); s[p] = 1; d[buf.substr(0, a-1)] = buf.substr(a); } string str1, str2; while(getline(cin, str1) && str1 != "END") { if(str1[0] == 'S') { //基本思路:遍历所有书籍 map<PLL, int>::iterator it = s.begin(); PLL p = make_pair(" ", " "); //设置p为待放入书的前一本书 while(it != s.end()) { if(it->second) { //若这本书未借出,将这本书设置为待放入书籍的前一本书 p = it->first; it++; continue; } if(re.count(it->first)) { it->second = 1; if(p.first == " ") cout << "Put " << it->first.second << " first" << endl; else cout << "Put " << it->first.second << " after " << p.second << endl; re.erase(it->first); //每放好一本书,就要把这本书从re表中删除 p = it->first; //放好之后这本书就成了下一本待放入书籍的前一本书了 it++; continue; } it++; //执行到这里说明这本书还未归还 } cout << "END" << endl; } else { size_t a = str1.find(" "); str2 = str1.substr(a+1); str1 = str1.substr(0, a); PLL p = make_pair(d[str2], str2); if(str1[0] == 'B') s[p] = 0; else re[p] = 1; } } return 0;}
唯一麻烦点的就是SHELVE时,我们遍历所有书籍时总是得记录其前一本书籍是什么。这要这里处理好了就能AC了。
阅读全文
0 0
- UVA - 230 Borrowers
- UVa 230 - Borrowers
- UVA - 230 Borrowers
- UVA-230 Borrowers
- Uva - 230 - Borrowers
- UVA 230 Borrowers
- UVA 230(p136)----Borrowers
- UVa 230 Borrowers
- uva 230 Borrowers
- UVA 230 Borrowers
- uva 230 Borrowers
- UVa 230 Borrowers
- UVa 230 - Borrowers(模拟)
- UVA - 230 Borrowers string+vector
- UVA 230 Borrowers (STL运用)
- UVA 230 Borrowers 简单模拟
- 【UVA】230 - Borrowers(map模拟)
- UVA 230 Borrowers(图书管理系统)
- Longest Substring Without Repeating Characters(算法分析week4)
- Numpy 中clip函数的使用
- innblock | InnoDB page观察利器
- java8的内置函数式接口总结
- (M)Dynamic Programming:486. Predict the Winner
- UVa 230 Borrowers
- C51单片机中断,寄存器,定时器,PWM原理,配置及使用
- 解决VS2015模块对于SAFESEH 映像是不安全的
- Java Web 开发后续(二)
- 主存储器
- LeetCode 494. Target Sum
- 浅谈单例模式的优缺点
- js中 Number()函数
- 洛谷1119 图论