Source: Rocky Mountain 2000
比较烦人的字符串处理问题
题目对于数据范围也没有给出明确的说明
只能开一个大数组来模拟了。
然后每次借走了就标记一下
当还回来的时候就要把这个书在队列最后再新加入了。
输出就按照题目的就可以了
多注意就是了
第一次提交忘记了去掉freopen了
1
#include<map>
2
#include<string.h>
3
#include<stdio.h>
4
#include<string>
5
using namespace std;
6
char cz[40],str[40],use[1000];
7
char data[1000][40];
8
map<string,int> name;
9
string now,t;
10
int l,N,n,num[1000];
11
void PRINT()
12![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
13
int i;
14
for(i=l-1;i>=0;i--)
15
if(use[i])
16![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
17
printf("%s%4d\n",data[i],num[i]);
18![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
19
}
20
printf("AVAILABLE SHELF SPACE: %4d\n\n",N-n);
21
gets(str);
22
}
23
void ADD()
24![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
25
int k,temp=1,L=0;
26
char ch;
27
for(k=0;k<6;k++)scanf("%c",&ch);
28
gets(data[l]);
29
sscanf(data[l]+30,"%d",&L);
30
data[l][30]=0;
31
n+=L;num[l]=L;
32![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
33
t=data[l];
34
name[t]=l;
35
use[l]=1;
36
k=0;
37
while(n>N)
38![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
39
if(use[k])
40![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
41
use[k]=0;
42
n-=num[k];
43
}
44
k++;
45
}
46
l++;
47
}
48
void CHECKOUT()
49![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
50
int k,i;char ch;
51
scanf("%c",&ch);
52
gets(str);
53
for(i=strlen(str);i<30;i++)str[i]=' ';
54
str[30]=0;
55
t=str;
56
k=name[t];
57
use[k]=0;
58
n-=num[k];
59
}
60
void RETURN()
61![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
62
int k,i;
63
char ch;
64
for(i=0;i<3;i++)scanf("%c",&ch);
65
gets(str);
66
for(i=strlen(str);i<30;i++)str[i]=' ';
67
str[30]=0;
68
t=str;
69
k=name[t];
70
for(i=0;i<31;i++)data[l][i]=data[k][i];
71
use[l]=1;num[l]=num[k];
72
n+=num[l];
73
k=0;
74
while(n>N)
75![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
76
if(use[k])
77![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
78
use[k]=0;
79
n-=num[k];
80
}
81
k++;
82
}
83
l++;
84
}
85
int main()
86![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
87
//freopen("bbbbbbbbbb.txt","w",stdout);
88
scanf("%d",&N);n=0;l=0;
89
name.clear();
90
memset(use,0,sizeof(use));
91
while(scanf("%s",cz)!=EOF)
92![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
93
now=cz;
94
if(now=="PRINT")PRINT();
95
else if(now=="ADD")ADD();
96
else if(now=="CHECKOUT")CHECKOUT();
97
else if(now=="RETURN")RETURN();
98
}
99
return 0;
100
}
101![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)