230 - Borrowers

来源:互联网 发布:网络词语大全2016 编辑:程序博客网 时间:2024/05/01 13:52

这道题有一个需要注意的地方:题中所说的放回书时该书前面的书到底是什么。

答案是:现在有的那本排在他前面的书。

该题uva上有测试数据(瓢虫),可以参考~~

#include<cstdio>

#include<iostream>
#include<cstring>
#include<map>
#include<string>
#include<algorithm>
#include<cstring>
#include<vector>
#include<set>
using namespace std;
map<string,string> p;
string s1[1000],s2[1000],ss[1000],s[1000],s3,s4;
int main(){
    string buf;
    int maxn=0,ans,a[1000];
    while(getline(cin,buf)){
        if(buf=="END")
            break;
        for(int i=1;i<buf.size();i++){
            if(buf[i]=='"'){
                ans=i;break;
            }
        }
            for(int i=0;i<buf.size();i++){
                if(ans>=i)
                    s1[maxn]+=buf[i];
                    if(i>ans+4)
                        s2[maxn]+=buf[i];
            }
            p[s1[maxn]]=s2[maxn];
            maxn++;
    }
    memset(a,0,sizeof(a));
    int kase=0,ens=0;
    set<string> st;
    for(int i=0;i<maxn;i++)
        st.insert(s2[i]);
    for(set<string>::iterator it=st.begin();it!=st.end();++it){
            kase=0;
        for(int i=0;i<maxn;i++){
            if(s2[i]==*it)
               ss[kase++]=s1[i];
        }
        sort(ss,ss+kase);
        for(int i=0;i<kase;i++){
            s[ens++]=ss[i];
            a[ens-1]=1;
            ss[i].clear();
        }
    }
    while(getline(cin,buf)){
        if(buf=="END")
            break;
            ans=0;
        for(int i=0;i<buf.size();i++)
            if(buf[i]=='"'){
                ans=i;break;
            }
        for(int i=0;i<buf.size();i++){
            if(i<ans-1)
                s3+=buf[i];
            if(i>=ans)
                s4+=buf[i];
        }
        if(s3=="BORROW"){
            for(int i=0;i<maxn;i++)
                if(s[i]==s4){
                    a[i]=0;break;
                }
        }
        if(s3=="RETURN"){
            for(int i=0;i<maxn;i++)
                if(s[i]==s4){
                    a[i]=2;break;
                }
        }
        if(buf=="SHELVE"){
            for(int i=0;i<maxn;i++){
                if(a[i]==2){
                    cout<<"Put "<<s[i];
                    int bbs=0;
                    for(int j=i-1;j>=0;j--)
                    if(a[j]==1){
                        cout<<" after "<<s[j]<<'\n';
                        bbs=1;break;
                    }
                    if(bbs==0)
                        cout<<" first"<<'\n';
                    a[i]=1;
                }
            }
            printf("END\n");
        }
        s3.clear();s4.clear();
    }
return 0;
}
0 0