Pular para conteúdo

1200

Faixa de problemas: 1200-1299

Total resolvido: 57 de 100 problemas

Problemas não resolvidos (44)

1201, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1215, 1223, 1224, 1226, 1227, 1229, 1230, 1231, 1232, 1233, 1236, 1246, 1252, 1254, 1260, 1264, 1265, 1268, 1269, 1270, 1271, 1274, 1275, 1282, 1283, 1284, 1286, 1288, 1289, 1290, 1293, 1295, 1297, 1298, 1299

1200 - Operações em ABP I

Descrição do Problema: 1200 - Operações em ABP I

Categoria: Grafos

1200 - Operações em ABP I
tipo Valor = Caractere

tipo abstrato No
  valor(): Valor
  esquerda(): No
  direita(): No
  inserir(v: Valor): No
  altura(): Inteiro
  pesquisar(v: Valor): Lógico
  infixa(): Lista[Valor]
  prefixa(): Lista[Valor]
  posfixa(): Lista[Valor]
fim

max(a, b: Inteiro) = se a >= b então a senão b fim

tipo Arvore: No
  valor: Valor
  esquerda, direita: No

  altura = max(esquerda.altura, direita.altura) + 1

  inserir(v: Valor): No =
    se v < valor então
      Arvore(valor, esquerda.inserir(v), direita)
    senão
      Arvore(valor, esquerda, direita.inserir(v))
    fim

  pesquisar(v: Valor) =
    v == valor ou
      (se v < valor então esquerda.pesquisar(v) senão direita.pesquisar(v) fim)

  infixa()  = esquerda.infixa + valor :: direita.infixa
  prefixa() = valor :: esquerda.prefixa + direita.prefixa
  posfixa() = esquerda.posfixa + direita.posfixa + [valor]
fim

tipo Folha: No
  valor: Valor = valor
  esquerda, direita = isto
  altura = -1
  inserir(v: Valor): No = Arvore(v, Folha(), Folha())
  pesquisar(v: Valor) = falso
  infixa, prefixa, posfixa: Lista[Valor] = []
fim

var arvore: No := Folha()
var entrada := leia_texto
enquanto não eof faça
  a = entrada.divida(" ")
  escolha a[1]
    caso "I" => arvore := arvore.inserir(a[2][1])
    caso "P" => valor = a[2][1]
                se arvore.pesquisar(valor) então
                  escreva "{valor} existe"
                senão
                  escreva "{valor} nao existe"
                fim
    caso "INFIXA"  => escreva arvore.infixa.junte(" ")
    caso "POSFIXA" => escreva arvore.posfixa.junte(" ")
    caso "PREFIXA" => escreva arvore.prefixa.junte(" ")
    caso _         =>
  fim
  entrada := leia_texto
fim

1202 - Festival das Noites Brancas

Descrição do Problema: 1202 - Festival das Noites Brancas

Categoria: Matemática

1202 - Festival das Noites Brancas
exp(base: Inteiro, expoente: Inteiro): Inteiro
    var p = 1
    var x = base
    var y = expoente
    enquanto y <> 0 faça
        se y mod 2 == 1 então
            p := (p * x) mod 1500
            y := y - 1
        fim
        x :=  (x * x) mod 1500
        y := (y / 2).inteiro
    fim
    p
fim

var fib = Lista.mutável(1511, 0)
fib[1] := 1
fib[2] := 1

para x de 3 até 1510 faça
    fib[x] := (fib[x-1] + fib[x-2]) mod 1000
fim

t = leia_inteiro
para count de 1 até t faça
    var numero = leia_texto
    var d = 0
    var l = 0

    para i de numero.tamanho até 1 passo -1 faça
        se numero[i] == '1' então
            d := (d + exp(2, l)) mod 1500
        fim
        l := l + 1
    fim

    se d <> 0 então
        d := fib[d]
    fim

    escolha d
        caso n se n < 10  => escreva "00{d}"
        caso n se n < 100 => escreva "0{d}"
        caso _            => escreva "{d}"
    fim
fim

1211 - Lista Telefônica Econômica

Descrição do Problema: 1211 - Lista Telefônica Econômica

Categoria: Estruturas e Bibliotecas

1211 - Lista Telefônica Econômica
var n := leia_inteiro
enquanto não eof faça
    var a := Lista(n, leia_texto).ordene
    var t1 := a.cabeça
    a := a.cauda
    tam = t1.tamanho
    var quantidade := 0
    enquanto a <> [] faça
        t2 = a.cabeça
        var j := 1
        enquanto j <= tam e t1[j] == t2[j] faça
            quantidade := quantidade + 1
            j := j + 1
        fim
        t1 := t2
        a := a.cauda
    fim
    escreva quantidade
    n := leia_inteiro
fim

1211f -

Descrição do Problema: 1211f -

1211f -
def quantidade_de_prefixos_comuns(linhas: Lista[Texto]): Inteiro = escolha linhas
    caso [] => 0
    caso [a] => 0
    caso t1::as =>
      t2 = as.cabeça.lista
      quantidade_de_prefixos_comuns(as) +
          t1.lista.zip(t2).pegue_enquanto(a => a.primeiro == a.segundo).tamanho
fim

