mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
73 lines
1.7 KiB
C++
73 lines
1.7 KiB
C++
|
#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;
|
||
|
}
|