Guest User

Rain.java

a guest
Jul 10th, 2016
461
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.26 KB | None | 0 0
  1. import java.util.*;
  2. import java.io.*;
  3. public class Rain
  4. {
  5.  
  6.  
  7.     /************************ SOLUTION STARTS HERE ***********************/
  8.  
  9.     static int R , C;
  10.     static int H[][] , W[][];
  11.     static boolean isValid(int i , int j){
  12.     return i >= 0 && i < R && j >= 0 && j < C;
  13.     }
  14.  
  15.     static boolean isEdge(int i , int j){
  16.     return i == 0 || i == R - 1 || j == 0 || j == C - 1;
  17.     }
  18.  
  19.     static int dx[] = {0,1, 0,-1};
  20.     static int dy[] = {1,0,-1, 0};
  21.  
  22.  
  23.     private static void solve(FastScanner s1, PrintWriter out){
  24.  
  25.     int t = s1.nextInt();
  26.     for(int test = 1;test <= t; test++)
  27.     {
  28.         R = s1.nextInt();
  29.         C = s1.nextInt();
  30.         H = new int[R][];
  31.         for(int i=0;i<R;i++)   
  32.         H[i] = s1.nextIntArray(C);
  33.  
  34.         W = new int[R][C];
  35.         for(int i=0;i<R;i++)
  36.         for(int j=0;j<C;j++){
  37.             W[i][j] = isEdge(i, j) ? H[i][j] : Integer.MAX_VALUE;
  38.         }
  39.  
  40.         for(int z = 1 ; z <= (R * C) ; z++){
  41.  
  42.         for(int i=0;i<R;i++){
  43.            
  44.             for(int j=0;j<C;j++){
  45.            
  46.             if(!isEdge(i, j)){
  47.                 int min = Integer.MAX_VALUE;
  48.                 for(int k = 0;k<4;k++){
  49.                 int x = i + dx[k];
  50.                 int y = j + dy[k];
  51.                 min = Math.min(min,W[x][y]);
  52.                 }
  53.                 W[i][j] = Math.max(min,H[i][j]);
  54.             }
  55.            
  56.             }
  57.         }
  58.         }
  59.  
  60.         int total = 0;
  61.         for(int i=0;i<R;i++)
  62.         for(int j=0;j<C;j++)
  63.             total += W[i][j] - H[i][j];
  64.  
  65.         out.println("Case #"+test+": "+total);
  66.  
  67.     }
  68.  
  69.     }
  70.  
  71.  
  72.  
  73.     /************************ SOLUTION ENDS HERE ************************/
  74.  
  75.  
  76.  
  77.  
  78.  
  79.     /************************ TEMPLATE STARTS HERE *********************/
  80.  
  81.     public static void main(String []args) throws IOException {
  82.     FastScanner in  = new FastScanner(System.in);
  83.     PrintWriter out =
  84.         new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)), false);
  85.     //PrintWriter out = new PrintWriter("out.txt");
  86.     solve(in, out);
  87.     in.close();
  88.     out.close();
  89.     }    
  90.  
  91.     static class FastScanner{
  92.     BufferedReader reader;
  93.     StringTokenizer st;
  94.     FastScanner(InputStream stream){reader=new BufferedReader(new InputStreamReader(stream));st=null;} 
  95.     String next()
  96.     {while(st == null || !st.hasMoreTokens()){try{String line = reader.readLine();if(line == null){return null;}           
  97.     st = new StringTokenizer(line);}catch (Exception e){throw new RuntimeException();}}return st.nextToken();}
  98.     String nextLine()  {String s=null;try{s=reader.readLine();}catch(IOException e){e.printStackTrace();}return s;}            
  99.     int    nextInt()   {return Integer.parseInt(next());}
  100.     long   nextLong()  {return Long.parseLong(next());}    
  101.     double nextDouble(){return Double.parseDouble(next());}
  102.     char   nextChar()  {return next().charAt(0);}
  103.     int[]  nextIntArray(int n)         {int[] arr= new int[n];   int i=0;while(i<n){arr[i++]=nextInt();}  return arr;}
  104.     long[] nextLongArray(int n)        {long[]arr= new long[n];  int i=0;while(i<n){arr[i++]=nextLong();} return arr;} 
  105.     int[]  nextIntArrayOneBased(int n) {int[] arr= new int[n+1]; int i=1;while(i<=n){arr[i++]=nextInt();} return arr;}         
  106.     long[] nextLongArrayOneBased(int n){long[]arr= new long[n+1];int i=1;while(i<=n){arr[i++]=nextLong();}return arr;}         
  107.     void   close(){try{reader.close();}catch(IOException e){e.printStackTrace();}}             
  108.     }
  109.  
  110.     /************************ TEMPLATE ENDS HERE ************************/
  111. }
Add Comment
Please, Sign In to add comment