076

DS HW1

076
May 18th, 2024 (edited)
14
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.70 KB | None | 0 0
  1. #include<stdio.h>
  2. int col,row,bs=0,bn=0,ps=0,pn=0;
  3. char map[100][100],b[10000],p[10000];
  4. int min(int a,int b){
  5.     return a<b? a:b;
  6. }
  7. int max(int a,int b){
  8.     return a>b? a:b;
  9. }
  10. void dig(int dc){
  11.     int rdeep,trd,mrd;
  12.     rdeep=row-1;
  13.     while(map[rdeep][dc]=='_'&&rdeep>=0) rdeep--;
  14.     if(rdeep<0) return;
  15.     switch(map[rdeep][dc]){
  16.         case 'G':
  17.         case 'D':
  18.             b[bn++]=map[rdeep][dc];
  19.             map[rdeep][dc]='_';
  20.             return;
  21.         case 'B':
  22.             for(int i=max(0,dc-1);i<min(col,dc+2);i++) for(int j=max(0,rdeep-1);j<min(rdeep+2,row);j++) map[j][i]='_';
  23.             return;
  24.         case 'F':
  25.         case 'M':
  26.             p[pn++]=map[rdeep][dc];
  27.             map[rdeep][dc]='_';
  28.             return;
  29.         case 'C':
  30.             map[rdeep][dc]='_';
  31.             if(bs==bn) return;
  32.             mrd=0;
  33.             for(int i=max(0,dc-2);i<min(col,dc+3);i++){
  34.                 trd=row-1;
  35.                 while(map[trd][i]=='_'&&trd>=0) trd--;
  36.                 if(trd>mrd) mrd=trd;
  37.             }
  38.             for(int i=max(0,dc-2);i<min(col,dc+3);i++) for(int j=mrd+1;j<mrd+4;j++) map[j][i]=b[bn-1];
  39.             row=max(row,mrd+4);
  40.             return;
  41.         case 'P':
  42.             while(bs<bn&&b[bn-1]=='G') bn--;
  43.             map[rdeep][dc]='_';
  44.             return;
  45.         default:
  46.             return;
  47.     }
  48. }
  49. void solve(){
  50.     char ind[4];
  51.     int dc;
  52.     scanf("%s",ind);
  53.     if(ind[0]=='D'){
  54.         scanf("%d",&dc);
  55.         dig(dc);
  56.     }else if(ps<pn){
  57.         if(p[ps]=='F'){
  58.             int mrd=0,trd;
  59.             for(int i=0;i<col;i++){
  60.                 trd=row-1;
  61.                 while(map[trd][i]=='_'&&trd>=0) trd--;
  62.                 if(trd>mrd) mrd=trd;
  63.             }
  64.             printf("MINE LEVEL:%d\n",mrd+1);
  65.             for(int i=0;i<col;i++) printf("%c ",map[mrd][i]);
  66.             printf("\n");
  67.         }else{
  68.             for(int i=0;i<col;i++) dig(i);
  69.         }
  70.         ps++;
  71.        
  72.     }
  73.     return;
  74. }
  75. int main(){
  76.     int testcase,check=0,md=-1,td;
  77.     char ind[2];
  78.     memset(map,'_',10000*sizeof(char));
  79.     scanf("%d%d%d",&col,&row,&testcase);
  80.     for(int i=row-1;i>=0;i--) for(int j=0;j<col;j++) scanf("%s",ind),map[i][j]=ind[0];
  81.     while(testcase--) solve();
  82.     printf("FINAL BAG:\n");
  83.     for(int i=bs;i<bn;i++) printf("%c ",b[i]);
  84.     printf("\nFINAL MAP:\n");
  85.     for(int i=0;i<col;i++){
  86.         td=row-1;
  87.         while(map[td][i]=='_'&&td>=0) td--;
  88.         if(td>md) md=td;
  89.     }
  90.     for(int i=md;i>=0;i--){
  91.         for(int j=0;j<col;j++) printf("%c ",map[i][j]);
  92.         printf("\n");
  93.     }
  94.     return 0;
  95. }
  96. /*
  97. CS2351_DS_24Spring_HW1
  98. https://acm.cs.nthu.edu.tw/contest/2965/
  99. NTHU OJ 14241 - Gold Miner
  100. AC code
  101. 2024 March 21
  102. */
Advertisement
Add Comment
Please, Sign In to add comment