Ir para conteúdo
Fórum Script Brasil

marty

Membros
  • Total de itens

    4
  • Registro em

  • Última visita

Tudo que marty postou

  1. Alguém pode me ajudar? Eu n consegui resolver o problema competição de chocolate nessa prova: http://olimpiada.ic.unicamp.br/passadas/OB...9_prog_f2nj.pdf Quando fui ver a solução do problema, n entendi nada, alguém pode me explicar? SErá q tem uma solução mais simples? #include <stdio.h> static int count[1024 * 1024]; static int forbid[1024 * 1024]; int solve (int n, int m) { int i, j; for (i = 0; i <= n; i++) count[i] = forbid[i] = 0; for (i = 0; i <= n; i++) { if (count[i] == 0) { for (j = 1; j <= m; j++) { count[i + j]++; forbid[i + j] = j; } } else if (count[i] == 1) { count[i + forbid[i]]++; forbid[i + forbid[i]] = forbid[i]; } } return count[n]; } int main (int argc, char **argv) { int n, m; while (1) { n = m = 0; scanf ("%d %d", &n, &m); if (n == 0) break; printf ("%s\n", solve (n, m) ? "Paula" : "Carlos"); } return 0; } As entradas q seriam avaliadas estão nesse arquivo: http://olimpiada.ic.unicamp.br/passadas/OB...s/chocolate.zip
  2. ah, sim, no problema diz q pode ser qualque banda, contanto q seja com a maior soma, eu consegui o gabarito, a solução oficial é essa: (cheguei perto dela) /*Banda*/ #include <stdio.h> #include <stdlib.h> int main () { int matriz[100][100],pares,quant,c1, c2, c3, mus1, mus2, final[3], somaini=0, somaf=-1; scanf("%d", &quant); /*ZERAR O NIVEL DE ENTROSAMENTO ENTRE OS PARES DE MÚSICOS*/ for (c1=0;c1<quant;c1++){ for(c2=0;c2<quant;c2++){ matriz[c1][c2] = 0; } } scanf ("%d", &pares); for (c1=0;c1<pares;c1++) { scanf ("%d %d %d",&mus1, &mus2, &c3); /*c3 foi usado nesse caso para substituir uma variável que guardaria o entrosamento*/ matriz[mus1 - 1][mus2 - 1] = c3; matriz[mus2 - 1][mus1 - 1] = c3; } /*Encontrar a maior soma (por cada possibilidade)*/ for (c1=0;c1<quant;c1++) { for(c2=0;c2<quant;c2++) { if (c2!=c1) { for (c3=0;c3<quant;c3++){ if ((c3!=c1) && (c3!=c2)) { somaini += matriz[c1][c2]; somaini += matriz[c1][c3]; somaini += matriz[c2][c3]; if (somaini > somaf) { somaf = somaini; final[0] = c1; final[1] = c2; final[2] = c3; } somaini = 0; } } } } } printf ("\n%d %d %d\n", final[0] + 1, final[1] + 1, final[2] + 1); system("pause"); return 0; }
  3. será q essa solução funcionaria para todos os casos? q eu achei q usar matriz n tornaria o programa muito eficiente mas eu n consegui pensar em outro modo de resolvê-lo: /*Banda*/ #include <stdio.h> #include <stdlib.h> int main () { int matriz[100][100],pares,quant,c1, c2, c3, mus1, mus2, final[3], somaini=0, somaf=0; scanf("%d", &quant); /*ZERAR O NIVEL DE ENTROSAMENTO ENTRE OS PARES DE MÚSICOS*/ for (c1=0;c1<quant;c1++){ for(c2=0;c2<quant;c2++){ matriz[c1][c2] = 0; } } scanf ("%d", &pares); for (c1=0;c1<pares;c1++) { scanf ("%d %d %d",&mus1, &mus2, &c3); /*c3 foi usado nesse caso para substituir uma variável que guardaria o entrosamento*/ matriz[mus1 - 1][mus2 - 1] = c3; matriz[mus2 - 1][mus1 - 1] = c3; } /*Encontrar a maior soma (por cada possibilidade)*/ for (c1=0;c1<quant;c1++) { for(c2=0;c2<quant;c2++) { if (c2!=c1) { for (c3=0;c3<quant;c3++){ if ((c3!=c1) && (c3!=c2)) { somaini += matriz[c1][c2]; somaini += matriz[c1][c3]; somaini += matriz[c2][c3]; if (somaini > somaf) { somaf = somaini; final[0] = c1; final[1] = c2; final[2] = c3; } somaini = 0; } } } } } printf ("\n%d %d %d\n", final[0] + 1, final[1] + 1, final[2] + 1); system("pause"); return 0; }
  4. Eu tenho 13 anos e sou iniciante em C. Conheci a linguagem quando, por prêmio de uma olimpíada de lógica(OBI, pra quem conhece), ganhei um curso de introdução à programação. Agora eu estou estudando para o nível de programação dessa olimpíada, mas me deparei com um problema que n consigo resolver de jeito nenhum, alguém pode me ajudar? O problema é o "Banda" dessa prova: http://olimpiada.ic.unicamp.br/passadas/OB...9_prog_f2nj.pdf PS: Não consegui copiar o problema por conta do formato pdf da prova.
×
×
  • Criar Novo...