Advertisement
SuitNdtie

Blockgame

May 14th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.54 KB | None | 0 0
  1. #include<stdio.h>
  2.  
  3. int n,m;
  4. char board[7][7];
  5. int ans = 0;
  6.  
  7. bool isalpha(char c){
  8.     return ('A' <= c && c <= 'Z');
  9. }
  10.  
  11. void falling()
  12. {
  13.     int I = 0 , J = 0;
  14.     while(I<n){
  15.         while(J<m){
  16.             bool check = false;
  17.             while(isalpha(board[I][J]) && I + 1 < n && board[I+1][J] == '-'){
  18.                 board[I+1][J] = board[I][J];
  19.                 board[I][J] = '-';
  20.                 I++;
  21.                 check = true;
  22.             }
  23.             if(check){
  24.                 I = 0;
  25.                 J = 0;
  26.             }
  27.             else{
  28.                 J++;
  29.             }
  30.         }
  31.         J = 0;
  32.         I++;
  33.     }
  34. }
  35.  
  36. int cntcom(int I,int J,char key){
  37.     if(I < 0 || I >= n || J < 0 || J >= m)return 0;
  38.     if(board[I][J] != key)return 0;
  39.     board[I][J] -= 'A';
  40.     board[I][J] += 'a';
  41.     return cntcom(I+1,J,key) + cntcom(I-1,J,key) + cntcom(I,J+1,key) + cntcom(I,J-1,key) + 1;
  42. }
  43.  
  44. void refresh()
  45. {
  46.     for(int i = 0 ; i < n ; i ++){
  47.         for(int j = 0 ; j < m ; j ++){
  48.             if('a' <= board[i][j] && board[i][j] <= 'z'){
  49.                 board[i][j] = board[i][j] - 'a';
  50.                 board[i][j] = board[i][j] + 'A';
  51.             }
  52.         }
  53.     }
  54. }
  55.  
  56. void popping(int I,int J,char key){
  57.     if(I < 0 || I >= n || J < 0 || J >= m)return;
  58.     if(board[I][J] != key)return;
  59.     board[I][J] = '-';
  60.     ans += 5;
  61.     popping(I+1,J,key);
  62.     popping(I-1,J,key);
  63.     popping(I,J+1,key);
  64.     popping(I,J-1,key);
  65. }
  66.  
  67. bool point(){
  68.     int I = 0 , J = 0;
  69.     while(I < n){
  70.         while(J < m){
  71.             if(isalpha(board[I][J])){
  72.                 if(cntcom(I,J,board[I][J]) > 1){
  73.                     popping(I,J,board[I][J]);
  74.                     return true;
  75.                 }else{
  76.                     refresh();
  77.                 }
  78.             }
  79.             J++;
  80.         }
  81.         J = 0;
  82.         I++;
  83.     }
  84.     return false;
  85. }
  86.  
  87. void printboard()
  88. {
  89.     for(int i = 0 ; i < n ; i ++){
  90.             for(int j = 0 ; j < m ; j ++){
  91.                 printf("%c ",board[i][j]); 
  92.             }
  93.             printf("\n");
  94.         }
  95.        
  96. }
  97.  
  98. int main()
  99. {
  100.     scanf("%d %d",&n,&m);
  101.     for(int i = 0 ; i < n ; i ++){
  102.         for(int j = 0 ; j < m ; j ++){
  103.             scanf(" %c",&board[i][j]);
  104.         }
  105.     }
  106.     int k;
  107.     scanf("%d",&k);
  108.     for(int q = 0 ; q < k ; q ++){
  109.         int I,J;
  110.         char d;
  111.         scanf("%d %d %c",&I,&J,&d);
  112.        
  113.         if(d == 'L'){
  114.             //invalid move
  115.             if(J-1 < 0 || board[I][J-1] != '-' || !('A' <= board[I][J] && board[I][J] <= 'Z')){
  116.                 ans -= 5;
  117.             }
  118.             else{
  119.                 board[I][J-1] = board[I][J];
  120.                 board[I][J] = '-';
  121.                 falling();
  122.                 while(point()){
  123.                     falling();
  124.                 }
  125.             }
  126.         }
  127.         else if(d == 'R'){
  128.             if(J+1 >= m || board[I][J+1] != '-' || !('A' <= board[I][J] && board[I][J] <= 'Z')){
  129.                 ans -= 5;
  130.             }
  131.             else{
  132.                 board[I][J+1] = board[I][J];
  133.                 board[I][J] = '-';
  134.                 falling();
  135.                 while(point()){
  136.                     falling();
  137.                 }
  138.             }
  139.         }
  140.         else{
  141.             printf("Error\n");
  142.             return 0;
  143.         }
  144.     }
  145.     printf("%d\n",ans);
  146.     printboard();
  147.     return 0;
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement