pastebin

Paste Search Dynamic
Recent pastes
StringTokenizer
  1. import java.util.*;
  2. import java.io.*;
  3.  
  4.  
  5. public class Main
  6. {
  7.         static int r , c , t , up , down;
  8.         static int[][] map;
  9.         static Queue<int[]> q;
  10.         static int[] dx = {-1,1,0,0};
  11.         static int[] dy = {0,0,-1,1};
  12.        
  13.         public static void main (string[] args) throws ioexception
  14.         {
  15.                 bufferedreader br = new bufferedreader(new inputstreamreader(system.in));
  16.                 stringtokenizer st = new stringtokenizer(br.readLine());
  17.                
  18.                 r = integer.parseInt(st.nextToken());
  19.                 c = integer.parseInt(st.nextToken());
  20.                 t = integer.parseInt(st.nextToken());
  21.                
  22.                 map = new int[r][c];
  23.                
  24.                 for(int i = 0 ; i < r ; i++)
  25.                 {
  26.                         st = new stringtokenizer(br.readLine());
  27.                         for(int j = 0 ; j < c ; j++)
  28.                         {
  29.                                 int tmp = integer.parseInt(st.nextToken());
  30.                                
  31.                                 if(tmp == -1) down = i; 
  32.                                
  33.                                 map[i][j] = tmp;
  34.                         }
  35.                 }
  36.                 up = down-1;
  37.  
  38.                 while(t > 0)
  39.                 {
  40.                         q  = new LinkedList<>();
  41.                        
  42.                         for(int i = 0 ; i < r ; i++)
  43.                         {
  44.                                 for(int j = 0 ; j < c ; j++)
  45.                                 {
  46.                                         if(map[i][j] > 0)
  47.                                                 q.add(new int[]{i,j})
  48.                                 }
  49.                         }
  50.                        
  51.                         spread();
  52.                                                
  53.                         push();
  54.                         t--;
  55.                 }
  56.                
  57.                 int ans = 0;
  58.                 for(int i = 0 ; i < r ; i++)
  59.                 {
  60.                         for(int j = 0 ; j < c ; j++)
  61.                         {
  62.                                 if(map[i][j] > -1) ans += map[i][j];
  63.                         }
  64.                 }
  65.  
  66.                 system.out.println(ans);
  67.         }
  68.         public static void spread()
  69.         {
  70.                 while(!q.isEmpty())
  71.                 {
  72.                         int[] arr = q.poll();
  73.                         int x = arr[0];
  74.                         int y = arr[1];
  75.                        
  76.                         if(map[x][y] < 5) continue;
  77.                         int amount = (map[x][y]/5);
  78.                
  79.                         for(int i = 0 ; i < 4 ; i++)
  80.                         {
  81.                                 int nx = x + dx[i];
  82.                                 int ny = y + dy[i];
  83.                                
  84.                                 if(nx >=0 && nx < r && ny >= 0 && ny < c)
  85.                                 {
  86.                                         if(map[nx][ny] != -1)   
  87.                                         {
  88.                                                 map[nx][ny] += amount;
  89.                                                 map[x][y] -= amount;
  90.                                         }
  91.                                 }
  92.                         }
  93.                
  94.                 }
  95.         }
  96.        
  97.         public static void push()       
  98.         {
  99.                 for(int i = up-1 ; i > 0 ; i--)
  100.                 {
  101.                         map[i][0] = map[i-1][0];
  102.                 }
  103.                
  104.                 for(int i = 0 ; i < c-1 ; i++)
  105.                 {
  106.                         map[0][i] = map[0][i+1];
  107.                 }
  108.                
  109.                 for(int i = 0 ; i < up ; i++)
  110.                 {
  111.                         map[i][c-1] = map[i+1][c-1];
  112.                 }
  113.                
  114.                 for(int i = c-1 ; i > 1 ; i--)
  115.                 {
  116.                         map[up][i] = map[up][i-1];
  117.                 }
  118.  
  119.                 map[up][1] = 0;
  120.                
  121.                 for(int i = down+1 ; i < r-1 ; i++)
  122.                 {
  123.                         map[i][0] = map[i+1][0];
  124.                 }
  125.                
  126.                 for(int i = 0 ; i < c-1 ; i++)
  127.                 {
  128.                         map[r-1][i] = map[r-1][i+1];
  129.                 }
  130.                
  131.                 for(int i = r-1 ; i > down ; i--)
  132.                 {
  133.                         map[i][c-1] = map[i-1][c-1];
  134.                 }
  135.                
  136.                 for(int i = c-1 ; i > 1 ; i--)
  137.                 {
  138.                         map[down][i] = map[down][i-1];
  139.                 }
  140.                
  141.                 map[down][1] = 0;
  142.         }
  143. }
Parsed in 0.069 seconds