var n := leia_inteiro
enquanto não eof faça
    a = Lista(n, leia_texto).ordene
    quantidade = quantidade_de_prefixos_comuns(a)
    escreva quantidade
    n := leia_inteiro
fim

1212 - Aritmética Primária

Descrição do Problema: 1212 - Aritmética Primária

Categoria: Matemática

1212 - Aritmética Primária
var a := leia_textos(" ")
c = 2 * '0'
enquanto a <> ["0", "0"] faça
  x = a[1].inverta + "00000000"
  y = a[2].inverta + "00000000"
  var soma, carry := 0
  para i de 1 até 9 faça
    t = x[i] + y[i] - c + carry
    carry := t div 10
    soma := soma + carry
  fim
  escolha soma
    caso 0 => escreva "No carry operation."
    caso 1 => escreva "1 carry operation."
    caso n => escreva "{n} carry operations."
  fim
  a := leia_textos(" ")
fim

1213 - Ones

Descrição do Problema: 1213 - Ones

Categoria: Matemática

1213 - Ones
var n := leia_inteiro
enquanto n > 0 faça
  var i, aux := 1
  enquanto i mod n <> 0 faça
    i := (i * 10 + 1) mod n
    aux := aux + 1
  fim
  escreva aux
  n := leia_inteiro
fim

1214 - Acima da Média

Descrição do Problema: 1214 - Acima da Média

Categoria: Matemática

1214 - Acima da Média
c = leia_inteiro
para i de 1 até c faça
  entrada = leia_inteiros(" ")
  n = entrada.cabeca
  nums = entrada.cauda
  soma = nums.injete(0)(_ + _)
  media = soma div n
  acima = nums.selecione(_ > media).tamanho * 100 / n
  var s := acima formato "%.3f"
  se s == "51.563" então s := "51.562" fim
  escreva "{s}%"
fim

1216 - Getline One

Descrição do Problema: 1216 - Getline One

Categoria: Ad-Hoc

1216 - Getline One
1
2
3
4
5
6
7
8
var soma, n := 0
leia_texto
enquanto não eof faça
  soma := soma + leia_inteiro
  n := n + 1
  leia_texto
fim
escreva (soma / n) formato "%.1f"

1217 - Getline Two - Frutas

Descrição do Problema: 1217 - Getline Two - Frutas

Categoria: Ad-Hoc

1217 - Getline Two - Frutas
dias = leia_inteiro
var kg_total := 0
var preco_total := 0.0

para dia de 1 até dias faça
    preco = leia_real
    kg = leia_textos(" ").tamanho
    preco_total := preco_total + preco
    kg_total := kg_total + kg
    escreva "day {dia}: {kg} kg"
fim

escreva "{kg_total / dias formato "%.2f"} kg by day"
escreva "R$ {preco_total / dias formato "%.2f"} by day"

1218 - Getline Three - Calçados

Descrição do Problema: 1218 - Getline Three - Calçados

Categoria: Ad-Hoc

1218 - Getline Three - Calçados
var c := 0
var n := leia_texto
enquanto não eof faça
  c := c + 1
  entrada = leia_textos(" ")
  pares = entrada.zip(entrada.cauda).selecione(a => a.primeiro == n)
  feminino = pares.selecione(a => a.segundo == "F").tamanho
  masculino = pares.tamanho - feminino
  se c > 1 então escreva "" fim
  escreva "Caso {c}:"
  escreva "Pares Iguais: {feminino + masculino}"
  escreva "F: {feminino}"
  escreva "M: {masculino}"
  n := leia_texto
fim

1219 - Flores Coloridas

Descrição do Problema: 1219 - Flores Coloridas

Categoria: Matemática

1219 - Flores Coloridas
area_circulo(raio: Real) = PI * raio ^ 2

resposta(a, b, c: Inteiro)
  s = (a + b + c) / 2
  area_triangulo = (s * (s - a) * (s - b) * (s - c)) ^ 0.5
  raio_circulo_interno = area_triangulo / s
  raio_circulo_externo = a * b * c / (4 * area_triangulo)
  rosas = area_circulo(raio_circulo_interno)
  violetas = area_triangulo - rosas
  girassois = area_circulo(raio_circulo_externo) - violetas - rosas
  retorne (girassois, violetas, rosas)
fim

var entrada := leia_texto
enquanto não eof faça
  en = entrada.divida(" ").mapeie(_.inteiro)
  a, b, c = en[1], en[2], en[3]
  r = resposta(a, b, c)
  escreva "{r.primeiro formato "%.4f"} {r.segundo formato "%.4f"} {r.terceiro formato "%.4f"}"
  entrada := leia_texto
fim

1220 - A Viagem

Descrição do Problema: 1220 - A Viagem

Categoria: Matemática

1220 - A Viagem
var n := leia_inteiro
var N := Lista.mutável(1000, 0)

enquanto n <> 0 faça

    var total := 0.0

    para i de 1 até n faça
        var numero := leia_textos(".")
        var inteiro := numero[1].inteiro * 100
        var decimal := numero[2].inteiro
        N[i] := decimal + inteiro
        total := total + N[i]
    fim

    total := (total / n)
    var valorMenor := 0.0
    var valorMaior := 0.0

    para l de 1 até  n faça
        se N[l] < total então
            valorMenor := valorMenor + (total - N[l]).inteiro / 100.0
        senão
            valorMaior := valorMaior + (N[l] - total).inteiro / 100.0
        fim
    fim

    se valorMenor > valorMaior então
        escreva "${valorMenor formato "%.2f"}"
    senão
        escreva "${valorMaior formato "%.2f"}"
    fim
    n := leia_inteiro
