(UVA) 10336 - Rank the Languages - Solução
import java.io.*;
import java.util.*;
class Main {
class Posicao {
public Posicao(int l, int c) {
linha = l;
coluna = c;
}
public int linha;
public int coluna;
}
class Resultado {
public char letra;
public int vezes;
}
public static void main(String[] args) throws NumberFormatException, IOException {
Main processando = new Main();
processando.processa();
System.exit(0);
}
int busca(char[][] mapa, ArrayList<Posicao> filaVisitar, char caracteres, int numLinhas, int numColunas) {
int[][] matriz = new int[numLinhas][numColunas];
for (int i = 0; i < numLinhas; i++) {
for (int j = 0; j < numColunas; j++) {
matriz[i][j] = -1;
}
}
int lin = 0;
int col = 0;
ArrayList<Posicao> filaVisitados = new ArrayList<Posicao>();
filaVisitados.add(new Posicao(0, 0));
int[] vetorLinha = {0,0,+1,-1,-1,+1,-1,+1};
int[] vetorColuna = {-1,+1,0,0,-1,+1,+1,-1};
int inicioFila = 0;
int contador = 0;
int contador2 = 0;
int contadorC = 0;
boolean incrementou = false;
while (filaVisitados.size() != inicioFila) {
lin = filaVisitados.get(inicioFila).linha;
col = filaVisitados.get(inicioFila).coluna;
for (int i = 0; i < 4; i++) {
int nLinha = lin+vetorLinha[i];
int nColuna = col+vetorColuna[i];
if (nLinha >= 0 && nLinha < numLinhas && nColuna >= 0 && nColuna < numColunas) {
if (matriz[nLinha][nColuna] == -1) {
if (mapa[nLinha][nColuna] == caracteres) {
incrementou = true;
matriz[nLinha][nColuna] = contador;
filaVisitados.add(new Posicao(nLinha, nColuna));
}
}
}
}
inicioFila++;
if (filaVisitar.size() > 0 && contador2 < filaVisitar.size() && filaVisitados.size() == inicioFila) {
filaVisitados.add(filaVisitar.get(contador2));
if (incrementou) {
contador++;
incrementou = false;
}
contador2++;
}
}
return contador;
}
void processa() throws NumberFormatException, IOException {
String line = "";
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
line = br.readLine();
StringTokenizer tokenizer = new StringTokenizer(line);
int qteCasos = Integer.valueOf(tokenizer.nextToken());
for (int i = 0; i < qteCasos; i++) {
line = br.readLine();
tokenizer = new StringTokenizer(line);
int numLinhas = Integer.valueOf(tokenizer.nextToken());
int numColunas = Integer.valueOf(tokenizer.nextToken());
char[][] mapa = new char[numLinhas][numColunas];
int pontoPartidaL = 0;
int pontoPartidaC = 0;
ArrayList<Posicao> filaVisitar = new ArrayList<Posicao>();
ArrayList<String> caracteres = new ArrayList<String>();
for (int j = 0; j < numLinhas; j++) {
line = br.readLine();
for (int k = 0; k < numColunas; k++) {
mapa[j][k] = line.charAt(k);
if (!caracteres.contains(mapa[j][k]+"")) {
caracteres.add(mapa[j][k]+"");
}
filaVisitar.add(new Posicao(j, k));
}
}
Resultado[] resultado = new Resultado[caracteres.size()];
for (int j = 0; j < caracteres.size(); j++) {
resultado[j] = new Resultado();
}
int resposta = 0;
System.out.println("World #" + (i+1));
for (int j = 0; j < caracteres.size(); j++) {
resposta = busca(mapa, filaVisitar, caracteres.get(j).charAt(0), numLinhas, numColunas);
resultado[j].letra = caracteres.get(j).charAt(0);
resultado[j].vezes = resposta;
}
Arrays.sort(resultado, 0, caracteres.size(), new Comparator<Resultado>() {
@Override
public int compare(Resultado r1, Resultado r2)
{
if (r1.vezes < r2.vezes) {
return +1;
}
else if (r1.vezes == r2.vezes) {
if (r1.letra < r2.letra) {
return -1;
}
else if (r1.letra == r2.letra) {
return 0;
}
else {
return +1;
}
}
else {
return -1;
}
}
});
for (int j = 0; j < caracteres.size(); j++) {
System.out.println(resultado[j].letra + ": " + resultado[j].vezes);
}
}
return;
}
}
import java.util.*;
class Main {
class Posicao {
public Posicao(int l, int c) {
linha = l;
coluna = c;
}
public int linha;
public int coluna;
}
class Resultado {
public char letra;
public int vezes;
}
public static void main(String[] args) throws NumberFormatException, IOException {
Main processando = new Main();
processando.processa();
System.exit(0);
}
int busca(char[][] mapa, ArrayList<Posicao> filaVisitar, char caracteres, int numLinhas, int numColunas) {
int[][] matriz = new int[numLinhas][numColunas];
for (int i = 0; i < numLinhas; i++) {
for (int j = 0; j < numColunas; j++) {
matriz[i][j] = -1;
}
}
int lin = 0;
int col = 0;
ArrayList<Posicao> filaVisitados = new ArrayList<Posicao>();
filaVisitados.add(new Posicao(0, 0));
int[] vetorLinha = {0,0,+1,-1,-1,+1,-1,+1};
int[] vetorColuna = {-1,+1,0,0,-1,+1,+1,-1};
int inicioFila = 0;
int contador = 0;
int contador2 = 0;
int contadorC = 0;
boolean incrementou = false;
while (filaVisitados.size() != inicioFila) {
lin = filaVisitados.get(inicioFila).linha;
col = filaVisitados.get(inicioFila).coluna;
for (int i = 0; i < 4; i++) {
int nLinha = lin+vetorLinha[i];
int nColuna = col+vetorColuna[i];
if (nLinha >= 0 && nLinha < numLinhas && nColuna >= 0 && nColuna < numColunas) {
if (matriz[nLinha][nColuna] == -1) {
if (mapa[nLinha][nColuna] == caracteres) {
incrementou = true;
matriz[nLinha][nColuna] = contador;
filaVisitados.add(new Posicao(nLinha, nColuna));
}
}
}
}
inicioFila++;
if (filaVisitar.size() > 0 && contador2 < filaVisitar.size() && filaVisitados.size() == inicioFila) {
filaVisitados.add(filaVisitar.get(contador2));
if (incrementou) {
contador++;
incrementou = false;
}
contador2++;
}
}
return contador;
}
void processa() throws NumberFormatException, IOException {
String line = "";
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
line = br.readLine();
StringTokenizer tokenizer = new StringTokenizer(line);
int qteCasos = Integer.valueOf(tokenizer.nextToken());
for (int i = 0; i < qteCasos; i++) {
line = br.readLine();
tokenizer = new StringTokenizer(line);
int numLinhas = Integer.valueOf(tokenizer.nextToken());
int numColunas = Integer.valueOf(tokenizer.nextToken());
char[][] mapa = new char[numLinhas][numColunas];
int pontoPartidaL = 0;
int pontoPartidaC = 0;
ArrayList<Posicao> filaVisitar = new ArrayList<Posicao>();
ArrayList<String> caracteres = new ArrayList<String>();
for (int j = 0; j < numLinhas; j++) {
line = br.readLine();
for (int k = 0; k < numColunas; k++) {
mapa[j][k] = line.charAt(k);
if (!caracteres.contains(mapa[j][k]+"")) {
caracteres.add(mapa[j][k]+"");
}
filaVisitar.add(new Posicao(j, k));
}
}
Resultado[] resultado = new Resultado[caracteres.size()];
for (int j = 0; j < caracteres.size(); j++) {
resultado[j] = new Resultado();
}
int resposta = 0;
System.out.println("World #" + (i+1));
for (int j = 0; j < caracteres.size(); j++) {
resposta = busca(mapa, filaVisitar, caracteres.get(j).charAt(0), numLinhas, numColunas);
resultado[j].letra = caracteres.get(j).charAt(0);
resultado[j].vezes = resposta;
}
Arrays.sort(resultado, 0, caracteres.size(), new Comparator<Resultado>() {
@Override
public int compare(Resultado r1, Resultado r2)
{
if (r1.vezes < r2.vezes) {
return +1;
}
else if (r1.vezes == r2.vezes) {
if (r1.letra < r2.letra) {
return -1;
}
else if (r1.letra == r2.letra) {
return 0;
}
else {
return +1;
}
}
else {
return -1;
}
}
});
for (int j = 0; j < caracteres.size(); j++) {
System.out.println(resultado[j].letra + ": " + resultado[j].vezes);
}
}
return;
}
}
Comments
Post a Comment