Google Code Jam 2010 - Africa Classification Round A
Publicado por Enzo de Brito Ferber (última atualização em 20/12/2011)
[ Hits: 4.188 ]
Homepage: http://www.maximasonorizacao.com.br
Download 1324301436.StoreCredit.zip (versão 2)
Problema A.
http://code.google.com/codejam/contest/dashboard?c=351101#s=p1
Lê a descrição no google mesmo. Necessário conhecimento em inglês!
;)
Divirtam-se....
Versão 2 - Enviado por Enzo de Brito Ferber em 19/12/2011
Changelog: Erro de execução na função free() dentro de getnum().
Trocado free(aux) por free(s).
Download 1324301436.StoreCredit.zip
/* store.c
*
* Enzo Ferber : <enzo@veloxmail.com.br>
* dez 2011
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getnum ( char *str, int a, int b )
{
char *s, *aux = (char *)malloc( (b - a + 1) * sizeof(char));
register int i, r;
// backup initial 'aux' addr
s = aux;
// copy the string from point A to B
for ( i = a; i < b; i++ ) *(aux++) = str[i];
// finishes the stirng with null-terminating byte
*aux = 0x0;
// result
r = atoi(s);
// free aux
free ( aux );
// return an INTEGER number
return r;
}
int *array( char *str, int n )
{
register int i, j = 0;
// this gets the new array of size 'n'
int *p, *a = (int *)malloc(n * sizeof(int));
p = a;
for ( i = 0; i <= strlen(str); i++ )
{
if ( str[i] == ' ' || str[i] == '{FONTE}' ) {
// j is the last start position in the string
// i is the current space/null char in the string
*(p++) = getnum(str, j, i);
j = i;
}
}
return a;
}
// JAM SUM
int *jsum ( int credit, int nitens, int *itens )
{
register int i, j;
int *r = (int*)malloc(2*sizeof(int));
int f = 0;
for ( i = 0; i < nitens; i++ )
{
for ( j = 0; j < nitens; j++ )
{
// can't buy same item twice!
if ( j == i ) continue;
// check the sum
if ( (itens[i] + itens[j]) == credit) {
r[0] = (i < j) ? i+1 : j+1;
r[1] = (i < j) ? j+1 : i+1;
f = 1;
break;
}
}
if( f ) break;
}
return r;
}
int main ( int argc, char *argv[] )
{
FILE *input;
register int i = 0, j = 0, lines = 0;
char c, line[152][12000]; // large dataset default
// JAM!
int credit, nitens, *itens, *r;
// arguments check
if ( argc < 2 )
{
printf ( "Usage: %s <input_file>\n", argv[0] );
exit ( -1 );
}
// try to open input file from arguments line
if ( !(input = fopen(argv[1], "r")))
{
printf ( "# Could not open file %s for reading.\n", argv[1] );
exit ( -1 );
}
// read file
while ( (c = fgetc(input)) != EOF )
{
if ( c != '\n' )
line[lines][j++] = c;
else
{
line[lines][j] = 0x0;
lines++;
j = 0;
}
}
// each test-case has 3 lines!
for ( i = 1, j = 1; i < lines; i+=3, j++ )
{
itens = NULL;
credit = atoi(line[i]);
nitens = atoi(line[i+1]);
itens = array(line[i+2], nitens);
// jsum = JAM sum
r = jsum(credit, nitens, itens);
printf ( "Case #%d: %d %d\n", j, r[0], r[1]);
}
return 0;
}
Rotina para controle de portas paralelas em C. (biblioteca LP.h)
Mudando Cor da Letra e Fundo de Tela
Google Code Jam 2010 - Africa Classification Round
O Journal no Linux para a guarda e consulta de logs do sistema
A evolução do Linux e as mudanças que se fazem necessárias desde o seu lançamento
Maquina modesta - a vez dos navegadores ferrarem o usuario
Fscrypt: protegendo arquivos do seu usuário sem a lentidão padrão de criptograr o disco
Sway no Arch Linux: configuração Inicial sem enrolação
Resolvendo o bloqueio do Módulo Warsaw no Arch Linux (Porta 30900)
Continuando meus tópicos anteriores (1)
Saída de loop após teste de if. (2)
Governo da França vai trocar Windows por Linux (9)
Warsaw não é reconhecido no Google Chrome 147.0.7727.55 [RESOLVIDO] (9)









