(SPOJ) 3094 - Elementar, meu caro Watson! - Solução 1
Solução menos eficiente
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
Main processando = new Main();
processando.processa();
System.exit(0); }
static int gambis(BufferedReader br) throws NumberFormatException, IOException {
int n;
int resp = 0;
while (true) {
n = br.read();
if (n >= '0' && n <= '9') break;
}
while (true) {
resp = resp*10 + n-'0';
n = br.read();
if (n < '0' || n > '9') break;
}
return resp;
}
void processa() throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int qteInstancias = gambis(br);
for (int i = 0; i < qteInstancias; i++) {
ArrayList<Integer> visitados = new ArrayList<Integer>();
int qteNumeros = gambis(br);
int[] vetor = new int[qteNumeros];
int contador = 1;
int ciclo = 0;
int qteVisitados = 0;
for (int j = 0; j < qteNumeros; j++) {
visitados.add(j, 0);
}
for (int j = 0; j < qteNumeros; j++) {
vetor[j] = gambis(br);
if (vetor[j] == j+1) {
ciclo++;
visitados.set(vetor[j]-1, 1);
qteVisitados++;
}
}
for (int j = 0; qteVisitados < qteNumeros; j++) {
if (visitados.get(j) == 0 && vetor[j] != contador) {
int indice = vetor[j];
visitados.set(indice-1, 1);
qteVisitados++;
while (vetor[indice-1] != contador) {
indice = vetor[indice-1];
visitados.set(indice-1, 1);
qteVisitados++;
}
visitados.set(vetor[indice-1]-1, 1);
qteVisitados++;
ciclo++;
}
contador++;
}
bw.write((qteNumeros-ciclo) + "\n");
}
bw.flush();
bw.close();
return;
}
}
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
Main processando = new Main();
processando.processa();
System.exit(0); }
static int gambis(BufferedReader br) throws NumberFormatException, IOException {
int n;
int resp = 0;
while (true) {
n = br.read();
if (n >= '0' && n <= '9') break;
}
while (true) {
resp = resp*10 + n-'0';
n = br.read();
if (n < '0' || n > '9') break;
}
return resp;
}
void processa() throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int qteInstancias = gambis(br);
for (int i = 0; i < qteInstancias; i++) {
ArrayList<Integer> visitados = new ArrayList<Integer>();
int qteNumeros = gambis(br);
int[] vetor = new int[qteNumeros];
int contador = 1;
int ciclo = 0;
int qteVisitados = 0;
for (int j = 0; j < qteNumeros; j++) {
visitados.add(j, 0);
}
for (int j = 0; j < qteNumeros; j++) {
vetor[j] = gambis(br);
if (vetor[j] == j+1) {
ciclo++;
visitados.set(vetor[j]-1, 1);
qteVisitados++;
}
}
for (int j = 0; qteVisitados < qteNumeros; j++) {
if (visitados.get(j) == 0 && vetor[j] != contador) {
int indice = vetor[j];
visitados.set(indice-1, 1);
qteVisitados++;
while (vetor[indice-1] != contador) {
indice = vetor[indice-1];
visitados.set(indice-1, 1);
qteVisitados++;
}
visitados.set(vetor[indice-1]-1, 1);
qteVisitados++;
ciclo++;
}
contador++;
}
bw.write((qteNumeros-ciclo) + "\n");
}
bw.flush();
bw.close();
return;
}
}
Comments
Post a Comment