AtCoder ABC130 D Kumulative Summen-Dichotomie, gelöst durch Ruby und Python

Einführung

Dieses Thema

AtCoder Beginner Contest D - Enough Array Difficulty: 859

Dieses Thema, kumulative Summe + Dichotomie

Problemstellung (Bedingung) Die Summe der Werte aller in der fortlaufenden Unterspalte enthaltenen Elemente ist K oder mehr. Aus können Sie sehen, dass die kumulative Summe verwendet wird, aber da 1 ≤ N ≤ 100_000 ist, wird die Schleife, wenn Sie sie zweimal drehen, zu TLE. Da die kumulative Summe eine monotone Zunahme ist, wird daher auch eine Dichotomie verwendet, um den Rechenaufwand zu verringern. Ruby

ruby.rb


n, k = gets.split.map(&:to_i)
a = gets.split.map(&:to_i)
acc = 0
x = [0] + a.map{|v| acc += v}
cnt = 0
x.each do |y|
  j = x.bsearch_index{|z| z - y >= k}
  if j == nil
    break
  else
    cnt += n - j + 1
  end
end
puts cnt

accumulate.rb


acc = 0
x = [0] + a.map{|v| acc += v}

Die kumulative Summe wird hier berechnet. ** Nachtrag ** Ich habe es an den Code angepasst, den Sie in den Kommentaren erhalten haben.

bsearch.rb


  j = x.bsearch_index{|z| z - y >= k}

Obwohl es sich um eine Dichotomie handelt, wird "lower_bound" in *** C ++ *** zu "bsearch" oder "bsearch_index" in *** Ruby ***. Python

python.py


from sys import stdin

def main():
    import bisect
    import itertools

    input = stdin.readline
    n, k = map(int, input().split())
    a = list(map(int, input().split()))
    x = [0] + list(itertools.accumulate(a))
    cnt = 0
    for z in x:
        j = bisect.bisect_left(x, k + z)
        if j <= n:
            cnt += n - j + 1
    print(cnt)
main()

accumulate.py


    x = [0] + list(itertools.accumulate(a))

*** Python *** hat eine Funktion namens "akkumulieren", die die kumulative Summe berechnet.

bisect.py


        j = bisect.bisect_left(x, k + z)

Es ist eine Dichotomie, aber verwenden Sie "bisect" oder "bisect_left", "bisect_right". Wenn sich die zu suchende Zahl im Array befindet, gibt bisect die Position rechts von dieser Zahl zurück und bisect_left gibt die Position links zurück.

for.py


    for z in x:
    for i in range(n):

Als ich die Schleife mit "range ()" drehte, war es "TLE".

Ruby Python
Codelänge(Byte) 238 377
Ausführungszeit(ms) 165 101
Erinnerung(KB) 11780 14196

Zusammenfassung

Referenzierte Site

instance method Array#bsearch

Recommended Posts

AtCoder ABC130 D Kumulative Summen-Dichotomie, gelöst durch Ruby und Python
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 ABC084 D Kumulative Summe der Primzahlen
Lösen mit Ruby und Python AtCoder ABC151 D Suche nach Breitenpriorität
Lösen mit Ruby und Python AtCoder ABC138 D Benachbarte Liste
AtCoder ABC168 Ein in Ruby und Python gelöster Fallausdruck
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
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
AtCoder ABC 165 D Bodenfunktion in Ruby, Perl, Java und Python gelöst
Lösen mit Ruby und Python AtCoder Tenka1 Programmer Contest C Kumulative Summe
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 131 D Sortieren von Arrays
AtCoder ABC 182 Python (A ~ D)
Lösen mit Ruby und Python AtCoder AISING2020 D Iterative Square-Methode
Lösen mit Ruby und Python AtCoder ABC011 C Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ABC153 E Dynamische Planungsmethode
AtCoder ABC 114 C-755 mit Python3 gelöst
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
Algorithmus in Python (ABC 146 C Dichotomie
Löse AtCoder ABC168 mit Python (A ~ D)
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 ABC 047 C Regulärer Ausdruck
AtCoder ABC 174 Python
AtCoder ABC 175 Python
Dichotomie mit Python
[Python] Binary Acing 2020D
Ruby, Python und Map
Memo zur Bisektionssuche (python2.7)
[Python] Bisection-Suche ABC155D
Python und Ruby teilen sich
Dichotomie mit Python
Dichotomie mit Python 3
Binäre Suche in Python
[Python] Kumulative Summe ABC179D
Lösen mit Ruby und Python AtCoder ARC 059 C Minimum-Quadrat-Methode
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 A.
Lösen mit Ruby und Python AtCoder ARC067 C Primfaktorisierung
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 B.
AtCoder ABC151 Problem D Geschwindigkeitsvergleich in C ++ / Python / PyPy
AtCoder ABC156 Problem D Berechnung und Reihenfolge der Bouquet-Mods usw.
AtCoder ABC 177 Python (A ~ E)
Python auf Ruby und wütend Ruby auf Python
AtCoder ABC 178 Python (A ~ E)
Atcoder ABC164 A-C in Python
Python und Ruby Slice Memo
Kumulative Summen- und Kartoffelmethode
AtCoder ABC 176 Python (A ~ E)
Atcoder ABC167 A-D in Python
Binäre Suche in Python / C ++
Algorithmus in Python (Dichotomie)
Löse ABC175 D in Python
Ruby- und Python-Syntax ~ branch ~
Atcoder ABC165 A-D in Python