sábado, 10 de novembro de 2012

Resolução - Piscina - 2005

Questão da maratona de programação de 2005, consiste em determinar a quantidade de ladrilhos para recobrir a piscina e obter o menor custo, nesta questão usamos o famoso algoritmo guloso, sendo que o melhor custo/área coberta é em ordem: 30x30, 15x15, 5x5. Assim você primeiro recobre primeiro com 30x30 e assim por diante.
Quando eu tentei resolver pela primeira vez calculei a área total da piscina depois dividí pela área de 30x30, 15x15, e 5x5 respectivamente, mas, com isso foi necessário quebrar os ladrilhos. Assim, a melhor solução é calcular os ladrilhos para cada parede, simples!
Aí o código:

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

int P = 0, M = 0, G = 0;
void ladrilhos05 (int Xa, int Xb, int *p, int *m, int *g) {
    int i, mod=Xa/5;
    for (i=0; i<mod; i++) {
        (*p)+=Xb/5;
        P-=Xb/5;
    }
}

void ladrilhos15 (int Xa, int Xb, int *p, int *m, int *g) {
    int i, mod=Xa/15, aux;
    for (i=0; i<mod; i++) {
        if (Xb/15>M) {
            (*m)+=aux=M;
            M=0;
        }
        else {
            (*m)+=aux=Xb/15;
            M-=Xb/15;
        }
        aux*=15;
        if (Xb-aux) ladrilhos05 (15, Xb-aux, &(*p), &(*m), &(*g));
    }
    ladrilhos05 (Xa-mod*15, Xb, &(*p), &(*m), &(*g));
}

void ladrilhos30 (int Xa, int Xb, int *p, int *m, int *g) {
    int i, mod=Xa/30, aux=0;
    for (i=0; i<mod; i++) {
        if (Xb/30>G) {
            (*g)+=aux=G;
            G=0;
        }
        else {
            (*g)+=aux=Xb/30;
            G-=Xb/30;
        }
        aux*=30;
        if (Xb-aux) ladrilhos15 (30, Xb-aux, &(*p), &(*m), &(*g));
    }
    ladrilhos15 (Xa-mod*30, Xb, &(*p), &(*m), &(*g));
}

int main () {
    do {
        int Xa = 0, Xb = 0, Ya = 0, Yb = 0, Za = 0, Zb = 0;
        scanf ("%d.%d %d.%d %d.%d", &Xa, &Xb, &Ya, &Yb, &Za, &Zb);
        Xa = (10*Xa+Xb)*10;
        Ya = (10*Ya+Yb)*10;
        Za = (10*Za+Zb)*10;
        if (Xa==0 && Ya==0 && Za==0) break;
        scanf ("%d %d %d", &P, &M, &G);
        int qtdG = 0, qtdM = 0, qtdP = 0;
        int tempP=P, tempM=M, tempG=G;
        ladrilhos30 (Xa, Za, &qtdP, &qtdM, &qtdG);
        ladrilhos30 (Xa, Za, &qtdP, &qtdM, &qtdG);
        ladrilhos30 (Ya, Za, &qtdP, &qtdM, &qtdG);
        ladrilhos30 (Ya, Za, &qtdP, &qtdM, &qtdG);
        ladrilhos30 (Xa, Ya, &qtdP, &qtdM, &qtdG);
        if (qtdP>tempP) printf ("impossivel\n");
        else printf ("%d %d %d\n", qtdP, qtdM, qtdG);
    } while (1);
    return 0;
}



SITE: http://br.spoj.com/problems/PISCINA/

segunda-feira, 3 de setembro de 2012

Resolução - Botas Perdidas - 2011


Esta é uma questão da primeira fase da maratona de programação de 2011, para sua resolução é necessário que se formem todos os pares possíveis. Antes de tudo imagine dois guada sapatos com espaços para alojar todos os números dos calçados.



Pronto! Tendo em mente este arranjo, basta apenas analisar cada prateleira, observando que o número máximo de pares formados vai ser o menor dos dois. Vamos ao código em C:

#include<stdio.h>

int main () {
    int i, n, tam, D[31], E[31];
    while (scanf("%d", &n)>0) {
        int total=0;
        for (i=0; i<31; i++) D[i]=E[i]=0;
        char pe;
        for (i=0; i<n; i++) {
            scanf ("%d %c", &tam, &pe);
            if(pe=='D') D[tam-30]++;
            if(pe=='E') E[tam-30]++;
        }
        for (i=0; i<31; i++) {
            if (D[i]<=E[i]) total += D[i];
            else total += E[i];
        }
        printf ("%d\n", total);
    }
    return 0;
}

SITE: http://br.spoj.com/problems/BOTAS/

Se isto lhe foi útil não esqueça de agradecer!


Resolução - Questão Guarda Costeira - 2011

Esta é uma questão da primeira fase da maratona de programação de 2011, consiste basicamente em calcular se o barco do fugitivo irá cruzar a linha de limite primeiro. A imagem a Seguir exemplifica melhor:



Assim, poderemos calcular o tempo Tg = S/Vg e Tf = 12/Vf (Tg: tempo que o barco da guarda costeira leva para chegar ao limite, Tf: tempo que o barco do fugitivo leva para chegar ao limine), após feita esta análise podemos constatar que, se o Tg for menor ou igual a Tf o fugitivo será preso, senão estará livre. Visto isso podemos aplicar ao código em C.

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

int main () {
    int D, Vf, Vg;
    while (scanf ("%d %d %d", &D, &Vf, &Vg)>0) {
         float S, Tg, Tf;
         S = sqrt (pow(D, 2) + 144);
         Tg = S/Vg;
         Tf = 12.0/Vf;
         if (Tg <= Tf) printf("S\n");
         else printf ("N\n");
    }
    return 0;
}

SITE: http://br.spoj.com/problems/GUARDCOS/
Se isto lhe foi útil não esqueça de agradecer!


quarta-feira, 29 de agosto de 2012

Creating a Personal Paypal account

The Paypal is a very interesing site when we talk about a mode to manage your money online. Let's go, remembering with a good lecture everything become easy.

1º Step:
Acesse the link: https://www.paypal.com/webapps/mpp/home, after this make a click in Sign up:



2° Step:
Now you have to choose your country, your language and click in personal profile:


3° Step:
Fill the form correctly because all these fields will be used to delivery of a online purchase, after this read all the User Agreement, Privacy Policy, and Acceptable Use Policy and mark "", after this perform a click in "Accept and Create Account":




Ok!!!
Now you can make your shopping on line with the commodity of the Paypal:



Criando conta Paypal Pessoa Física


O Paypal é um site muito interessante quando se trata de um modo de gerenciar seu saldo online, além da facilidade de pagamento por meio deste.
 Vamos lá, criar uma conta no Paypal se torna uma tarefa bem simples quando prestamos atenção tem todos os termos, então vamos lá:

1º Passo:
Acesse o link: https://www.paypal.com, após isto será necessário que você clique em cadastrar:


2° Passo:
Agora escolha seu país, e depois clique em "Pessoa Física":


3° Passo:
Preencha o formulário corretamente, pois estas serão suas informações de entrega numa compra online. E depois clique em "Concordar e criar conta":


Pronto!!!
Agora você pode fazer suas compras com a comodidade do PayPal: