AtCoder ABC130 D Dichotomie de la somme cumulée résolue par Ruby et Python

introduction

Ce thème

AtCoder Beginner Contest D - Enough Array Difficulty: 859

Ce thème, somme cumulée + dichotomie

Énoncé du problème (Condition) La somme des valeurs de tous les éléments inclus dans la sous-colonne continue est égale ou supérieure à K. À partir de , vous pouvez voir que la somme cumulée est utilisée, mais comme 1 ≤ N ≤ 100_000, si vous tournez la boucle deux fois, elle devient TLE. Par conséquent, puisque la somme cumulée est une augmentation monotone, une dichotomie est également utilisée pour réduire la quantité de calcul. 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}

La somme cumulée est calculée ici. ** Addenda ** Je l'ai modifié pour le code que vous avez reçu dans les commentaires.

bsearch.rb


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

Bien qu'il s'agisse d'une dichotomie, lower_bound dans *** C ++ *** devient bsearch ou bsearch_index dans *** 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 *** a une fonction appelée ʻaccumulate` qui calcule la somme cumulée.

bisect.py


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

C'est une dichotomie, mais utilisez «bisect» ou «bisect_left» «bisect_right». Si le nombre à rechercher est dans le tableau, «bisect» renvoie la position à droite de ce nombre et «bisect_left» renvoie la position à gauche.

for.py


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

Quand j'ai tourné la boucle avec range (), c'était TLE.

Ruby Python
Longueur du code(Byte) 238 377
Temps d'exécution(ms) 165 101
Mémoire(KB) 11780 14196

Résumé

Site référencé

instance method Array#bsearch

Recommended Posts

AtCoder ABC130 D Dichotomie de la somme cumulée résolue par Ruby et Python
Résolution avec Ruby et Python AtCoder ABC172 C Dichotomie de somme cumulée
Résolution avec Ruby et Python AtCoder ABC133 D Somme cumulée
Résoudre avec Ruby et Python AtCoder ABC084 D Somme cumulative des nombres premiers
Résolution avec Ruby et Python AtCoder ABC151 D Recherche de priorité de largeur
Résolution avec Ruby et Python AtCoder ABC138 D Liste adjacente
AtCoder ABC168 Une expression de cas résolue en Ruby et Python
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
Résolution avec Ruby et Python AtCoder ABC057 C Décomposition du facteur premier Recherche complète de bits
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 098 C Somme cumulative
AtCoder ABC 165 D Floor Function résolue en Ruby, Perl, Java et Python
Résolution avec Ruby et Python AtCoder Tenka1 Programmer Contest C Somme cumulative
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 131 D Tri des tableaux
AtCoder ABC 182 Python (A ~ D)
Résolution avec Ruby et Python AtCoder AISING2020 D Méthode carrée itérative
Résolution avec Ruby et Python AtCoder ABC011 C Méthode de planification dynamique
Résolution avec Ruby et Python AtCoder ABC153 E Méthode de planification dynamique
Résolu AtCoder ABC 114 C-755 avec Python3
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
Algorithme en Python (ABC 146 C Dichotomy
Résoudre AtCoder ABC168 avec python (A ~ D)
Résolution avec Ruby, Perl, Java et Python AtCoder AGC 033 A Recherche de priorité de largeur
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 047 C Expression régulière
AtCoder ABC 174 Python
AtCoder ABC 175 Python
Dichotomie avec Python
[Python] Acing binaire 2020D
Ruby, Python et carte
Recherche de bisection (python2.7) mémo
[Python] Recherche de bisection ABC155D
Python et Ruby se séparent
Dichotomie avec python
Dichotomie avec Python 3
Recherche binaire en Python
[Python] Somme cumulée ABC179D
Résolution avec Ruby et Python AtCoder ARC 059 C Méthode du carré minimum
Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 A
Résolution avec Ruby et Python AtCoder ARC067 C factorisation premier
Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 B
AtCoder ABC151 Problème D Comparaison de la vitesse en C ++ / Python / PyPy
AtCoder ABC156 Problème D Calcul et séquence du module Bouquet, etc.
AtCoder ABC 177 Python (A ~ E)
Python sur Ruby et Ruby en colère sur Python
AtCoder ABC 178 Python (A ~ E)
Atcoder ABC164 A-C en Python
Mémo tranche python et rubis
Méthode de la somme cumulée et de la pomme de terre
AtCoder ABC 176 Python (A ~ E)
Atcoder ABC167 A-D en Python
Recherche binaire en Python / C ++
Algorithme en Python (dichotomie)
Résoudre ABC175 D en Python
Syntaxe Ruby et Python ~ branch ~
Atcoder ABC165 A-D en Python