Lösen mit Ruby und Python AtCoder CODE FESTIVAL 2016 qual C B Priority Queue

Einführung

Dieses Thema

Dieses Thema, Prioritätswarteschlange

Es handelt sich um ein Problem wie eine erweiterte Version von * AtCoder ABC141 D mit Ruby, Python und Java lösen *, das zuvor behoben wurde.

Nimmt das Maximum und das zweite Maximum eines bestimmten Arrays aus der Warteschlange, subtrahiert 1 und stellt es wieder in die Warteschlange. Wiederholen Sie diesen Vorgang und verlassen Sie die Schleife, wenn die Warteschlange kleiner als eins ist.

Es gibt auch eine mathematische Lösung.

Ruby mathematische Lösung

ruby.rb


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

Ich werde auf den Maximalwert achten und ihn lösen, aber das erfrischende Gefühl ist erstaunlich. 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

Nehmen Sie zwei, subtrahieren Sie sie und stellen Sie sie wieder in die Warteschlange, wenn sie 1 oder mehr sind.

Python mathematische Lösung

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()

Wenn die Operation kompliziert ist, ist es besser, eine Funktion für die Codekonvertierung vorzubereiten.

Ruby mathematische Lösung Ruby Heap Python mathematische Lösung Python heapq
Codelänge(Byte) 76 1120 184 458
Ausführungszeit(ms) 7 26 17 22
Erinnerung(KB) 1788 1788 2940 3064

Zusammenfassung

Referenzierte Site

Recommended Posts

Lösen mit Ruby und Python AtCoder CODE FESTIVAL 2016 qual C B Priority Queue
Lösen mit Ruby und Python AtCoder ABC011 C Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ARC067 C Primfaktorisierung
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 B.
Lösen mit Ruby, Python und numpy AtCoder ABC054 B Matrixberechnung
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 065 C-te Potenz
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 107 B String-Manipulation
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 098 C Kumulative Summe
Lösen mit Ruby, Perl, Java und Python AtCoder CADDi 2018 C Primfaktorisierung
Lösen mit Ruby und Python AtCoder Tenka1 Programmer Contest C Kumulative Summe
Lösen mit Ruby und Python AtCoder ABC178 D Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ABC151 D Suche nach Breitenpriorität
Lösen mit Ruby und Python AtCoder AISING2020 D Iterative Square-Methode
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 A.
Lösen mit Ruby und Python AtCoder ABC153 E Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ABC138 D Benachbarte Liste
Lösen mit Ruby, Perl, Java und Python AtCoder diverta 2019 Programmierwettbewerb C String Manipulation
Lösen in Ruby, Python und Java AtCoder ABC141 D Priority Queue
AtCoder ARC104 B Kumulative Summe in Ruby, Python und Java gelöst
Lösen mit Ruby, Python und networkx AtCoder ABC168 D Benachbarte Liste
AtCoder JSC2019 Qual B Gelöst von Ruby und Python
Lösen mit Ruby, Perl, Java und Python AtCoder AGC 033 Eine Suche mit Breitenpriorität
AtCoder ABC 165 D Bodenfunktion in Ruby, Perl, Java und Python gelöst
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 131 D Sortieren von Arrays
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 047 C Regulärer Ausdruck
AtCoder ABC110 C-String-Manipulation zum Lösen in Ruby
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 066 C Iterativer Square Hash
[AtCoder Erklärung] Kontrollieren Sie ABC180 A, B, C Probleme mit Python!
Lösen mit Ruby und Python AtCoder ABC133 D Kumulative Summe
[AtCoder Erklärung] Kontrollieren Sie ABC158 A, B, C Probleme mit Python!
[AtCoder Erklärung] Kontrollieren Sie ABC164 A, B, C Probleme mit Python!
[AtCoder Erklärung] Kontrollieren Sie ABC168 A, B, C Probleme mit Python!
Scraping mit Node, Ruby und Python
AtCoder ABC 114 C-755 mit Python3 gelöst
[Erklärung zum AtCoder] Kontrollieren Sie die A-, B- und C-Probleme von ABC182 mit Python!
Lösen mit Ruby und Python AtCoder ABC172 C Kumulative Summen-Dichotomie
AtCoder Anfängerwettbewerb 170 B Problem "Crane and Turtle" Erklärung (Python3, C ++, Java)
Mit Ruby (Rails) verschlüsseln und mit Python entschlüsseln
Einfaches Web-Scraping mit Python und Ruby
RaspberryPi L Chika mit Python und C #
[AtCoder Erklärung] Kontrollieren Sie ABC184 A, B, C Probleme mit Python!
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 086 C Hash-Sortierung
[Erklärung zum AtCoder] Kontrollieren Sie die A-, B-, (C), D-Probleme von ABC165 mit Python!
Lösen mit Ruby und Python AtCoder ABC084 D Kumulative Summe der Primzahlen
[Erklärung zum AtCoder] Kontrollieren Sie die A-, B-, C- und D-Probleme von ABC181 mit Python!
Lösen des Lorenz 96-Modells mit Julia und Python
Fordern Sie AtCoder (ABC) 164 mit Python heraus! A ~ C Problem
AtCoder ARC080 D Simulation mit Ruby und Python gelöst
C-Sprache, Java, Python-Benchmarks mit Primfaktorisierung
Prozessübergreifende Kommunikation zwischen Ruby und Python (POSIX-Nachrichtenwarteschlange)
Löse den Atcoder ABC176 (A, B, C, E) in Python
Vergleich von CoffeeScript mit JavaScript-, Python- und Ruby-Grammatik
Versionsverwaltung von Node, Ruby und Python mit anyenv
[Python / Ruby] Mit Code verstehen Wie man Daten aus dem Internet abruft und in CSV schreibt
Löse AtCoder 167 mit Python
Ruby, Python und Map
Python und Ruby teilen sich