sexta-feira, 26 de maio de 2017

OBI 2017 - Game-10



Essa é a resolução da questão 1 da prova da fase Universitária da OBI denotada por “Game-10”. Nessa questão seu objetivo é descobrir o numero de vezes que o jogador precisa apertar o botão para movimentar o avião até a mesma posição do disco voador para atirar.

O primeiro passo é fazer a leitura das variáveis na ordem pedida (números de posições, posição do disco voador e posição do avião) o segundo passo é criar uma estrutura encadeada para checar as possibilidades dos valores inseridos:

1° Caso: O primeiro caso ocorre quando a posição do avião for maior que a posição do disco voador, neste caso, deve subtrair a posição do avião pelo número de posições e depois somar com a posição do disco voador.

if(a>d){
r = (n-a)+d;
}

2º Caso: No segundo caso a posição do avião for menor que a posição do disco voador, neste caso simplesmente deve subtrair a posição do disco voador pela posição do avião .

else {
r = (d-a);
}

Pronto, agora é só imprimir o resultado!!

OBI 2017 - Palíndroma


Esta é a resolução da questão 2 da prova da fase Universitária da OBI-2017, que consiste em verificar o número mínimo de palíndromas que uma string pode ser dividida. A string é chamada de palíndroma se a sequência de caracteres da esquerda para a direita é igual à sequência da direita pra esquerda. Quando uma palavra não for palíndroma, devemos subdividi-la em partes menores (substrings) que sejam palíndromas.

Primeiramente, criaremos uma função para verificar se a sequência forma uma palíndroma e, caso não for, retornar um valor lógico falso.

int pali(int tam, char *nome){
int i,ok=1,j=tam-1;
for(i=0;i<tam/2;i++){
    if(nome[i]!=nome[j]){
        ok=0;
        break;}
    j--;}
 return ok;
} 

Após isto devemos pensar na subdivisão da entrada em substrings, ou seja, gerar todas as substrings e verificar se formam palíndromas e  armazená-las em uma variável global. Por fim retornará a quantidade total das substrings. A cada repetição do laço, geraremos uma substring e toda vez que ela for palíndroma, armazenaremos ela na matriz palíndroma.

int gera_todas_pali(int tam, char *nome){
int i,j,k=0,r,t;
char aux[tam+1];
for(i=0;i

Agora precisamos encontrar o menor número de conjuntos possíveis. Em nossa primeira condição, iremos comparar se a nossa substring pertence a posição atual da sequência, na segunda verificamos se essa substring é maior, e caso ela for utilizaremos a função 'substring' para verificar se ela encaixa na sequência. Na terceira condição, verificamos se elas são as mesmas. Por fim, incrementamos o contador i com o tamanho da substring e o total.

int verifica_menor_palindroma(int k, int tam, char *str){
int i=0,j,maior,total=0;
char aux[MAX];
while(i<tam){
  maior=0;
  for(j=0;j<k;j++){
    if(palindroma[j][0]==str[i]){
      int t=strlen(palindroma[j]);
      if(t>maior){
       substring(str, aux, i, t);
       int ok=strcmp(aux,palindroma[j]);
 if(!ok){
          maior=t;
        }}}}
    i+=maior;
   total++;}
return total;
}

A função verifica_menor_palindroma utiliza a função substring.

void substring(char *s, char *sub, int p, int l) {
   int c = 0;
 
   while (c < l) {
      sub[c] = s[p+c];
      c++;
   }
   sub[c] = '\0';
}

Pronto terminamos, agora só é preciso fazer as leituras e chamar as funções na função principal main.

Coded by: André da Cunha Ribeiro.


Resumão da OBI 2017



No dia 12 de maio de 2017 ocorreu a XIX Olimpíada Brasileira de Informática, com isso faremos aqui um resumo das questões da prova da modalidade universitária.


No ano de 2017 houve mudanças em relação ao número de questões e o tempo de duração de aplicação da prova. A prova deste ano teve 3 questões e 2 horas de duração, já a de 2016 teve 5 questões e 5 horas de duração. No ano anterior o aluno tinha em 1 hora para resolver cada questão já este ano ele passou a ter 40 minutos, por outro lado o número de questões do ano anterior é maior e isso implica em um maior desgaste do aluno no final da prova. Já este ano o número de questões foi menor assim não havendo tanto desgaste do aluno no final da prova.

Game-10, Palíndromo e Botas Trocadas estes são o nome das questões deste ano, cada uma aborda um tema diferente, sendo que o Game-10 aborda mais o conceito matemático, o Palíndromo aborda a manipulação de string e o Botas Trocadas aborda problemas de contagem.

Game-10

O segredo do game-10 está em descobrir se a posição do avião é maior ou menor que a posição do disco voador. O primeiro caso ocorre quando a posição do avião for maior que a posição do disco voador, neste caso, você deve subtrair a posição do avião pelo número de posições e depois somar com a posição do disco voador. No segundo caso a posição do avião for menor que a posição do disco voador, neste caso você simplesmente deve subtrair a posição do avião pela posição do disco voador.

Palíndromo


Pois bem a questão de maior dificuldade da prova (ou não). Nesta questão temos que verificar o número mínimo de palavras palíndromas em uma cadeia de caracteres. Uma solução para essa questão seria separar todas as substrings palíndroma, após essa divisão você concatenaria as maiores substrings de forma que os mesmos caracteres não se repita e no final dessa concatenação obtenha uma string igual a original. A partir desse processo é só utilizar um contador para contar as strings utilizadas na concatenação.

Botas Trocadas

O seu objetivo em Botas Trocadas é dizer quantos pares de botas (de mesmo tamanho) temos em uma determinada quantidade de botas. Para esse problema pode se criar dois vetores, um para o lado esquerdo e o outro para o direito, os índices será o tamanho das botas, e para cada valor lido adicionarmos na posição do vetor (para isso ambos vetores tem que estar zerado). Por fim é só fazer somatório de todas posições dos dois vetores com menor valor.




OBI 2017 - Botas Trocadas


Essa é a resolução da questão 3 da prova da fase Universitária da OBI denotada por “Botas Trocadas”. Nessa questão seu objetivo é indicar o número total de pares de botas correto que podem ser formados, um par de botas correto seria duas botas onde seu tamanho é igual mas são de pés diferentes. Logo de inicio podemos criar dois vetores um para o pé direito e outro para o pé esquerdo ambos os vetores tem que ser zerados, esses vetores serão usados para mostrar quantos pés de botas de determinado tamanho. Já o tamanho do vetor será de 60-30 que é a variação do tamanho das botas.

 int i;  
 int vetorD[60-30];  
 int vetorE[60-30];  
 for(i = 0;i < 60-30; i++){  
   vetorD[i] = 0;  
   vetorE[i] = 0;  
 }  

Agora teremos que fazer as leituras, a primeira linha contem um valor de n que é o número de botas, e as próximas n linhas serão as botas (tamanho e o pé). Quando lermos uma das n botas adicionaremos mais 1 a posição de tamanho-30 (esse tamanho se da pelo motivo da posição zero ser o tamanho 30 e a posição 30 ser o tamanho 60) do vetor responsável pelo respectivo pé.

 int n;  
 int tamanho;  
 char pe;  
 scanf("%d", &n);  
 for(i = 0 ; i < n; i++){  
   scanf("%d %c", &tamanho, &pe);  
   if(pe == 'D')  
     vetorD[tamanho-30]++;  
   else  
     vetorE[tamanho-30]++;  
 }  

Por fim temos que fazer um somatório onde faremos a soma de todas as posições com o menor valor e imprimindo ela no final.


 int somatorio = 0;  
 for(i = 0 ; i < 60-30; i++){  
   if(vetorD[i] < vetorE[i])  
     somatorio+=vetorD[i];  
   else  
     somatorio+=vetorE[i];  
 }  
 printf("%d\n", somatorio);  

Esse será o código completo.


 #include <stdio.h>  
 int main(void){  
   //PARTE 1  
   int i;  
   int vetorD[60-30];  
   int vetorE[60-30];  
   for(i = 0;i < 60-30; i++){  
     vetorD[i] = 0;  
     vetorE[i] = 0;  
   }  
   //PARTE 2  
   int n;  
   int tamanho;  
   char pe;  
   scanf("%d", &n);  
   for(i = 0 ; i < n; i++){  
     scanf("%d %c", &tamanho, &pe);  
     if(pe == 'D')  
       vetorD[tamanho-30]++;  
     else  
       vetorE[tamanho-30]++;  
   }  
   //PARTE 3  
   int somatorio = 0;  
   for(i = 0 ; i < 60-30; i++){  
     if(vetorD[i] < vetorE[i])  
       somatorio+=vetorD[i];  
     else  
       somatorio+=vetorE[i];  
   }  
   printf("%d\n", somatorio);  
   return 0;  
 }  

quarta-feira, 26 de abril de 2017

Divulgação do Projeto.







Foi solicitado ao coordenador do projeto que fizessem um vídeo de ate 3 minutos divulgando o projeto IF Goiano - Campus Rio Verde na OBI. O professor André criou o roteiro e os alunos que participam do projeto juntamente com alguns alunos voluntários gravaram o vídeo, e o professor Marlus deu todo o suporte necessário para a gravação desde os equipamentos necessários até a edição do vídeo. 

No dia 31/03 nos reunimos para a gravação, participaram os alunos Manoel Victor, Athos José e Gabriel Medeiros, bolsistas do projeto, e os alunos Higor Henrique e Barbara Castro, alunos voluntários do curso de Ciência da Computação que já fizeram a prova da OBI no ano de 2016 e os professores André da Cunha e Marlus Dias. O resultado final do vídeo se encontra no canal do youtube do curso de Ciência da Computação.




sexta-feira, 31 de março de 2017

Olimpíada Brasileira de Informática 2017


No dia 06 de Março de 2017, foram abertas as inscrições para a 19ª Olimpíada Brasileira de Informática, que, diferentemente das Olimpíadas passadas, agora possui 3 fases de provas a serem disputadas: Fase Local, Fase Estadual e Fase Nacional.
As provas das fases locais e estaduais serão realizadas nas escolas onde o aluno se inscreveu, adicionalmente, as inscrições das escolas para aplicar as provas terminam no dia 05 de Maio de 2017. Um ponto interessante da prova este ano é que alunos poderão participar da prova sem ser inscritos, uma vez que as inscrições dos competidores vão até 4 dias depois das provas, ou seja, elas vão até o dia 16 de Maio de 2017.

A seguir o quadro das datas das provas das primeiras fases:

Para alunos do IFGoiano - Campus Rio Verde utilize o link a seguir: goo.gl/X4T36Q
Copy sho

sexta-feira, 24 de março de 2017

Maratona de Programação 2017

Maratona de Programação 2017

Ontem dia 23 de março foi definido os os dias em que ocorrera a maratona de programação 2017. A primeira fase ocorrera no dia 9 de setembro de 2017, já a final brasileira ocorrera em Foz do Iguaçu nos dias 10 e 11 de novembro de 2017.




Por que participar?

Existem diversos motivos pelos quais uma pessoa pode se interessar em participar de uma competição de programação. Afim de motivar algumas pessoas, apresentarei alguns desses motivos.

Desenvolvimento Pessoal

Programar em competições de programação requer do competidor está pronto para resolver problemas em pouco tempo. Dessa forma, com a prática, o competidor consegue desenvolver uma habilidade de programar muito mais refinada.

Currículo

A participação em competições pode ser uma boa chance para ter uma maior visibilidade para o seu currículo, estar entre os melhores da universidade, estar entre os melhores do estado, estar entre os melhores do pais. Pode ter certeza que você estará sendo observado por alguém.

Viagens

O melhor de tudo são as viagens, quem não gosta? É bem provável que você viajara na primeira fase, a não ser que você seja da cidade onde esteja ocorrendo a competição.

Prêmios

Tanto a OBI quanto a Maratona oferecem medalhas para os primeiros colocados, a maratona oferece medalhas para os 10 primeiros colocados e um troféu para o primeiro.

Bom listei aqui algumas das vantagens de participar de competições de programação, então estude muito e talvez nos veremos em algumas dessas competições.

segunda-feira, 10 de outubro de 2016

Entrevista com o professor André da Cunha Ribeiro




Entrevistamos o nosso orientador Dr. André da Cunha Ribeiro que tem doutorado em Engenharia e sistemas da computação pela COPPE-UFRJ e é professor no Instituto Federal Goiano – Campus Rio Verde. Conversamos um pouco sobre mais da OBI e como conheceu o projeto.
1 – Onde conheceu as Olímpiadas Brasileiras de Informática?
André - Em meio competitivo de programação e algoritmos foi em 2008 com a II OAH organizada pela Hostnet, para motivar os alunos a participarem, sendo que em 2009 me ausentei para fazer o doutorado na cidade do Rio de Janeiro, em 2010 tive um contato com as olimpíadas dentro da URFJ com pessoas que já estavam envolvidas. Quando voltei do doutorado em 2014 e iniciamos projeto “IFGoiano – Campus Rio Verde na OBI”.
2 – O que motivou a trazer a OBI para o IFGoiano?
André - Com o objetivo de ensinar programação aos alunos e estimular a aprendizagem de programação e lógica, desenvolvendo talentos para a informática ou na área de exatas. A OBI visa cumprir o papel de forma brilhante para descobrir talentos que estão espalhados pelo país e começou no IFGoiano – Campus Rio Verde em um projeto de extensão no ano de 2014 com os alunos Athos José e Fernando.
Depois passou para o CNPq para 6 bolsistas e recursos para viagens e aplicação de provas.

3 – Deseja futuramente expandir a área da programação pela OBI fora do IFGoiano?
André - Não. Talvez na reformulação, algum curso para comunidade possa acontecer.