Classificação de problemas
Os problemas trabalhados desde que o projeto teve início estão sendo classificados e documentados. Os dados aqui apresentados são resultantes das fontes bibliográficas utilizadas e das experiências para a resolução de cada um dos problemas. Agradecemos, em especial, a colaboração de Paulo Daniel Gonçalves, que atuou como monitor do projeto em 2012 e 2013.
Índice
Tabela de classificação de problemas
Problema | Classificação | Dificuldade | Observações | Lista de usos | Referências |
---|---|---|---|---|---|
Aero | Adhoc/Contagem | Fácil | Contar quantas vezes cada aeroporto aparece na lista de vôos, e por fim imprimir o(s) maior(es) valor(es). | 2º encontro 2013 | |
Ants, Colônia de Formigas | Grafos | Médio | Floyd-Warshall deve resolver (Caminho mínimo de qualquer nó para qualquer nó). Porém não sei se os limites permitem isso, preciso verificar. | Seletiva 2012 | URI 1135 |
Beldades, Ordenação por Tamanho | Ordenação | Fácil | Ordenação de Strings e Contagem de repetições | Seletiva 2012, 2ª seletiva 2013 | URI 1244 |
Bit | Aritmética e Álgebra | Fácil | É necessário dividir a quantia de saque desejada pelos valores das notas disponiveis, a divisão deve ser feita na ordem da maior nota para menor. | 1º encontro 2013 | |
Botas, Botas Perdidas | Adhoc/Contagem | Fácil | A partir de uma lista de botas, contar pares de botas (mesmo tamanho, pés diferentes). | 3º encontro 2013 | URI 1245 |
Decoder, The Decoder | Strings/Tabela ASCII | Fácil | Cifra de César, foi adicionado 7 a cada valor da string. Tratamento de valores da tabela ASC. | 1ª seletiva 2013 | UVA 458 |
Digitos Romanos, Contagem de Dígitos , Romam Digitis | Aritmética e Álgebra | Fácil | Lembra o problema do caixa, de retornar o menor número de notas de dinheiro. | 1ª seletiva 2013 | URI 1138, UVA 344 |
Eletricity | Aritmética e Álgebra | Fácil | Verifica as datas que estão em sequência válida (possível de calcular a diferença), calcula a diferença de consumo entre elas, e apresenta o resultado. | Seletiva 2012 | |
Espelho Espelho Meu, Mirror, Mirror | Adhoc/Matrizes | Fácil | Operações básicas sobre uma matriz, como rotacionar valores. | 1ª seletiva 2013 | UVA 466 |
Fatores, Fatores e Múltiplos | Teoria dos Números/Analise combinatoria | Difícil | 1ª seletiva 2013 | URI 1056, ICPC 2013 | |
Fatorial, Fatorial Novamente! | Aritmética e Álgebra | Fácil | Lembra uma mudança de base, onde cada posição vale N!, e N é o nº da posição do dígito. | Seletiva 2012, 2ª seletiva 2013 | URI 1429 |
Fechem as portas | Aritmética e Álgebra/Vetor | Fácil | Parece ser apenas percorrer um vetor invertendo o estado de sua posição, os índices são múltiplos de uma variável de controle, e por fim imprimir os índices das posições que contém um determinado estado. | 2ª seletiva 2013 | URI 1371 |
Feynman, , | Combinatória/Aritmética e Álgebra | Fácil/Médio | A quantidade de quadrados é uma recorrência: Realizar o somatório N * N + (N-1) * (N-1) + (N-2) * (N-2) + ... 1 * 1 para encontrar o resultado. | Seletiva 2012 | URI 1323, UVA 12149 |
Frotatax | Aritmética e Álgebra | Fácil | Multiplica-se o valor de KM/L do combustível pelo seu preço, e compara. | 1º encontro 2013 | |
Hist, Maior Retângulo em um Histograma | Adhoc/Vetor | Médio | Salva os números em um vetor, e percorre atualizando os valores, se for igual ao atual então modifica para 1, se não incrementa em 1, e vai incrementando um contador com o valor atual. | Seletiva 2012 | URI 1683 |
Matrioshkas | Estrutura de Dados/Pilha | Fácil/Médio | Verificar uma sequência de bonecas matrioshkas está correta (Se uma boneca cabe dentro de outra, levando em consideração que já pode ter outras dentro dela). | 5º encontro 2013 | |
Mean, Problema com Mediana e Média | Aritmética e Álgebra | Fácil/Médio | Utiliza a fórmula (A + B + C)/3 = min(A,B). | Seletiva 2012 | URI 1379 |
Movimentos, Trilhos Novamente... Traçando Movimentos | Adhoc/Matriz | Fácil | Verificar se a partir de uma posição da matriz é possível se deslocar na matriz para outra posição (Está dentro dos limites, o espaço não está ocupado). | 3º encontro 2013 | URI 1063 |
Ordenação | Ordenação | Fácil | Ordenar uma sequência de números (Acho que a saída do último exemplo está errada no pdf, caso contrário não entendi o problema). | Seletiva 2012 | |
Palavras Fibonacci; Fibonacci, Quantas Chamadas? | Strings/Programação dinamica | Difícil | 1ª seletiva 2013 | ICPC 2012 | URI 1029 |
Parenteses, Balanço de Parênteses I | Estrutura de Dados/Pilha | Fácil | Verificar se os parênteses abre e fecham em ordem. | 3º encontro 2013 | URI 1068 |
Permutations, Gerando Permutações Ordenadas Rapidamente | Combinatória | Médio | Enunciado complexo. | 2º encontro 2013 | URI 1401 |
Primo, Número primo | Teoria dos Números | Fácil | Verificar se um número é primo. | 3º encontro 2013 | URI 1165 |
Quadrado, Quadrado de Pares | Aritmética e Álgebra | Fácil | Imprimir o quadrado de um número. | 1º encontro 2013 | URI 1073 |
Stack'em up | Adhoc/Vetor | Fácil/Médio | Começa com um baralho ordenado, aplica as trocas do vetor conforme os embaralhamentos, e imprime o resultado. | 5º encontro 2013, 1ª seletiva 2013 | UVA 10205 |
Tic-Tac-Toe, Jogo da Velha | Adhoc/Matriz/Contagem | Fácil | Como X inicia jogando, é necessário verificar se o número de O's é igual ou apenas uma unidade menor que o número de X's. | 1º encontro 2013 | URI 1130 |
Trilhos, Rails | Estrutura de Dados/Pilha | Fácil | Enunciado complexo. | 1ª seletiva 2013 | URI 1062, UVA 514 |
Classificação de problemas
<html> <head> <meta charset="utf-8"> <title>Lista de Problemas</title> <style> *{ box-sizing: border-box; }
#campoBusca{ background-position: 10px 12px; background-repeat: no-repeat; width: 80%; font-size: 16px; padding: 12px 20px 12px 10px; border: 1px solid #ddd; margin-bottom: 12px; }
table{ font-family: Arial, sans-serif; border-collapse: collapse; width: 100%; }
th, td{ border: 1px solid #dddddd; text-align: left; padding: 8px; }
th{ background-color: #dddddd; }
.button{
position: relative;
border: thin;
font-size: 20px;
color: black;
padding: 10px;
width: 250px;
text-align: center;
transition-duration: 0.4s;
text-decoration: none;
overflow: hidden;
cursor: pointer;
}
.button:after{ content: ""; background: grey; display: block; position: absolute; padding-top: 300%; padding-left: 350%; margin-left: -20px!important; margin-top: -120%; opacity: 0; transition: all 0.8s }
.button:active:after{ padding: 0; margin: 0; opacity: 1; transition: 0s; } </style>
<script> window.onload = init;
function buscar(){ var textField, filter, tabela, linhas, td, i; textField = document.getElementById("campoBusca"); filter = textField.value.toUpperCase(); tabela = document.getElementById("tabelaDesafios"); linhas = tabela.getElementsByTagName("tr");
for(i = 0; i < linhas.length; i++){ td = linhas[i].getElementsByTagName("td")[0];
if(td){ if(td.innerHTML.toUpperCase().indexOf(filter) > -1){ linhas[i].style.display = ""; }else{ linhas[i].style.display = "none"; } } } }
function init(){ ocultaColuna(5); ocultaColuna(6); }
function ocultaColunaLogica(indice){ document.getElementById("exibirLogicaButton").value = "Exibir Lógica"; document.getElementById("exibirLogicaButton").setAttribute("onclick","mostraColunaLogica(" + indice + ");");
ocultaColuna(indice); }
function mostraColunaLogica(indice){ document.getElementById("exibirLogicaButton").value = "Ocultar Lógica"; document.getElementById("exibirLogicaButton").setAttribute("onclick","ocultaColunaLogica(" + indice + ");");
mostraColuna(indice); }
function ocultaColunaCodigo(indice){ document.getElementById("exibirCodigoButton").value = "Exibir Código"; document.getElementById("exibirCodigoButton").setAttribute("onclick","mostraColunaCodigo(" + indice + ");");
ocultaColuna(indice); }
function mostraColunaCodigo(indice){ document.getElementById("exibirCodigoButton").value = "Ocultar Código"; document.getElementById("exibirCodigoButton").setAttribute("onclick","ocultaColunaCodigo(" + indice + ");");
mostraColuna(indice); }
function ocultaColuna(indice){ var tabela = document.getElementById("tabelaDesafios"); for(var i = 0; i < tabela.rows.length; i++){ tabela.rows[i].cells[indice].style.display = "none"; } }
function mostraColuna(indice){ var tabela = document.getElementById("tabelaDesafios"); for(var i = 0; i < tabela.rows.length; i++){ tabela.rows[i].cells[indice].style.display = ""; } }
function abrirJanelaDesafio(nome, textAreaCols, textAreaRows, windowWidth, windowsHeight){ var nodeCodigo = document.getElementById(nome), htmlContent = nodeCodigo.innerHTML, textContent = nodeCodigo.textContent; var textNode = document.createElement("TEXTAREA"); textNode.setAttribute('cols', textAreaCols); textNode.setAttribute('rows', textAreaRows); var text = document.createTextNode(nodeCodigo.value); textNode.appendChild(text);
var attributes = "width= " + windowWidth + ", height= " + windowsHeight + ", resizable=1"; var newWindow = window.open(, '_blank', attributes); newWindow.document.body.appendChild(textNode); } </script> </head>
<body>
Lista de Problemas
<input type="text" id="campoBusca" onkeyup="buscar()" placeholder="Buscar por problema" title="Insira o nome do problema" style="width: 61%">
<input id="exibirLogicaButton" class="button" type="button" value="Exibir Lógica" onclick="mostraColunaLogica(5);">
<input id="exibirCodigoButton" class="button" type="button" value="Exibir Código" onclick="mostraColunaCodigo(6);">
Problema | Classificação | Dificuldade | Lista de Usos | Referências | Lógica | Código |
---|---|---|---|---|---|---|
OBI | Repetição/Vetor | Muito Fácil | OBI 2008 (1º Fase) | http://olimpiada.ic.unicamp.br/pratique/programacao/nivelj/2008f1pj_obi | Devemos apenas percorrer o número total de competidores para somar a nota nas fases, verificar se ele será convidade, e caso seja incremantar o total de convidados. |
<button class="exibirCodigo" onclick="abrirJanelaDesafio('OBICode','40','25',400,450);">Exibir</button> |
Auto-Estrada | Seleção/Repetição | Muito Fácil | OBI 2008 (2º Fase) | http://olimpiada.ic.unicamp.br/pratique/programacao/nivelj/2008f2pj_auto | Cada bloco possui um código, sabendo disso, apenas precisamos saber quantos painéis serão instalados ao decorrer da estrada por meio dos códigos dos blocos, cada código possui uma quantidade dada de refletores, dessa forma, percorremos por uma estrutura de repetição o comprimento da auto-estrada, e verificamos cada códgio somando o valor dele à quantidade de painéis que devem ser instalados. |
<button class="exibirCodigo" onclick="abrirJanelaDesafio('AutoEstradaCode','50','25',450,450);">Exibir</button> |
Mini-Calculadora | Matemática (MDC)/Repetição/Seleção | Fácil | OBI 2008 (2º Fase) | http://olimpiada.ic.unicamp.br/pratique/programacao/nivelj/2008f2pj_minicalc | No problema se faz necessário o uso do MDC (Máximo Divisor Comum) que vemos na escola, para que se obtenha o menor resultado possível e que possa ser exibido levando em consideração o tamanho máximo do número de bits. Vale lembrar que o enunciado está confuso em não especificar que o número N de bits que será lido, já é o total de bits pra ser considerado, então não é necessário fazer potência desse valor para descobrir o total de bits. |
<button class="exibirCodigo" onclick="abrirJanelaDesafio('MiniCalculadoraCode','50','25',450,450);">Exibir</button> |
Aviões de Papel | Seleção | Muito Fácil | OBI 2009 (1º Fase) | http://olimpiada.ic.unicamp.br/pratique/programacao/nivelj/2009f1pj_papel | Este é um simples problema de lógica, onde, se o número de folhas dividido pela quantidade que cada competidor deve receber for maior ou igual a quantidade de competidores, então cada competidor receberá a quantidade requerida de folhas. |
<button class="exibirCodigo" onclick="abrirJanelaDesafio('AvioesDePapelCode','40','25',400,450);">Exibir</button> |
Vestibular | Strings/Repetição/Seleção | Fácil | OBI 2009 (1º Fase) | http://olimpiada.ic.unicamp.br/pratique/programacao/nivelj/2008f1pj_vestib | Basta ler as strings necessárias, e compará-las, caracter por caracter. |
<button class="exibirCodigo" onclick="abrirJanelaDesafio('VestibularCode','60','30',600,500);">Exibir</button> |
</body>
</html>
Contribuintes
- Ana Elisa T. P. da Palma (Autor), Paulo Daniel Gonçalves (Autor), Mauro Henrique Mulati.