(UVA) 10093 - An Easy Problem! - Solução

import java.io.*;
import java.util.*;
import java.lang.Math;
import java.math.*;

class Main {
    public static void main(String[] args) throws NumberFormatException, IOException {
        Main processando = new Main();
        processando.takeInput();
       
        System.exit(0);
    }
   
    void takeInput() throws NumberFormatException, IOException {
        String line = "";

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
               
        while ((line = br.readLine()) != null) {
            // Lê tamanho da linha de entrada
            Integer tamanho = line.length();
           
            ArrayList<Integer> vetor = new ArrayList<Integer>();
           
            int[][] valoresElevados = new int[70][tamanho];
                       
            Integer i;              
            // converte todos os valores para seus valores inteiros equivalentes        
            for (i = 0; i < tamanho; i++) {
                if (line.charAt(i) >= '0' && line.charAt(i) <= '9') {
                    vetor.add(line.charAt(i)-'0');
                }
                else if (line.charAt(i) >= 'A' && line.charAt(i) <= 'Z') {
                    vetor.add(line.charAt(i)-'A'+10);
                }
                else if (line.charAt(i) >= 'a' && line.charAt(i) <= 'z') {
                    vetor.add(line.charAt(i)-'a'+10+26);
                }
            }
            // para tirar os + e -
            tamanho = vetor.size();
           
            Integer j;
            for (i = 2; i < 63; i++) {
                Integer resultado = 1;
                for (j = tamanho-1; j >= 0; j--) {
                    // para obter o real valor do número em determinada base i
                    resultado = (resultado * i)%(i-1);
                    valoresElevados[i][j] = vetor.get(j)*resultado;
                }
            }

            boolean pula = false;
            boolean possivel = false;
            // a partir da base 2 até a base 62
            for (i = 2; i < 63; i++) {
                Integer soma = 0;
               
                // de acordo com o tamanho das linhas da matriz
                for (j = 0; j < tamanho; j++) {
                    // se o valor é maior ou igual do que a base, não vai fazer cálculo
                    if (vetor.get(j) >= i) {
                        pula = true;
                        break;
                    }
                    // calcula a soma com base na derivada
                    soma += (valoresElevados[i][j]%(i-1));
                }
               
                if (pula == true) {
                    pula = false;               
                    continue;
                }
                           
                if (soma%(i-1) == 0) {
                    System.out.println(i);
                    possivel = true;
                    break;
                }
               
            }
           
            if (possivel == false) {
                System.out.println("such number is impossible!");
            }
                       
        }
             
        return;
    }
}

Comments

Popular posts from this blog

(Coderbyte) Dash Insert II - Solução

(Coderbyte) Run Length - Solução

(Coderbyte) Counting Minutes I - Solução