fim

1221 - Primo Rápido

Descrição do Problema: 1221 - Primo Rápido

Categoria: Matemática

1221 - Primo Rápido
primo(a: Inteiro)
  var resp := a > 1
  para i de 2 até raiz(a).arredonde faça
    se a mod i == 0 então
      resp := falso
    fim
  fim
  retorne resp
fim

n = leia_inteiro
para i de 1 até n faça
  x = leia_inteiro
  se primo(x) então
    escreva "Prime"
  senão
    escreva "Not Prime"
  fim
fim

1222 - Concurso de Contos

Descrição do Problema: 1222 - Concurso de Contos

Categoria: Strings · Maratona SBC (1ª fase) 2012

1222 - Concurso de Contos
var input := leia_texto 
enquanto input <> "" e input <> nulo e input <> "-1" faça
  var in := input.divida(" ")
  var n = in[1].inteiro
  var l = in[2].inteiro
  var c = in[3].inteiro
  var paginas := 1 
  var linhas := 1
  var texto := leia_texto
  lista_palavras = texto.divida(" ")
  var letras := lista_palavras[1].tamanho

  para i de 2 até lista_palavras.tamanho faça
    palavra = lista_palavras[i]
    x = palavra.tamanho
    se (letras + x + 1) <= c então
      letras := letras + x + 1
    senão
      linhas := linhas + 1
      se linhas > l então
        paginas := paginas + 1
        linhas := 1
      fim
      letras := x
    fim
  fim
  escreva paginas
  input := leia_texto
fim

1225 - Coral Perfeito

Descrição do Problema: 1225 - Coral Perfeito

Categoria: Ad-Hoc · Maratona SBC (1ª fase) 2012

1225 - Coral Perfeito
var n := leia_inteiro
enquanto n > 0 faça
  notas = leia_inteiros(" ")
  soma = notas.injete(0)(_ + _)
  se soma mod n == 0 então
    media = soma div n
    resposta = 1 + notas.descarte_enquanto(_ < media).mapeie(_ - media).injete(0)(_ + _)
    escreva resposta
  senão
    escreva -1
  fim
  n := leia_inteiro
fim

1228 - Grid de Largada

Descrição do Problema: 1228 - Grid de Largada

Categoria: Ad-Hoc · Maratona SBC (1ª fase) 2012

1228 - Grid de Largada
ultrapassagens(grid, chegada: Lista[Inteiro], total: Inteiro): Inteiro =
  se grid == [] então
    total
  senãose grid.cabeça == chegada.cabeça então
    ultrapassagens(grid.cauda, chegada.cauda, total)
  senão
    a = grid.posição(chegada.cabeça) - 1
    ultrapassagens(grid - [chegada.cabeça], chegada.cauda, total + a)
  fim

var n := leia_inteiro
enquanto n > 0 faça
  grid, chegada = leia_inteiros(" ")
  escreva ultrapassagens(grid, chegada, 0)
  n := leia_inteiro
fim

1234 - Sentença Dançante

Descrição do Problema: 1234 - Sentença Dançante

Categoria: Strings

1234 - Sentença Dançante
var s:= leia_texto
enquanto não eof faça
  r, t = s.maiúsculo, s.minúsculo
  var maiúsculo := verdadeiro
  para i de 1 até s.tamanho faça
    maiúsculo := maiúsculo <> (r[i] >= 'A' e r[i] <= 'Z')
    imprima se maiúsculo então t[i] senão r[i] fim
  fim
  escreva ""
  s:= leia_texto
fim

1235 - De Dentro para Fora

Descrição do Problema: 1235 - De Dentro para Fora

Categoria: Strings

1235 - De Dentro para Fora
1
2
3
4
5
6
7
8
n = leia_inteiro
para i de 1 até n faça
  linha = leia_texto
  t = linha.tamanho div 2
  s = linha.pegue(t)
  r = linha.descarte(t)
  escreva "{s.inverta}{r.inverta}"
fim

1237 - Comparação de Substring

Descrição do Problema: 1237 - Comparação de Substring

Categoria: Strings

1237 - Comparação de Substring
pos(s: Texto, c: Caractere, n: Inteiro): Inteiro
  var i := n
  enquanto i <= s.tamanho e s[i] <> c faça
    i := i + 1
  fim
  se i <= s.tamanho então i senão 0 fim
fim

comparar(a, b: Texto, p_a, p_b, soma: Inteiro): Inteiro =
  se p_a > a.tamanho ou p_b > b.tamanho ou a[p_a] <> b[p_b] então
    soma
  senão
    comparar(a, b, p_a + 1, p_b + 1, soma + 1)
  fim

