Résolution avec Ruby et Python AtCoder CODE FESTIVAL 2016 qual C B Priority Queue

introduction

Ce thème

Ce thème, file d'attente prioritaire

Des problèmes tels qu'une version avancée des * [AtCoder ABC141 D Priority Queues Solved in Ruby, Python et Java] précédemment résolus (https://qiita.com/superrino130/items/a4795aa0d03090f06d8d) *.

Prend le maximum et le second maximum d'un tableau donné de la file d'attente, soustrait 1 et le remet dans la file d'attente. Répétez cette opération et quittez la boucle lorsque la file d'attente est inférieure à un.

Il existe également une solution mathématique.

Solution mathématique Ruby

ruby.rb


k = gets.to_i
a = gets.split.map(&:to_i).max
puts [0, 2 * a - k - 1].max

Je vais faire attention à la valeur maximale et la résoudre, mais la sensation de fraîcheur est incroyable. Ruby Heap

ruby.rb


class Heap
  attr_reader :size
  def initialize(up: false)
    @up = up
    @heap = []
    @size = 0
  end
  def sum
    x = 0
    @size.times do |i|
      x += @heap[i]
    end
    x
  end
  def push(n)
    n = -n if @up
    i = @size
    while i > 0
      pid = (i - 1) / 2
      break if n >= @heap[pid]
      @heap[i] = @heap[pid]
      i = pid
    end
    @heap[i] = n
    @size += 1
  end
  def pop
    return nil if @size == 0
    top = @heap[0]
    @size -= 1
    n = @heap[@size]
    i = 0
    while i * 2 + 1 < @size
      cid1 = i * 2 + 1
      cid2 = cid1 + 1
      if cid2 < @size && @heap[cid2] < @heap[cid1]
        cid1 = cid2
      end
      break if @heap[cid1] >= n
      @heap[i] = @heap[cid1]
      i = cid1
    end
    @heap[i] = n
    if @up
      -top
    else
      top
    end
  end
end

gets
a = gets.split.map(&:to_i)
h = Heap.new(up: true)
a.each do |x|
  h.push(x)
end
while h.size > 1
  u = h.pop
  v = h.pop
  h.push(u - 1) if u - 1 > 0
  h.push(v - 1) if v - 1 > 0
end
if h.size == 0
  puts "0"
else
  puts h.pop - 1
end

up.rb


  def initialize(up: false)
    @up = up

heap.rb


while h.size > 1
  u = h.pop
  v = h.pop
  h.push(u - 1) if u - 1 > 0
  h.push(v - 1) if v - 1 > 0
end

Prenez-en deux, soustrayez-les et, s'ils sont 1 ou plus, remettez-les dans la file d'attente.

Solution mathématique Python

python.py


from sys import stdin

def main():
    input = stdin.readline
    k, _ = map(int, input().split())
    a = max(map(int, input().split()))
    print(max(0, 2 * a - k - 1))
main()

Python heapq

python.py


from sys import stdin

def main():
    import heapq
    input = stdin.readline
    input()
    a = [-1 * int(i) for i in input().split()]
    heapq.heapify(a)
    while len(a) > 1:
        u = heapq.heappop(a)
        v = heapq.heappop(a)
        if u + 1 < 0:
            heapq.heappush(a, u + 1)
        if v + 1 < 0:
            heapq.heappush(a, v + 1)
    if len(a) == 0:
        print(0)
    else:
        print(abs(a[0] + 1))
main()

Si l'opération est compliquée, il est préférable de préparer une fonction pour la conversion de code.

Solution mathématique Ruby Ruby Heap Solution mathématique Python Python heapq
Longueur du code(Byte) 76 1120 184 458
Temps d'exécution(ms) 7 26 17 22
Mémoire(KB) 1788 1788 2940 3064

Résumé

Site référencé

Recommended Posts

