| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
经过了无数次的WA之后,终于发现自己原来没注意到 put "title" first!这种情况! 贴代码,纪念啊!#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
#define MAX 100000 //书的最大库存
#define SIZE 100
struct book
{
char title[SIZE];
char author[SIZE];
int tag; //tag=0表示在书架,tag=1表示借出,tag=2表示归还但是不在书架上
}b[MAX],r[MAX];
bool cmp(book b1,book b2) //先根据author比较,如果author相同,再根据title比较
{
if(strcmp(b1.author,b2.author)<0)
return true;
if(strcmp(b1.author,b2.author)==0)
{
if(strcmp(b1.title,b2.title)<0)
return true;
}
return false;
}
int main()
{
char tmp[200],tmp_title[200];
int cnt=0;
while(cin.getline(tmp,200)&&strcmp(tmp,"END")!=0) //读取原来在书架上面的书
{
int i=1,j;
while(tmp[i]!=char(34)&&tmp[i]!='\0') //提取书名
{
// cout<<"tmp[i]="<<tmp[i]<<" ";
b[cnt].title[i-1]=tmp[i];
i++;
}
// cout<<b[cnt].title<<endl;
for(i=i+5,j=0;i<strlen(tmp);i++,j++) //提取作者名字
{
b[cnt].author[j]=tmp[i];
}
b[cnt].tag=0;
//cout<<b[cnt].author<<endl;
// cout<<"cnt="<<cnt<<endl;
cnt++;
//cout<<endl;
}
sort(b,b+cnt,cmp);
//for(int i=0;i<3;i++) cout<<b[i].title<<endl;
int k=0;
while(cin.getline(tmp,200)&&strcmp(tmp,"END")!=0) //判断是否为第二个END
{
int i,j;
if(strcmp(tmp,"SHELVE")!=0) //判断不是为SHELVE
{
//cout<<2<<endl;
//cout<<tmp<<endl;
for(i=8;tmp[i]!='"';i++) //提取title
tmp_title[i-8]=tmp[i];
tmp_title[i-8]='\0';
//cout<<tmp_title<<endl;
if(tmp[0]=='B') //借书
{
for(i=0;;i++)
{
if(strcmp(b[i].title,tmp_title)==0)
{
b[i].tag=1;
break;
}
//cout<<i<<endl;
}
//cout<<5<<endl;
}
else //还书
{
for(i=0;;i++)
{
// cout<<"xx"<<endl;
if(strcmp(b[i].title,tmp_title)==0)
{
b[i].tag=2;
strcpy(r[k].title,b[i].title);
strcpy(r[k].author,b[i].author);
k++;
//cout<<4<<endl;
//cout<<"k="<<k<<endl;
break;
}
}
}
}
else //SHELVE命令
{
//cout<<3<<endl;
sort(r,r+k,cmp); //对还的书进行排序
for(i=0;i<k;i++)
{
//cout<<"i="<<i<<endl;
char bef_r[200]; //r[j]之前的书
for(j=0;;j++)
{
if(b[j].tag==2&&strcmp(b[j].title,r[i].title)==0)
{
b[j].tag=0;
break;
}
}
j--;
while(j>=0)
{
if(b[j].tag==0)
{
strcpy(bef_r,b[j].title);
break;
}
j--;
}
if(j<0) cout<<"Put "<<char(34)<<r[i].title<<char(34)<<" first"<<endl;
else cout<<"Put "<<char(34)<<r[i].title<<char(34)<<" after "<<char(34)<<bef_r<<char(34)<<endl;
}
cout<<"END"<<endl;
k=0;
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator