TJU 2094 Reserve Bookshelf 題解
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

{
13
int i;
14
for(i=l-1;i>=0;i--)
15
if(use[i])
16
{
17
printf("%s%4d\n",data[i],num[i]);
18
19
}
20
printf("AVAILABLE SHELF SPACE: %4d\n\n",N-n);
21
gets(str);
22
}
23
void ADD()
24

{
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
33
t=data[l];
34
name[t]=l;
35
use[l]=1;
36
k=0;
37
while(n>N)
38
{
39
if(use[k])
40
{
41
use[k]=0;
42
n-=num[k];
43
}
44
k++;
45
}
46
l++;
47
}
48
void CHECKOUT()
49

{
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

{
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
{
76
if(use[k])
77
{
78
use[k]=0;
79
n-=num[k];
80
}
81
k++;
82
}
83
l++;
84
}
85
int main()
86

{
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
{
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
#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


{13
int i;14
for(i=l-1;i>=0;i--)15
if(use[i])16

{17
printf("%s%4d\n",data[i],num[i]);18

19
}20
printf("AVAILABLE SHELF SPACE: %4d\n\n",N-n);21
gets(str);22
}23
void ADD()24


{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

33
t=data[l];34
name[t]=l;35
use[l]=1;36
k=0;37
while(n>N)38

{ 39
if(use[k])40

{41
use[k]=0;42
n-=num[k];43
}44
k++;45
}46
l++;47
}48
void CHECKOUT()49


{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


{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

{ 76
if(use[k])77

{78
use[k]=0;79
n-=num[k];80
}81
k++;82
}83
l++;84
}85
int main()86


{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

{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