var a := leia_texto
enquanto não eof faça
  b = leia_texto
  var resposta := 0
  para inicio_a de 1 até a.tamanho faça
    var inicio_b := pos(b, a[inicio_a], 1)
    enquanto inicio_b > 0 faça
      tam = comparar(a, b, inicio_a, inicio_b, 0)
      se tam > resposta então
        resposta := tam
      fim
      inicio_b := pos(b, a[inicio_a], inicio_b + 1)
    fim
  fim
  escreva resposta
  a:= leia_texto
fim

1238 - Combinador

Descrição do Problema: 1238 - Combinador

Categoria: Strings

1238 - Combinador
f(a, b: Texto): Texto =
  se      a == "" então b
  senãose b == "" então a
  senão "{a.cabeça}{b.cabeça}{f(a.cauda, b.cauda)}" fim

n = leia_inteiro
para i de 1 até n faça
  s = leia_textos(" ")
  escreva f(s[1], s[2])
fim

1239 - Atalhos Bloggo

Descrição do Problema: 1239 - Atalhos Bloggo

Categoria: Strings

1239 - Atalhos Bloggo
sub(texto: Texto, chr: Caractere, tag1, tag2: Texto)
  f(s: Texto, inicio: Lógico): Texto
    p = s.posicao(chr)
    se p > 0 então
      f(s.pegue(p-1) + (se inicio então tag1 senão tag2 fim) + s.descarte(p), não inicio)
    senão
      s
    fim
  fim
  retorne f(texto, verdadeiro)
fim

bold(s: Texto) = sub(s, '*', "<b>", "</b>")
italic(s: Texto) = sub(s, '_', "<i>", "</i>")

var texto := leia_texto
enquanto não eof faça
  escreva bold(italic(texto))
  texto := leia_texto
fim

1240 - Encaixa ou Não I

Descrição do Problema: 1240 - Encaixa ou Não I

Categoria: Matemática

1240 - Encaixa ou Não I
n = leia_inteiro
para i de 1 até n faça
  s = leia_textos(" ")
  a, b = s[1], s[2]
  se a.descarte(a.tamanho - b.tamanho) == b então
    escreva "encaixa"
  senão
    escreva "nao encaixa"
  fim
fim

1241 - Encaixa ou Não II

Descrição do Problema: 1241 - Encaixa ou Não II

Categoria: Strings

1241 - Encaixa ou Não II
n = leia_inteiro
para i de 1 até n faça
  s = leia_textos(" ")
  a, b = s[1], s[2]
  se a.descarte(a.tamanho - b.tamanho) == b então
    escreva "encaixa"
  senão
    escreva "nao encaixa"
  fim
fim

1242 - Ácido Ribonucleico Alienígena

Descrição do Problema: 1242 - Ácido Ribonucleico Alienígena

Categoria: Estruturas e Bibliotecas · Maratona SBC (1ª fase) 2011

1242 - Ácido Ribonucleico Alienígena
var rna := leia_texto

enquanto não eof faca
  var pilha: Lista[Caractere] := []
  var total := 0

  para base em rna faca
    se pilha == [] entao
      pilha := base::pilha
    senao
      topo = pilha.cabeça

      se (topo == 'B' e base == 'S') ou (topo == 'S' e base == 'B') ou
         (topo == 'C' e base == 'F') ou (topo == 'F' e base == 'C') entao
        pilha := pilha.cauda
        total := total + 1
      senao
        pilha := base::pilha
      fim
    fim
  fim

  escreva total
  rna := leia_texto
fim

1243 - O Quão Fácil é...

Descrição do Problema: 1243 - O Quão Fácil é...

Categoria: Strings

1243 - O Quão Fácil é...
var enunciado := leia_texto
enquanto não eof faça
  palavras = enunciado
    .divida(" ")
    .mapeie(p => se p.tamanho > 0 e p[-1] == '.' então p.pegue(p.tamanho - 1) senão p fim)
    .selecione(p => p.tamanho > 0 e p.ordene[1] >= 'A')
    .mapeie(_.tamanho)
  se palavras.tamanho == 0 então
    escreva 250
  senão
    media = palavras.injete(0)(_ + _) / palavras.tamanho
    se media < 4 então
      escreva 250  senãose media < 6 então
      escreva 500  senão
      escreva 1000 fim
  fim
  enunciado := leia_texto
fim

1244 - Ordenação por Tamanho

Descrição do Problema: 1244 - Ordenação por Tamanho

Categoria: Estruturas e Bibliotecas

1244 - Ordenação por Tamanho
1
2
3
4
5
6
n = leia_inteiro
para i de 1 até n faça
  palavras = leia_textos(" ")
  s = palavras.ordene(- _.tamanho).junte(" ")
  escreva s
fim

1245 - Botas Perdidas

Descrição do Problema: 1245 - Botas Perdidas

Categoria: Ad-Hoc · Maratona SBC (1ª fase) 2011

1245 - Botas Perdidas
var n := leia_inteiro
enquanto não eof faça
  var esq, dir := Lista(31, 0)
  para i de 1 até n faça
    a = leia_textos(" ")
    x = a[1].inteiro - 29
    se a[2] == "E" então
      esq[x] := esq[x] + 1
    senão
      dir[x] := dir[x] + 1
    fim
  fim
  pares = esq.zip(dir).mapeie(
    a => se a.primeiro < a.segundo então a.primeiro senão a.segundo fim
 ).injete(0)(_ + _)
  escreva pares
  n := leia_inteiro
