Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- int n,m;
- char board[7][7];
- int ans = 0;
- bool isalpha(char c){
- return ('A' <= c && c <= 'Z');
- }
- void falling()
- {
- int I = 0 , J = 0;
- while(I<n){
- while(J<m){
- bool check = false;
- while(isalpha(board[I][J]) && I + 1 < n && board[I+1][J] == '-'){
- board[I+1][J] = board[I][J];
- board[I][J] = '-';
- I++;
- check = true;
- }
- if(check){
- I = 0;
- J = 0;
- }
- else{
- J++;
- }
- }
- J = 0;
- I++;
- }
- }
- int cntcom(int I,int J,char key){
- if(I < 0 || I >= n || J < 0 || J >= m)return 0;
- if(board[I][J] != key)return 0;
- board[I][J] -= 'A';
- board[I][J] += 'a';
- return cntcom(I+1,J,key) + cntcom(I-1,J,key) + cntcom(I,J+1,key) + cntcom(I,J-1,key) + 1;
- }
- void refresh()
- {
- for(int i = 0 ; i < n ; i ++){
- for(int j = 0 ; j < m ; j ++){
- if('a' <= board[i][j] && board[i][j] <= 'z'){
- board[i][j] = board[i][j] - 'a';
- board[i][j] = board[i][j] + 'A';
- }
- }
- }
- }
- void popping(int I,int J,char key){
- if(I < 0 || I >= n || J < 0 || J >= m)return;
- if(board[I][J] != key)return;
- board[I][J] = '-';
- ans += 5;
- popping(I+1,J,key);
- popping(I-1,J,key);
- popping(I,J+1,key);
- popping(I,J-1,key);
- }
- bool point(){
- int I = 0 , J = 0;
- while(I < n){
- while(J < m){
- if(isalpha(board[I][J])){
- if(cntcom(I,J,board[I][J]) > 1){
- popping(I,J,board[I][J]);
- return true;
- }else{
- refresh();
- }
- }
- J++;
- }
- J = 0;
- I++;
- }
- return false;
- }
- void printboard()
- {
- for(int i = 0 ; i < n ; i ++){
- for(int j = 0 ; j < m ; j ++){
- printf("%c ",board[i][j]);
- }
- printf("\n");
- }
- }
- int main()
- {
- scanf("%d %d",&n,&m);
- for(int i = 0 ; i < n ; i ++){
- for(int j = 0 ; j < m ; j ++){
- scanf(" %c",&board[i][j]);
- }
- }
- int k;
- scanf("%d",&k);
- for(int q = 0 ; q < k ; q ++){
- int I,J;
- char d;
- scanf("%d %d %c",&I,&J,&d);
- if(d == 'L'){
- //invalid move
- if(J-1 < 0 || board[I][J-1] != '-' || !('A' <= board[I][J] && board[I][J] <= 'Z')){
- ans -= 5;
- }
- else{
- board[I][J-1] = board[I][J];
- board[I][J] = '-';
- falling();
- while(point()){
- falling();
- }
- }
- }
- else if(d == 'R'){
- if(J+1 >= m || board[I][J+1] != '-' || !('A' <= board[I][J] && board[I][J] <= 'Z')){
- ans -= 5;
- }
- else{
- board[I][J+1] = board[I][J];
- board[I][J] = '-';
- falling();
- while(point()){
- falling();
- }
- }
- }
- else{
- printf("Error\n");
- return 0;
- }
- }
- printf("%d\n",ans);
- printboard();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement