segunda-feira, 30 de abril de 2018

URI PROBLEMA 2136 - Amigos do Habay SOLUÇÃO EM C

URI Online Judge | 2136

Amigos do Habay

Por Joao Marcos Salvanini Bellini de Moraes, IFSULDEMINAS BR Brazil
Timelimit: 1
Todo final de ano ocorre uma festa na Instituição de Educação Fantástica (IEF). Logo no início de julho, são abertas as inscrições para participar dela. No momento da inscrição, o usuário pode escolher se quer ser "O Amigo do Habay" na festa ou não. O mais lógico seria escolher a opção Sim, afinal, é um privilégio ser O Amigo do Habay, já que ele é a pessoa mais descolada do IEF. Porém, há indivíduos que definitivamente não pretendem ser O Amigo do Habay, e por motivos desconhecidos.
Somente um será o escolhido. Em vista disso, muitos alunos que escolheram a opção Sim realizaram a inscrição diversas vezes para aumentar a própria probabilidade de ser O Amigo do Habay. O organizador geral da festa contratou você para organizar as inscrições do site, pois está havendo um spam de inscrições. O critério para ser o escolhido é a quantidade de letras do primeiro nome, e em caso de empate, vence aquele que realizou primeiro a inscrição. A organização final dos inscritos deverá seguir a ordem de escolha (Sim ou Não), mas respeitando a ordem alfabética.
OBS.: Ninguém que escolheu a opção Não realizou a inscrição mais de uma vez.

Entrada

A entrada contém somente um caso de teste. Cada linha é composta pelo primeiro nome do participante (sem espaços), seguido da opção YES (caso o usuário queira ser O Amigo do Habay) ou NO (caso não queira). A entrada termina assim que o usuário digita "FIM" (sem as aspas).

Saída

Seu programa deverá imprimir os inscritos pela ordem de escolha e por ordem alfabética, seguido do nome do vencedor. Imprima uma linha em branco entre a lista de inscritos e o nome do vencedor.



#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

typedef struct{
char nome[50]; 
char escolha[4];
} Candidato;

int compara(const void *, const void *);

int main(){
    Candidato candidato[10000];
    char esc[50];
    int i, j, escolhido;

    for(i = 0; scanf("%s %s", candidato[i].nome, candidato[i].escolha) &&
    strcmp(candidato[i].nome, "FIM") != 0; i++)
    for(j  = escolhido = 0; j < i; j++){
        if(!strcmp(candidato[escolhido].escolha, "YES")){
         if(!strcmp(candidato[j+1].escolha, "YES") && strlen(candidato[escolhido].nome) < strlen(candidato[j+1].nome))
    escolhido = j+1;
    }else{ 
        escolhido++;
        j++;
    }
    }
    strcpy(esc, candidato[escolhido].nome);

    qsort(candidato, i, sizeof(Candidato), compara);
    
    printf("%s\n",candidato[0].nome);

    for(j = 1; j < i; j++)
    if(strcmp(candidato[j].nome, candidato[j-1].nome))
         printf("%s\n",candidato[j].nome);

    printf("\nAmigo do Habay:\n%s\n", esc);
    return 0;
}

int compara(const void *p1, const void *p2){
Candidato *i = (Candidato *) p1, *j = (Candidato *) p2;
    
    if(strcmp(j->escolha, i->escolha) == 0)
        return strcmp(i->nome, j->nome);
    else 
    return strcmp(j->escolha, i->escolha);
}

URI PROBLEMA 2242 - Huaauhahhuahau SOLUÇÃO EM C

URI Online Judge | 2242

Huaauhahhuahau

Por Maratona de Programação da SBC 2016 BR Brazil
Timelimit: 1
Em chats, é muito comum entre jovens e adolescentes utilizar sequências de letras, que parecem muitas vezes aleatórias, para representar risadas. Alguns exemplos comuns são:
huaauhahhuahau
hehehehe
ahahahaha
jaisjjkasjksjjskjakijs
huehuehue
Cláudia é uma jovem programadora que ficou intrigada pela sonoridade das “risadas digitais”. Algumas delas ela nem mesmo consegue pronunciar! Mas ela percebeu que algumas delas parecem transmitir melhor o sentimento da risada que outras. A primeira coisa que ela percebeu é que as consoantes não interferem no quanto as risadas digitais influenciam na transmissão do sentimento. A segunda coisa que ela percebeu é que as risadas digitais mais engra¸cadas são aquelas em que as sequências de vogais são iguais quando lidas na ordem natural (da esquerda para a direita) ou na ordem inversa (da direita para a esquerda), ignorando as consoantes. Por exemplo, “hahaha” e “huaauhahhuahau” estão entre as risadas mais engraçadas, enquanto “riajkjdhhihhjak” e “huehuehue” não estão entre as mais engraçadas.
Cláudia está muito atarefada com a análise estatística das risadas digitais e pediu sua ajuda para escrever um programa que determine, para uma risada digital, se ela é das mais engraçadas ou não.

Entrada

A entrada é composta por uma linha, contendo uma sequência de no máximo 50 caracteres, formada apenas por letras minúsculas sem acentuação. As vogais são as letras ‘a’,‘e’,‘i’,‘o’,‘u’. A sequência contém pelo menos uma vogal.

Saída

Seu programa deve produzir uma linha contendo um caractere, “S” caso a risada seja das mais engra¸cadas, ou “N” caso contrário.



#include <stdio.h>

int main()
{
    int i, j=0, lnth;
    char x[60], y[60];
    scanf("%s", x);
    for(i=0; x[i]; i++)
    {
        if(x[i]=='a' || x[i]=='e' || x[i]=='i' || x[i]=='o' || x[i]=='u')
        {
            y[j] = x[i];
            j++;
        }
    }
    y[j] = '\0';
    lnth = strlen(y);
    for(i=0, j=lnth-1; i < lnth; i++, j--)
    {
        if(y[i] != y[j])
        {
            printf("N\n");
            return 0;
        }
    }
    printf("S\n");
    return 0;
}

sexta-feira, 27 de abril de 2018

URI PROBLEMA 2483 - Feliz Nataaal! SOLUÇÃO EM C

URI Online Judge | 2483

Feliz Nataaal!

Por Jessica Dagostini, URI Online Judge BR Brazil
Timelimit: 1
Você fica tão feliz no natal que tem vontade de gritar para todo mundo: "Feliz natal!!". Pra colocar toda essa felicidade pra fora, você montou um programa que, colocado um índice I de felicidade, seu grito de natal é mais animado.

Entrada

A entrada é composta por um inteiro (1 < I ≤ 104) que representa o índice de felicidade.

Saída

A saída é composta pela frase "Feliz natal!", sendo repetidas I vezes a última letra a da frase. Uma quebra de linha é necessária após a impressão da frase.



#include <stdio.h>

int main() {
int i,x;
scanf("%d",&i);
printf("Feliz nat");
for(x=0;x<i;x++){
printf("a");
}
printf("l!\n");
    return 0;
}

URI PROBLEMA 2356 - Bactéria I SOLUÇÃO EM C

URI Online Judge | 2356

Bactéria I

Por Lucas Maciel, UFMG BR Brazil
Timelimit: 1
Dr. Henrique realmente adora suas pesquisas com bactérias. Na tentativa de criar bactérias mais resistentes a antibióticos, avaliou o DNA de algumas delas e percebeu uma semelhança nas bactérias que eram mais resistentes do que as demais. Todas elas possuiam uma parte do código genético igual (composto pelas proteínas A, C, G, T). Logo constatou que aquele trecho de código genético é o que define se uma bactéria é resistente ou não. Assim, Dr. Henrique pediu para que você fizesse um programa que avalie se uma bactéria é resistente dado seu DNA e o código genético que leva a resistência.

Entrada

Cada caso teste contém duas strings, D e S, cada qual em uma linha, e representam o DNA da bactéria e a sequência de código genético que leva a resistência. 1 ≤ |D|, |S| ≤ 100. As strings são compostas apenas pelos caracteres: A, C, G, T.

Saída

Imprima uma linha por cada caso teste, contendo a string "Resistente" (sem aspas) caso a bactéria possua o código genético requerido em seu DNA, ou a string "Nao resistente" (sem aspas) caso contrário.



#include <stdio.h>
#include <string.h>

int main(){
char d[101],s[101],dc[101];
int x,y,z,r;
while(scanf("%s %s",d,s)!=EOF){
for(x=0;x<strlen(d);x++){
for(y=0,z=x;y<strlen(d);y++,z++){
dc[y]=d[z];
}
dc[y]='\0';
if(strncmp(s,dc,strlen(s))==0){
r=1;
break;
}else{
r=0;
}
}
if(r==1)
printf("Resistente\n");
else
printf("Nao resistente\n");
r=0;
}
return 0;
}

URI PROBLEMA 1171 - Frequência de Números SOLUÇÃO EM C

URI Online Judge | 1171

Frequência de Números

Adaptado por Neilor Tonin, URI  Brasil
Timelimit: 1
Neste problema sua tarefa será ler vários números e em seguida dizer quantas vezes cada número aparece na entrada de dados, ou seja, deve-se escrever cada um dos valores distintos que aparecem na entrada por ordem crescente de valor.

Entrada

A entrada contém apenas 1 caso de teste. A primeira linha de entrada contem um único inteiro N, que indica a quantidade de valores que serão lidos para X (1 ≤ X ≤ 2000) logo em seguida. Com certeza cada número não aparecerá mais do que 20 vezes na entrada de dados.

Saída

Imprima a saída de acordo com o exemplo fornecido abaixo, indicando quantas vezes cada um deles aparece na entrada por ordem crescente de valor.



#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <time.h>

#define MAX 40001
int numeros[MAX];
int num[MAX];

int main(int argc,char *argv[]){
int n,x;
scanf("%d",&n);

for(x=0;x<MAX;x++)numeros[x]=0;
for(x=0;x<n;x++){
scanf("%d",&num[x]);
}
for(x=0;x<n;x++){
numeros[num[x]]++;
}
for(x=0;x<MAX;x++){
if(numeros[x]!=0)
printf("%d aparece %d vez(es)\n",x,numeros[x]);
}
return 0;
}

sábado, 21 de abril de 2018

URI PROBLEMA 2334 - Patinhos SOLUÇÃO EM C

URI Online Judge | 2334

Patinhos

Por Hiago Oliveira de Jesus, UEA BR Brazil
Timelimit: 1
Cinco patinhos foram passear. Além das montanhas. Para brincar. A mamãe gritou: quá, quá, quá, quá. Mas só quatro patinhos voltaram de lá. Quatro patinhos foram passear. Além das montanhas. Para brincar. A mamãe gritou: quá, quá, quá, quá. Mas só três patinhos voltaram de lá. Três patinhos foram passear. Além das montanhas. Para brincar. A mamãe gritou: quá, quá, quá, quá. Mas só dois patinhos voltaram de lá. Dois patinhos foram passear. Além das montanhas. Para brincar. A mamãe gritou: quá, quá, quá, quá. Mas só um patinho voltou de lá. Um patinho foi passear. Além das montanhas. Para brincar. A mamãe gritou: quá, quá, quá, quá. Mas nenhum patinho voltou de lá.
A mamãe patinha ficou tão triste naquele dia que resolveu pedir sua ajuda para procurar além das montanhas, na beira do mar, quantos patinhos não voltaram de lá.

Entrada

Haverá vários casos de testes, a primeira linha de cada caso de teste contém um inteiro (0 ≤ P ≤ 1019) representando a quantidade total de patos, a entrada termina com P = -1.

Saída

O arquivo de saída deve conter a quantidade de patinhos que retornaram.



#include <stdio.h>

int main()
{
    unsigned long long int n;
    while(scanf("%llu", &n))
    {
        if(n == -1ll) break;
        if(n == 0ll) printf("0\n");
        else printf("%llu\n", n - 1ll);
    }
    return 0;
}

URI PROBLEMA 2313 - Qual Triângulo SOLUÇÃO EM C

URI Online Judge | 2313

Qual Triângulo

Por Alexandre A. Melo, IFSC BR Brazil
Timelimit: 1
Dados três valores, verifique se os três podem formar um triângulo. Em caso afirmativo, verifique se ele é escaleno, isóceles ou equilátero e se trata-se de um triângulo retângulo ou não.