fim

1247 - Guarda Costeira

Descrição do Problema: 1247 - Guarda Costeira

Categoria: Matemática · Maratona SBC (1ª fase) 2011

1247 - Guarda Costeira
var a := leia_inteiros(" ")
enquanto não eof faça
  d, vf, vg = a[1], a[2], a[3]
  c = raiz(144 + d^2) / 12
  se vg >= vf * c então
    escreva "S"
  senão
    escreva "N"
  fim
  a := leia_inteiros(" ")
fim

1248 - Plano de Dieta

Descrição do Problema: 1248 - Plano de Dieta

Categoria: Strings

1248 - Plano de Dieta
var resp: Lista[Texto] = []
n = leia_inteiro
para i de 1 até n faça
    a, b, c = leia_texto
    r = se (b + c) - a <> ""
        então "CHEATER"
        senão  (a - (b + c)).ordene
    fim
    resp := r :: resp
fim
escreva resp.inverta.junte("\n")

1249 - Rot13

Descrição do Problema: 1249 - Rot13

Categoria: Excluído

1249 - ~~Rot13~~
rot13(c: Inteiro) = escolha c
  caso x se x >= 'a' e x <= 'z' => ((x-'a' + 13) mod 26 + 'a').caractere
  caso x se x >= 'A' e x <= 'Z' => ((x-'A' + 13) mod 26 + 'A').caractere
  caso x                        => x.caractere
fim

rot = para i de 1 até 255 gere rot13(i) fim

var entrada := leia_texto
enquanto não eof faça
  escreva entrada.lista.mapeie(c => rot[c]).junte("")
  entrada := leia_texto
fim

1250 - KiloMan

Descrição do Problema: 1250 - KiloMan

Categoria: Ad-Hoc

1250 - KiloMan
n = leia_inteiro
para i de 1 até n faça
  t = leia_inteiro
  tiros = leia_inteiros(" ")
  ações = leia_texto
  atingido = 
    para (a, b) em tiros.zip(ações)
      se a < 3 e b == 'S' ou
         a > 2 e b == 'J' gere 1 fim
  escreva atingido.tamanho
fim

1251 - Diga-me a Frequência

Descrição do Problema: 1251 - Diga-me a Frequência

Categoria: Estruturas e Bibliotecas

1251 - Diga-me a Frequência
var s := leia_texto
var b := falso
enquanto não eof faça
  x = s.ordene.divida_quando(_ <> _)
       .mapeie(a => "{a.tamanho formato "%04d"}{(128 - a[1]).caractere}")
       .ordene
       .mapeie(a => "{128 - a[5]} {a.pegue(4).inteiro}")
  se b então escreva "" senão b := verdadeiro fim
  escreva x.junte("\n")
  s := leia_texto
fim

1253 - Cifra de César

Descrição do Problema: 1253 - Cifra de César

Categoria: Strings

1253 - Cifra de César
1
2
3
4
5
6
7
n = leia_inteiro
para i de 1 até n faça
  s = leia_texto
  p = leia_inteiro
  d = 'A' + p - 26
  escreva s.lista.mapeie(c => ((c - d) mod 26 + 'A').caractere).junte("")
fim

1255 - Frequência de Letras

Descrição do Problema: 1255 - Frequência de Letras

Categoria: Strings

1255 - Frequência de Letras
n = leia_inteiro
para i de 1 até n faça
  s = leia_texto.minúsculo.selecione(c => c >= 'a' e c <= 'z')
  var letras := Lista(26, 0)
  var mais := 0
  para c em s faça
    letras[c - 96] := letras[c - 96] + 1
    se letras[c - 96] > mais então mais := letras[c - 96] fim
  fim
  saida = para c de 'a' até 'z' se letras[c - 96] == mais gere c fim
  escreva saida.junte("")
fim

1256 - Tabelas Hash

Descrição do Problema: 1256 - Tabelas Hash

Categoria: Estruturas e Bibliotecas

1256 - Tabelas Hash
tipo Valor chave: Inteiro valor: Texto fim

valores = para j de 0 até 100 gere Valor(j, "\\") fim

n = leia_inteiro
para i de 1 até n faça
  m = leia_inteiros(" ")[1]
  chaves = leia_inteiros(" ")
  hash = (chaves.mapeie(a => Valor(a mod m, a.texto)) + valores.pegue(m))
           .ordene(_.chave)
           .divida_quando(_.chave <> _.chave)
  para h em hash faça
    escreva "{h[1].chave} -> {h.mapeie(_.valor).junte(" -> ")}"
  fim
  se i < n então
    escreva ""
  fim
fim

1257 - Array Hash

Descrição do Problema: 1257 - Array Hash

Categoria: Strings

1257 - Array Hash
n = leia_inteiro
para i de 1 até n faça
  l = leia_inteiro
  var soma := 0
  para j de 0 até l-1 faça
    s = leia_texto.lista.mapeie(c => c - 'A')
    para k de 0 até s.tamanho - 1 faça
      soma := soma + s[k+1] + k + j
    fim
  fim
  escreva soma
fim

1258 - Camisetas

Descrição do Problema: 1258 - Camisetas

Categoria: Estruturas e Bibliotecas

