Résolution avec Ruby et Python AtCoder ABC172 C Dichotomie de somme cumulée

introduction

Ce thème

AtCoder Beginner Contest C - Tsundoku Difficulty: 878

Ce thème, somme cumulée + dichotomie

Au début, je pensais que c'était une méthode de planification dynamique, mais j'ai eu «TLE» ~~ une grosse perte de temps ~~, et je suis passé à une dichotomie. Dans l'exemple d'entrée 1, dans chaque ligne du tableau suivant, recherchez le nombre maximal de bureaux A et B qui ne dépassent pas K minutes.

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

Somme cumulée.

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

C'est une dichotomie. Si la valeur maximale du tableau est dépassée, «nil» est renvoyé, de sorte que le processus est inclus. 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

C'est une dichotomie. Si la valeur maximale du tableau est dépassée, le «numéro d'élément + 1» du tableau est renvoyé.

Ruby Python
Longueur du code(Byte) 433 570
Temps d'exécution(ms) 349 246
Mémoire(KB) 44860 47636

Résumé

Site référencé

Recommended Posts

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é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
Résolution avec Ruby et Python AtCoder Tenka1 Programmer Contest C Somme cumulative
Résolu AtCoder ABC 114 C-755 avec Python3
Résolution avec Ruby et Python AtCoder ABC151 D Recherche de priorité de largeur
Résolution avec Ruby et Python AtCoder ABC011 C Méthode de planification dynamique
AtCoder ABC168 Une expression de cas résolue en Ruby et Python
Algorithme en Python (ABC 146 C Dichotomy
AtCoder ARC104 B Somme cumulative résolue en Ruby, Python et Java
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 065 C-th power
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 047 C Expression régulière
Recherche binaire en Python / C ++
Résolution avec Ruby et Python AtCoder ARC 059 C Méthode du carré minimum
Résolution avec Ruby et Python AtCoder ABC153 E Méthode de planification dynamique
Résolution avec Ruby et Python AtCoder ARC067 C factorisation premier
Résolution avec Ruby et Python AtCoder ABC138 D Liste adjacente
Résolution en Ruby, Python et Java AtCoder ABC141 D Priority Queue
Résolution avec Ruby, Python et numpy AtCoder ABC054 B Calcul de la matrice
Résolution avec Ruby, Python et networkx AtCoder ABC168 D Liste adjacente
Communication socket par langage C et Python
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 CADDi 2018 C factorisation premier
AtCoder ABC 165 D Floor Function résolue en Ruby, Perl, Java et Python
AtCoder ABC 174 Python
Résolution avec Ruby et Python AtCoder CODE FESTIVAL 2016 qual C B Priority Queue
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 066 C Hash carré itératif
Manipulation de chaîne C AtCoder ABC110 à résoudre dans Ruby
Défiez AtCoder (ABC) 164 avec Python! Un problème ~ C
AtCoder ABC 175 Python
Résolution avec Ruby, Perl, Java et Python AtCoder Diverta 2019 Concours de programmation Manipulation de chaînes C
Résoudre Atcoder ABC176 (A, B, C, E) en Python
Dichotomie avec Python
Ruby, Python et carte
[Python] Recherche de bisection ABC155D
Python et Ruby se séparent
Dichotomie avec python
Dichotomie avec Python 3
ABC147 C --HonestOrUnkind2 [Python]
Recherche binaire en Python
[Python] Somme cumulée ABC179D
Résolu AtCoder ABC 114 C-755 avec Python3
[Explication AtCoder] Contrôle ABC180 Problèmes A, B, C avec Python!
Mandelbrot Benchmark (C, PHP, HHVM, Ruby, Python, PyPy et Kinx)
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
[Explication AtCoder] Contrôle ABC158 Problèmes A, B, C avec Python!
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
[Explication AtCoder] Contrôle ABC164 Problèmes A, B, C avec Python!
[Explication AtCoder] Contrôle ABC168 Problèmes A, B, C avec Python!
AtCoder ABC 177 Python (A ~ E)
Recherche binaire ALDS1_4_B langage C
Python sur Ruby et Ruby en colère sur Python
AtCoder ABC 178 Python (A ~ E)