Entrada

A entrada consiste em três números inteiros A,B e (0 < A,B,C < 105).

Saída

A saída deve conter a string "Invalido" se os valores lidos não formarem um triângulo. Se os valores formarem um triângulo a saída deve ser "Valido-Equilatero""Valido-Escaleno" ou "Valido-Isoceles" de acordo com a característica do triângulo seguido de "Retangulo: S" se o triângulo for retângulo ou "Retangulo: N" se não for, conforme os exemplos.



#include <stdio.h>

int max(int a, int b)
{
    return ((a>b) ? a: b);
}
int min(int a, int b)
{
    return  (a<b) ? a: b;
}
int main()
{
    long long int a, b, c, x, y, z;
    scanf("%lld %lld %lld", &a, &b, &c);
    x = max(a, max(b, c));
    z = min(a, min(b, c));
    y = a + b + c - x - z;
    if(x >= y+z) printf("Invalido\n");
    else
    {
        if(x==y && y==z) printf("Valido-Equilatero\n");
        else if(x!=y && y!=z && x!=z) printf("Valido-Escaleno\n");
        else printf("Valido-Isoceles\n");
        if(x*x == (y*y + z*z)) printf("Retangulo: S\n");
        else printf("Retangulo: N\n");
    }
    return 0;
}

sexta-feira, 20 de abril de 2018

URI PROBLEMA 2163 - O Despertar da Força SOLUÇÃO EM C

URI Online Judge | 2163

O Despertar da Força

Por M.C. Pinto, UNILA BR Brazil
Timelimit: 1
Há muito tempo atrás, em uma galáxia muito, muito distante...
Após o declínio do Império, sucateiros estão espalhados por todo o universo procurando por um sabre de luz perdido. Todos sabem que um sabre de luz emite um padrão de ondas específico: 42 cercado por 7 em toda a volta. Você tem um sensor de ondas que varre um terreno com N x M células. Veja o exemplo abaixo para um terreno 4 x 7 com um sabre de luz nele (na posição (2, 4)).
Você deve escrever um programa que, dado um terreno N x M, procura pelo padrão do sabre de luz nele. Nenhuma varredura tem mais do que um padrão de sabre de luz.

Entrada

A primeira linha da entrada tem dois números positivos N e M, representando, respectivamente, o número de linhas e de colunas varridos no terreno (3 ≤ NM ≤ 1000). Cada uma das próximas N linhas tem M inteiros, que descrevem os valores lidos em cada célula do terreno (-100 ≤ Tij ≤ 100, para 1 ≤ i ≤ N e 1 ≤ j ≤ M).

Saída

A saída é uma única linha com 2 inteiros X e Y separados por um espaço. Eles representam a coordenada (X,Y) do sabre de luz, caso encontrado. Se o terreno não tem um padrão de sabre de luz, X e Y são ambos zero.



#include <stdio.h>
int main()
{
    int rw, clm, i, j, cndtn = 0, n = 0, m = 0;
    scanf("%d%d", &rw, &clm);
    int ara[rw][clm];
    for(i=0; i<rw; i++)
        for(j=0; j<clm; j++)
            scanf("%d", &ara[i][j]);

    for(i=1; i<rw-1; i++)
    {
        for(j=1; j<clm-1; j++)
        {
            if(ara[i][j]==42)
                if(ara[i-1][j-1]==7 && ara[i-1][j]==7 && ara[i-1][j+1]==7)
                    if(ara[i][j-1]==7 && ara[i][j+1]==7)
                        if(ara[i+1][j-1]==7 && ara[i+1][j]==7 && ara[i+1][j+1]==7)
                        {
                            cndtn = 1;
                            n = i+1;
                            m = j+1;
                        }
        }
    }
    printf("%d %d\n", n, m);
    return 0;
}

URI PROBLEMA 1133 - Resto da Divisão SOLUÇÃO EM C

URI Online Judge | 1133 Resto da Divisão Adaptado por Neilor Tonin, URI   Brasil Timelimit: 1 Escreva um programa que leia 2 valo...