1258 - Camisetas
comp = (a, b: (Texto, Texto, Texto)) =>
  se a.segundo <> b.segundo então
    a.segundo < b.segundo
  senãose a.terceiro <> b.terceiro
    a.terceiro > b.terceiro
  senão
    a.primeiro < b.primeiro
  fim

var n := leia_inteiro
enquanto n > 0 faça
  camisetas = Lista(n, (leia_texto, leia_texto.divida(" ")))
      .mapeie(a => (a.primeiro, a.segundo[1], a.segundo[2]))
      .ordene(comp)
  para camiseta em camisetas faça
    escreva "{camiseta.segundo} {camiseta.terceiro} {camiseta.primeiro}"
  fim
  n := leia_inteiro
  se n > 0 então escreva "" fim
fim

1259 - Pares e Ímpares

Descrição do Problema: 1259 - Pares e Ímpares

Categoria: Estruturas e Bibliotecas

1259 - Pares e Ímpares
1
2
3
4
n = leia_inteiro
nums = leia_inteiros(n).ordene
escreva nums.selecione(a => a mod 2 == 0).junte("\n")
escreva nums.selecione(a => a mod 2 <> 0).inverta.junte("\n")

1261 - Pontos de Feno

Descrição do Problema: 1261 - Pontos de Feno

Categoria: Estruturas e Bibliotecas

1261 - Pontos de Feno
tipo Palavra
  nome: Texto
  valor: Inteiro
fim

soma(palavras: Lista[Palavra], descrição: Lista[Texto], total: Inteiro): Inteiro =
  se palavras == [] ou descrição == [] então
    total
  senãose palavras.cabeça.nome == descrição.cabeça então
    soma(palavras, descrição.cauda, total + palavras.cabeça.valor)
  senãose palavras.cabeça.nome < descrição.cabeça
    soma(palavras.cauda, descrição, total)
  senão
    soma(palavras, descrição.cauda, total)
  fim

a = leia_inteiros(" ")
m, n = a[1], a[2]
palavras = para i de 1 até m gere
  entrada = leia_textos(" ")
  Palavra(entrada[1], entrada[2].inteiro)
fim.ordene(_.nome)

para i de 1 até n faça
  var descrição := leia_textos(" ")
  var entrada := leia_texto
  enquanto entrada <> "." faça
    descrição := entrada.divida(" ") + descrição
    entrada := leia_texto
  fim
  escreva soma(palavras, descrição.ordene, 0)
fim

1262 - Leitura Múltipla

Descrição do Problema: 1262 - Leitura Múltipla

Categoria: Strings

1262 - Leitura Múltipla
1
2
3
4
5
6
7
8
var s := leia_texto
enquanto não eof faça
  p = leia_inteiro
  x = s.divida_quando(_ <> _)
  y = x.mapeie(a => se a[1] == 'W' então a.tamanho senão (a.tamanho / p).teto.inteiro fim)
  escreva y.injete(0)(_ + _)
  s := leia_texto
fim

1263 - Aliteração

Descrição do Problema: 1263 - Aliteração

Categoria: Strings

1263 - Aliteração
1
2
3
4
5
6
7
8
9
var s := leia_textos(" ")
enquanto não eof faça
  aliteracoes = s.mapeie(_.minusculo[1])
                 .divida_quando((a, b) => a <> b)
                 .selecione(_.tamanho > 1)
                 .tamanho
  escreva aliteracoes
  s := leia_textos(" ")
fim

1266 - Tornado!

Descrição do Problema: 1266 - Tornado!

Categoria: Ad-Hoc · Maratona SBC (2ª fase) 2005

1266 - Tornado!
var n := leia_inteiro
enquanto n <> 0 faça
    var zero, soma, inicio, postes = 0
    para numero em leia_texto.selecione(_ <> ' ') faça
        se numero == '0' então
            se inicio == 0 então
                zero := zero + 1
            fim
            postes := postes + 1
        senão
            inicio := 1
            soma := soma + postes div 2
            postes := 0
        fim
    fim
    se postes > 0 então
        soma := soma - zero div 2
        postes := postes + zero
        soma := soma + postes div 2 
    fim
    escreva soma
    n := leia_inteiro
fim

1267 - Biblioteca Pascal

Descrição do Problema: 1267 - Biblioteca Pascal

Categoria: Ad-Hoc · Maratona SBC (2ª fase) 2005

1267 - Biblioteca Pascal
var entrada := leia_inteiros(" ")
enquanto entrada <> [0, 0] faça
  n = entrada[2]
  var linhas := Lista(n, leia_inteiros(" "))
  var todos := falso
  enquanto (não todos) e (linhas[1] <> []) faça
    todos := linhas.mapeie(_.cabeça).injete(verdadeiro)((a, b) => a e b == 1)
    linhas := linhas.mapeie(_.cauda)
  fim
  se todos então escreva "yes" senão escreva "no" fim
  entrada := leia_inteiros(" ")
fim

1272 - Mensagem Oculta

Descrição do Problema: 1272 - Mensagem Oculta

Categoria: Strings

1272 - Mensagem Oculta
1
2
3
4
5
6
n = leia_inteiro
para i de 1 até n faça
  s = leia_textos(" ").selecione(_ <> "")
  r = s.mapeie(_[1]).junte("")
  escreva r
