これはライン上のいくつかの点での通信における主な問題はされて
最初の書籍や名前の株式で、その文字列にそれを分割しますか?
タイトルは、二重引用符の数を計算することによって決定することができるので、二重引用符なしの本の中でヒント
名前はちょうどそれ「による」の後にない間は、その後、裁判官は十分ではありません「で」登場しましたか?いいえ、でタイトルので、表示されることがあります!
だから、条件2として二重引用符の数と一緒に、それはユニークです!
次に、異なるタイトルは、私たちは地図帳ストアと経営シミュレーション述べることができるさ!もちろん、ソートが必要不可欠である
各出力のために、その後
の行にあったかどうかだけ最初のマーク、これは本が良いだけでは不十分である方法によって、各店舗の前で最初のものではないのですか?あなたは状態に入金後に変更していないことを注意
バーの何も
上のコードを
#include <bits/stdc++.h>
using namespace std;
struct stu{
string name;
string book;
bool operator < (const stu b) const
{
if(this->name == b.name) return this->book < b.book;
return this->name < b.name;
}
}q;
vector <stu> jia;
map<string,int> f; // 1 为存着 -1 借出 0 窝着等待拯救
int main()
{
string s,ss;
while(getline(cin,s))
{
if(s=="END") break;
int n = s.size(),yin = 0;
for (int i = 0; i < n ; i++)
{
if(s[i]=='"') yin++;
if(yin == 2)
{
q.book = s.substr(0,i+1);
yin++; // 保证之进来一次
}
if(s.substr(i,2) == "by" && yin >= 2)
{
q.name = s.substr(i+3,n-i-3);
break;
}
}
//cout<<endl<<q.book<<" "<<q.name<<endl;
f[q.book] = 1;
jia.push_back(q);
}
int n = jia.size();
sort(jia.begin(),jia.end());
// 初始化完成
while (getline (cin,s))
{
int len = s.size();
if(s[0]=='B')
{
ss = s.substr(7,len-7);
f[ss] = -1;
}
else if(s[0]=='R')
{
ss = s.substr(7,len-7);
f[ss] = 0;
}
else if(s[0]=='S')
{
int qian = 0,kk = 0;//qian 前面的书 kk表示是否有了第一本
for (int i = 0 ; i < n; i++)
{
ss = jia[i].book;
if(f[ss] == 1 )
{
qian = i; kk = 1;
}
else if(f[ss] == 0)
{
if(!kk)
{
kk = 1; f[ss] = 1; qian = i;
cout<<"Put "<<ss<<" first"<<endl;
}
else
{
f[ss] = 1;
cout<<"Put "<<ss<<" after "<<jia[qian].book<<endl;
qian = i;
}
}
}
cout<<"END"<<endl;
}
else break;
}
return 0;
}