码迷,mamicode.com
首页 > 其他好文 > 详细

UVA 230 Borrowers

时间:2020-06-06 13:16:27      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:string   std   color   操作   ret   int   显示   就是   first   

题意:模拟图书馆图书的借用状态。书有三种状态: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

标签:string   std   color   操作   ret   int   显示   就是   first   

原文地址:https://www.cnblogs.com/jaszzz/p/13054056.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!