TJU 2094 Reserve Bookshelf 题解

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

你可能感兴趣的:(TJU 2094 Reserve Bookshelf 题解)