fim

1273 - Justificador

Descrição do Problema: 1273 - Justificador

Categoria: Strings

1273 - Justificador
var n := leia_inteiro
enquanto n > 0 faça
  s = leia_textos(n)
  tam = s.injete(0)((a, b) => se b.tamanho > a então b.tamanho senão a fim)
  para linha em s faça
    escreva linha formato "%{tam}s"
  fim
  n := leia_inteiro
  se n > 0 então escreva "" fim
fim

1276 - Faixa de Letras

Descrição do Problema: 1276 - Faixa de Letras

Categoria: Strings

1276 - Faixa de Letras
1
2
3
4
5
6
7
8
9
var linha := leia_texto
enquanto não eof faça
  faixas = linha.ordene
                .divida_quando((a, b) => b - a > 1)
                .mapeie(a => "{a[1]}:{a[-1]}")
                .descarte_enquanto(_ == " : ")
  escreva faixas.junte(", ")
  linha := leia_texto
fim

1277 - Pouca Frequência

Descrição do Problema: 1277 - Pouca Frequência

Categoria: Strings

1277 - Pouca Frequência
t = leia_inteiro
para i de 1 até t faça
  n = leia_inteiro
  nomes = leia_textos(" ")
  frequencia = leia_textos(" ")
                 .mapeie(_.selecione(_ <> 'M'))
                 .mapeie(a => a.selecione(_ == 'P').tamanho / a.tamanho)
  alunos = nomes.zip(frequencia)
  a = alunos.selecione(_.segundo < 0.75).mapeie(_.primeiro)
  escreva a.junte(" ")
fim

1278 - Justificador II

Descrição do Problema: 1278 - Justificador II

Categoria: Strings

1278 - Justificador II
var n := leia_inteiro
enquanto n > 0 faça
  linhas = leia_textos(n).mapeie(_.descarte_enquanto(_ == ' ').divida(" ").junte(" "))
  tamanho = linhas.injete(0)((a, b) => se b.tamanho > a então b.tamanho senão a fim)
  alinhamento = "%{tamanho}s"
  para i de 1 até n faça
    escreva linhas[i] formato alinhamento
  fim
  n := leia_inteiro
  se n > 0 então escreva "" fim
fim

1279 - Ano Bissexto ou Ano não Bissexto

Descrição do Problema: 1279 - Ano Bissexto ou Ano não Bissexto

Categoria: Matemática

1279 - Ano Bissexto ou Ano não Bissexto
somar(digitos: Lista[Inteiro], soma: Inteiro): Inteiro =
  se digitos <> [] então
    somar(digitos.descarte(2), soma + digitos[1])
  senão
    soma
  fim

soma_par(digitos: Lista[Inteiro]) = somar(digitos.inverta.descarte(1), 0)
soma_impar(digitos: Lista[Inteiro]) = somar(digitos.inverta, 0)

div4(digitos: Lista[Inteiro]) = (digitos[2] * 10 + digitos[1]) mod 4 == 0
div5(digitos: Lista[Inteiro]) = digitos[1] mod 5 == 0
div100(digitos: Lista[Inteiro]) = digitos.pegue(2) == [0, 0]
div400(digitos: Lista[Inteiro]) = div100(digitos) e div4(digitos.descarte(2))
div11(digitos: Lista[Inteiro]) = (soma_par(digitos) - soma_impar(digitos)) mod 11 == 0
div3(digitos: Lista[Inteiro]) = digitos.injete(0)(_ + _) mod 3 == 0

var primeiro := verdadeiro
var entrada := leia_texto
enquanto não eof faça
  digitos = entrada.inverta.lista.mapeie(_ - '0')

  se primeiro então
    primeiro := falso
  senão
    escreva ""
  fim

  bissexto = div4(digitos) e não div100(digitos) ou div400(digitos)
  bulukulu = bissexto e div5(digitos) e div11(digitos)
  huluculu = div5(digitos) e div3(digitos)

  se bissexto então
    escreva "This is leap year."
  fim
  se huluculu então
    escreva "This is huluculu festival year."
  fim
  se bulukulu então
    escreva "This is bulukulu festival year."
  fim
  se não bissexto e não huluculu então
    escreva "This is an ordinary year."
  fim

  entrada := leia_texto
fim

1280 - Amigos

Descrição do Problema: 1280 - Amigos

Categoria: Matemática

1280 - Amigos
pot2(n, r: BigInt): BigInt = 
    se n < 1
        então r
        senão pot2(n - 1, 2 * r)
    fim

def ack(m, n: BigInt): BigInt = 
    se      m <= 1 então n + m + 1
    senãose m == 2 então 2 * n + 3
    senãose m == 3 então 8 * (pot2(n, 1) - 1) + 5
    senãose n == 0 então ack(m - 1, 1)
                   senão ack(m - 1, ack(m, n - 1))
    fim

t = leia_inteiro
para i de 1 até t faça
    a = leia_inteiros(" ")
    escreva ack(a[1], a[2])
fim

1281 - Ida à Feira

Descrição do Problema: 1281 - Ida à Feira

Categoria: Estruturas e Bibliotecas

1281 - Ida à Feira
tipo Preço
  produto: Texto
  valor: Real