Résolution avec Ruby et Python AtCoder CODE FESTIVAL 2016 qual C B Priority Queue
Résolution avec Ruby et Python AtCoder ABC011 C Méthode de planification dynamique
Résolution avec Ruby et Python AtCoder ARC067 C factorisation premier
Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 B
Résolution avec Ruby, Python et numpy AtCoder ABC054 B Calcul de la matrice
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 065 C-th power
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 107 B Manipulation de chaînes
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 098 C Somme cumulative
Résolution avec Ruby, Perl, Java et Python AtCoder CADDi 2018 C factorisation premier
Résolution avec Ruby et Python AtCoder Tenka1 Programmer Contest C Somme cumulative
Résolution avec Ruby et Python AtCoder ABC178 D Méthode de planification dynamique
Résolution avec Ruby et Python AtCoder ABC151 D Recherche de priorité de largeur
Résolution avec Ruby et Python AtCoder AISING2020 D Méthode carrée itérative
Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 A
Résolution avec Ruby et Python AtCoder ABC153 E Méthode de planification dynamique
Résolution avec Ruby et Python AtCoder ABC138 D Liste adjacente
Résolution avec Ruby, Perl, Java et Python AtCoder Diverta 2019 Concours de programmation Manipulation de chaînes C
Résolution en Ruby, Python et Java AtCoder ABC141 D Priority Queue
AtCoder ARC104 B Somme cumulative résolue en Ruby, Python et Java
Résolution avec Ruby, Python et networkx AtCoder ABC168 D Liste adjacente
AtCoder JSC2019 Qual B à résoudre par Ruby et Python
Résolution avec Ruby, Perl, Java et Python AtCoder AGC 033 A Recherche de priorité de largeur
AtCoder ABC 165 D Floor Function résolue en Ruby, Perl, Java et Python
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 131 D Tri des tableaux
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 047 C Expression régulière
Manipulation de chaîne C AtCoder ABC110 à résoudre dans Ruby
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 066 C Hash carré itératif
[Explication AtCoder] Contrôle ABC180 Problèmes A, B, C avec Python!
Résolution avec Ruby et Python AtCoder ABC133 D Somme cumulée
[Explication AtCoder] Contrôle ABC158 Problèmes A, B, C avec Python!
[Explication AtCoder] Contrôle ABC164 Problèmes A, B, C avec Python!
[Explication AtCoder] Contrôle ABC168 Problèmes A, B, C avec Python!
Scraping avec Node, Ruby et Python
Résolu AtCoder ABC 114 C-755 avec Python3
[Explication AtCoder] Contrôlez les problèmes A, B, C d'ABC182 avec Python!
Résolution avec Ruby et Python AtCoder ABC172 C Dichotomie de somme cumulée
AtCoder Beginner Contest 170 B Problème Explication "Crane and Turtle" (Python3, C ++, Java)
Crypter avec Ruby (Rails) et décrypter avec Python
Scraping Web facile avec Python et Ruby
RaspberryPi L Chika avec Python et C #
[Explication AtCoder] Contrôle ABC184 Problèmes A, B, C avec Python!
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 086 C Hash Sorting
[Explication AtCoder] Contrôlez les problèmes A, B, (C), D de ABC165 avec Python!
Résoudre avec Ruby et Python AtCoder ABC084 D Somme cumulative des nombres premiers
[Explication AtCoder] Contrôlez les problèmes A, B, C, D d'ABC181 avec Python!
Résolution du modèle Lorenz 96 avec Julia et Python
Défiez AtCoder (ABC) 164 avec Python! Un problème ~ C
Simulation AtCoder ARC080 D résolue avec Ruby et Python
Benchmarks langage C, Java, Python avec factorisation prime
Communication inter-processus entre Ruby et Python (file d'attente de messages POSIX)
Résoudre Atcoder ABC176 (A, B, C, E) en Python
Comparaison de CoffeeScript avec la grammaire JavaScript, Python et Ruby
Gestion des versions de Node, Ruby et Python avec anyenv
[Python / Ruby] Comprendre le code Comment obtenir des données en ligne et les écrire au format CSV
Résolvez AtCoder 167 avec python
Ruby, Python et carte
Python et Ruby se séparent