Poj Solution 2302

http://poj.org/problem?id=2302

/* @author:zeropinzuo */
import java.io.*;
import java.util.*;

public class Main{
 static Scanner cin;
 public static void main(String args[]){
  cin = new Scanner(System.in);
  int n = cin.nextInt();
  for(int i=0;i< n;i++)
   run();
  }

 static void run(){
   Card card = new Card(cin);
   boolean first=true;
   int n;
   for(int i=0;i< 75;i++){
    n = cin.nextInt();
    if(first==true){
    card.mark(n);
    if(card.check()==true){
      System.out.println("BINGO after "+(i+1)+" numbers announced");
      first = false;
    }
    }
   }
 }
}

class Card{
 int[][] map;
 boolean[][] marked;

 public Card(Scanner cin){
  int size=5;
  map = new int[size][size];
  marked = new boolean[size][size];
        
  int i,j;
  for(i=0;i< size;i++)
   for(j=0;j< size;j++){
     marked[i][j] = false;
     if((i!=2)||(j!=2))
    map[i][j] = cin.nextInt();
    }
   marked[2][2] = true;
 }

 void mark(int n){
   int row=0, column=0;

   while(row< 5){
    column=0;
    while(column< 5){
    if(map[row][column]==n){
      marked[row][column] = true;
      break;
    }
       column++;
     }

    if(column< 5)
    break;
    row++;
   }
 }

 boolean check(){
   if(checkRow())
    return true;
   else if(checkColumn())
    return true;
   else if(checkDiagonal())
    return true;
  else
    return false;
}

boolean checkRow(){
 int row=0;
 while(row< 5){
   int column=0;
   while(column< 5){
    if(marked[row][column]==false)
        break;
    column++;
   }

  if(column==5){
    break;
   }
   row++;
 }

 if(row< 5){
   return true;
  }
 return false;
}

 boolean checkColumn(){
    int column=0;
    while(column< 5){
    int row=0;
    while(row< 5){
      if(marked[row][column]==false)
       break;
      row++;
    }

    if(row==5)
      break;
    column++;
    }

    if(column< 5)
    return true;
    return false;
 }


 boolean checkDiagonal(){
   if(checkLeftDiagonal())
     return true;
   else if(checkRightDiagonal())
     return true;
   else
     return false;
  }

 boolean checkLeftDiagonal(){
   int element=0;
   while(element< 5){
     if(marked[element][element] == false)
         return false;
     element++;
   }
   return true;
 }

boolean checkRightDiagonal(){
  int element=0;
  while(element< 5){
   if(marked[element][4-element] == false)
    return false;
   element++;
  }
 return true;
 }
}

											
This entry was posted in poj. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *