Lösen mit Ruby und Python AtCoder ABC172 C Kumulative Summen-Dichotomie

Einführung

Dieses Thema

AtCoder Beginner Contest C - Tsundoku Difficulty: 878

Dieses Thema, kumulative Summe + Dichotomie

Zuerst dachte ich, es sei eine dynamische Planungsmethode, aber ich bekam TLE ~~ einen großen Zeitverlust ~~ und wechselte zu einer zweiminütigen Suche. In Eingabebeispiel 1 finden Sie in jeder Zeile der folgenden Tabelle die maximale Anzahl von Schreibtischen A und B, die K Minuten nicht überschreiten.

1 2 3 4 5 6 7
60 90 120 80 150 80 150
60 90 80 150 80 150
60 80 150 80 150
80 150 80 150

Ruby

ruby.rb


n, m, k = gets.split.map(&:to_i)
a = gets.split.map(&:to_i)
b = gets.split.map(&:to_i)
c = Array.new(n + 1, 0)
n.times do |i|
  c[i + 1] = c[i] + a[i]
end
d = Array.new(m + 1, 0)
m.times do |i|
  d[i + 1] = d[i] + b[i]
end
cnt = 0
0.upto(n) do |i|
  break if c[i] > k
  e = d.bsearch_index{_1 > k - c[i]}
  if e.nil?
    cnt = i + m if cnt < i + m
  else
    cnt = i + e - 1 if cnt < i + e - 1
  end
end
puts cnt

ruby.rb


c = Array.new(n + 1, 0)
n.times do |i|
  c[i + 1] = c[i] + a[i]
end
d = Array.new(m + 1, 0)
m.times do |i|
  d[i + 1] = d[i] + b[i]
end

Kumulative Summe.

ruby.rb


  e = d.bsearch_index{_1 > k - c[i]}
  if e.nil?
    cnt = i + m if cnt < i + m
  else
    cnt = i + e - 1 if cnt < i + e - 1
  end

Es ist eine Zweiteilung. Wenn der Maximalwert des Arrays überschritten wird, wird "nil" zurückgegeben, sodass dieser Prozess eingeschlossen wird. Python

python.py


from sys import stdin
import bisect

def main():
    input = stdin.readline
    n, m, k = map(int, input().split())
    a = list(map(int, input().split()))
    b = list(map(int, input().split()))
    c = [0] * (n + 1)
    for i in range(n):
        c[i + 1] = c[i] + a[i]
    d = [0] * (m + 1)
    for i in range(m):
        d[i + 1] = d[i] + b[i]
    cnt = 0
    for i in range(n + 1):
        if c[i] > k:
            break
        e = bisect.bisect_right(d, k - c[i])
        if cnt < i + e - 1:
            cnt = i + e - 1
    print(cnt)
main()

python.py


        e = bisect.bisect_right(d, k - c[i])
        if cnt < i + e - 1:
            cnt = i + e - 1

Es ist eine Zweiteilung. Wenn der Maximalwert des Arrays überschritten wird, wird die "Elementnummer + 1" des Arrays zurückgegeben.

Ruby Python
Codelänge(Byte) 433 570
Ausführungszeit(ms) 349 246
Erinnerung(KB) 44860 47636

Zusammenfassung

Referenzierte Site

Recommended Posts

Lösen mit Ruby und Python AtCoder ABC172 C Kumulative Summen-Dichotomie
Lösen mit Ruby und Python AtCoder ABC133 D Kumulative Summe
Lösen mit Ruby und Python AtCoder ABC057 C Zerlegung des Primfaktors Bit vollständige Suche
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 098 C Kumulative Summe
Lösen mit Ruby und Python AtCoder Tenka1 Programmer Contest C Kumulative Summe
AtCoder ABC 114 C-755 mit Python3 gelöst
Lösen mit Ruby und Python AtCoder ABC151 D Suche nach Breitenpriorität
Lösen mit Ruby und Python AtCoder ABC011 C Dynamische Planungsmethode
AtCoder ABC168 Ein in Ruby und Python gelöster Fallausdruck
Algorithmus in Python (ABC 146 C Dichotomie
AtCoder ARC104 B Kumulative Summe in Ruby, Python und Java gelöst
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 065 C-te Potenz
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 047 C Regulärer Ausdruck
Binäre Suche in Python / C ++
Lösen mit Ruby und Python AtCoder ARC 059 C Minimum-Quadrat-Methode
Lösen mit Ruby und Python AtCoder ABC153 E Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ARC067 C Primfaktorisierung
Lösen mit Ruby und Python AtCoder ABC138 D Benachbarte Liste
Lösen in Ruby, Python und Java AtCoder ABC141 D Priority Queue
Lösen mit Ruby, Python und numpy AtCoder ABC054 B Matrixberechnung
Lösen mit Ruby, Python und networkx AtCoder ABC168 D Benachbarte Liste
Socket-Kommunikation in C-Sprache und Python
Lösen mit Ruby, Perl, Java und Python AtCoder AGC 033 Eine Suche mit Breitenpriorität
Lösen mit Ruby, Perl, Java und Python AtCoder CADDi 2018 C Primfaktorisierung
AtCoder ABC 165 D Bodenfunktion in Ruby, Perl, Java und Python gelöst
AtCoder ABC 174 Python
Lösen mit Ruby und Python AtCoder CODE FESTIVAL 2016 qual C B Priority Queue
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 066 C Iterativer Square Hash
AtCoder ABC110 C-String-Manipulation zum Lösen in Ruby
Fordern Sie AtCoder (ABC) 164 mit Python heraus! A ~ C Problem
AtCoder ABC 175 Python
Lösen mit Ruby, Perl, Java und Python AtCoder diverta 2019 Programmierwettbewerb C String Manipulation
Löse den Atcoder ABC176 (A, B, C, E) in Python
Dichotomie mit Python
Ruby, Python und Map
[Python] Bisection-Suche ABC155D
Python und Ruby teilen sich
Dichotomie mit Python
Dichotomie mit Python 3
ABC147 C --HonestOrUnkind2 [Python]
Binäre Suche in Python
[Python] Kumulative Summe ABC179D
AtCoder ABC 114 C-755 mit Python3 gelöst
[AtCoder Erklärung] Kontrollieren Sie ABC180 A, B, C Probleme mit Python!
Mandelbrot-Benchmark (C, PHP, HHVM, Ruby, Python, PyPy und Kinx)
Lösen mit Ruby und Python AtCoder AISING2020 D Iterative Square-Methode
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 A.
[AtCoder Erklärung] Kontrollieren Sie ABC158 A, B, C Probleme mit Python!
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 B.
AtCoder ABC151 Problem D Geschwindigkeitsvergleich in C ++ / Python / PyPy
[AtCoder Erklärung] Kontrollieren Sie ABC164 A, B, C Probleme mit Python!
[AtCoder Erklärung] Kontrollieren Sie ABC168 A, B, C Probleme mit Python!
AtCoder ABC 177 Python (A ~ E)
C-Sprache ALDS1_4_B Binäre Suche
Python auf Ruby und wütend Ruby auf Python
AtCoder ABC 178 Python (A ~ E)