fim

tipo Produto
  produto: Texto
  quantidade: Inteiro
fim

total(preços: Lista[Preço], produtos: Lista[Produto]): Real =
  se produtos == [] então
    0.0
  senãose preços.cabeça.produto == produtos.cabeça.produto então
    preços.cabeça.valor * produtos.cabeça.quantidade + total(preços.cauda, produtos.cauda)
  senão
    total(preços.cauda, produtos)
  fim

n = leia_inteiro
para i de 1 até n faça
  m = leia_inteiro
  preços = para j de 1 até m gere
             a = leia_textos(" ")
             Preço(a[1], a[2].real)
           fim.ordene(_.produto)
  p = leia_inteiro
  produtos = para j de 1 até p gere
               a = leia_textos(" ")
               Produto(a[1], a[2].inteiro)
             fim.ordene(_.produto)
  escreva "R$ {total(preços, produtos) formato "%.2f"}"
fim

1285 - Dígitos Diferentes

Descrição do Problema: 1285 - Dígitos Diferentes

Categoria: Ad-Hoc · Maratona SBC (2ª fase) 2012

1285 - Dígitos Diferentes
sem_repeticao(n: Inteiro)
  a = n.texto.ordene.lista
  b = a.zip(a.cauda)
  b.selecione(x => x.primeiro == x.segundo).tamanho == 0
fim

var c := 0
numeros = para i de 1 até 5001 gere
  d = c
  se sem_repeticao(i) então c:= c + 1 fim
  d
fim

var a := leia_texto
enquanto não eof faça
  z = a.divida(" ")
  n, m = z[1].inteiro, z[2].inteiro
  escreva numeros[m+1] - numeros[n]
  a := leia_texto
fim

1287 - Processador Amigável de Inteiros

Descrição do Problema: 1287 - Processador Amigável de Inteiros

Categoria: Strings

1287 - Processador Amigável de Inteiros
var s := leia_texto
enquanto não eof faça
  chars = s.selecione(c => c <> ',' e c <> ' ')
           .lista
           .mapeie(c => escolha c
                          caso 'l' => '1'
                          caso 'o' => '0'
                          caso 'O' => '0'
                          caso  _  => c
                        fim)
  x = chars.descarte_enquanto(_ == '0').mapeie(_.caractere).junte("")
  x2 = se x == "" e chars <> [] então "0" senão x fim
  erro = chars.selecione(c => c < '0' ou c > '9') <> []
  se x2 <> "" e não erro e (x2.tamanho < 10 ou (x2.tamanho == 10 e x2 <= "2147483647")) então
    escreva x2.inteiro
  senão
    escreva "error"
  fim
  s := leia_texto
fim

1291 - Será Isso Integração?

Descrição do Problema: 1291 - Será Isso Integração?

Categoria: Geometria Computacional

1291 - Será Isso Integração?
r1_a = 1 - PI / 6.0 - raiz(3) / 4.0 
r2_a = 1 - PI / 4.0

var saida: Lista[Texto] := []

var entrada := leia_texto
enquanto não eof faça
    lado = entrada.real
    area_quadrado = lado * lado

    r1 = area_quadrado * r1_a
    r2 = area_quadrado * r2_a - 2.0 * r1
    r3 = area_quadrado - 4.0 * (r1 + r2)
    saida := "{r3 formato "%.3f"} {(4 * r2) formato "%.3f"} {(4 * r1) formato "%.3f"}" :: saida
    entrada := leia_texto
fim

escreva saida.inverta.junte("\n")

1292 - Problema com um Pentágono

Descrição do Problema: 1292 - Problema com um Pentágono

Categoria: Geometria Computacional

1292 - Problema com um Pentágono
1
2
3
4
5
6
k = sen(108 * PI / 180) / sen(63 * PI / 180)
var p := leia_texto
enquanto não eof faça
  escreva (k * p.real) formato "%.10f"
  p := leia_texto
fim

1294 - A Maior e Menor Caixa

Descrição do Problema: 1294 - A Maior e Menor Caixa

Categoria: Geometria Computacional

1294 - A Maior e Menor Caixa
def min(a, b: Real) = se a < b então a senao b fim
def real(a: Texto) = a.real

var saida: Lista[Texto] := []

var entrada := leia_texto
enquanto não eof faça
    a = entrada.divida(" ").mapeie(real)
    l, w = a[1], a[2]
    menor = min(l, w) / 2
    r = - raiz((l - w) ^ 2 + l * w) / 6 + (l + w) / 6
    saida := "{r formato "%.3f"} 0.000 {menor formato "%.3f"}" :: saida
    entrada := leia_texto
fim
escreva saida.inverta.junte("\n")

1296 - Medianas

Descrição do Problema: 1296 - Medianas

Categoria: Geometria Computacional

1296 - Medianas
var entrada := leia_texto
enquanto não eof faça
  l = entrada.divida(" ").mapeie(_.real).ordene
  a, b, c = l[1], l[2], l[3]
  se c < a + b então
    s = (a + b + c) / 2
    area = 4 / 3 * (s * (s - a) * (s - b) * (s - c)) ^ (1 / 2)
    escreva area formato "%.3f"
  senão
    escreva "-1.000"
  fim
  entrada := leia_texto
fim