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;
}
原文地址:https://www.cnblogs.com/jaszzz/p/13054056.html