UVA 230 Borrowers

Posted jaszzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA 230 Borrowers相关的知识,希望对你有一定的参考价值。

题意:模拟图书馆图书的借用状态。书有三种状态:1在图书馆的书架上,2被接走了,3刚还回来还没有放到书架上。每次有三种操作:1借书,2还书,3把换回来的书放回书架。

思路:思路简单,主要就是map,set的运用比较复杂,还是折腾了挺久

#include<bits/stdc++.h>

struct Book
{
    string aut,tit;
    bool operator < (const struct Book& b)const{
        return aut<b.aut || (aut==b.aut && tit<b.tit);
    }
}book;

set<Book> ret,lib;
string s,tit;
map<string,string> mp;

int main(void)
{
    while(getline(cin,s)&&(s!="END"))
    {
        int i=s.find(",1);
        book.tit=s.substr(0,i+1);
        book.aut=s.substr(i+5);
        mp[book.tit]=book.aut;
        lib.insert(book);
    }

    while(getline(cin,s))
    {
        if(s[0]==E)   break;
        if(s[0]==S)   // 显示操作
        {
            set<Book>::iterator it,it1;
            for(it=ret.begin();it!=ret.end();it++)
            {
                cout<<"Put "<<it->tit<<" ";
                it1=lib.lower_bound(*it);
                if(lib.empty()||it==lib.begin())
                    cout<<"first"<<endl;
                else
                    cout<<"after "<<(--it1)->tit<<endl;
                lib.insert(*it);
            }
            ret.clear();
            cout<<"END"<<endl;
        }
        else    // 借还操作
        {
            int i=s.find(");
            string booktit=s.substr(i);
            book.tit=booktit;
            book.aut=mp[booktit];
            if(s[0]==B) lib.erase(book);
            else ret.insert(book);
        }      
    }
    return 0;
}

 

以上是关于UVA 230 Borrowers的主要内容,如果未能解决你的问题,请参考以下文章

UVA 230 Borrowers

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

习题5_8 图书管理系统(Borrowers, ACM/ICPC World Finals 1994, UVa230)

Uva230

七个办法只有一个有效:200 PORT command successful. Consider using PASV.425 Failed to establish connection.(代码片段

UVa 1442 - Cave