OJ-Problems-Source/HDOJ/2726_autoAC.cpp

73 lines
1.7 KiB
C++
Raw Normal View History

#include<iostream>
#include<stdio.h>
#include<list>
using namespace std;
class Bookshelf;
class Book{
public:
Book(int _id,int _width):id(_id),width(_width){}
int id,width;
friend class Bookshelf;
};
class Bookshelf{
public:
Bookshelf(int w):width(w){
occupied_width=0;
}
void add(const Book &book){
shelf.push_front(book);
occupied_width += book.width;
while(occupied_width>width){
occupied_width -= (shelf.back()).width;
shelf.pop_back();
}
}
void remove(const int &id){
list<Book>::iterator i;
for(i=shelf.begin();i!=shelf.end();i++){
if(i->id == id) break;
}
if(i==shelf.end()) return;
occupied_width -= i->width;
shelf.erase(i);
}
friend ostream& operator<<(ostream &out,Bookshelf &bookshelf);
private:
list<Book> shelf;
int width;
int occupied_width;
};
ostream& operator<<(ostream &out, Bookshelf &bookshelf)
{
list<Book>::iterator i;
for(i=(bookshelf.shelf).begin();i!=(bookshelf.shelf).end();i++)
out<<" "<<i->id;
return out;
}
int main()
{
int width;
int p=1;
char cmd;
while(cin>>width,width!=-1)
{
Bookshelf bookshelf(width);
int id,w;
while(cin>>cmd)
{
if(cmd=='E') break;
else if(cmd=='R')
{
cin>>id;
bookshelf.remove(id);
}else
{
cin>>id>>w;
bookshelf.add(Book(id,w));
}
}
cout<<"PROBLEM "<<p++<<":"<<bookshelf<<endl;
}
return 0;
}