Résolution avec Ruby et Python AtCoder ABC133 D Somme cumulée

introduction

Ce thème

AtCoder Beginner Contest D - Rain Flows into Dams Difficulty: 945

Ce thème, somme cumulée

C'est un problème pour résoudre des équations simultanées et peut être trouvé dans la «bibliothèque lup» de «numpy» et «scipy». Cependant, comme un pro de la concurrence, ce sera "TLE", donc il peut être résolu en transformant les équations simultanées comme suit.

  b1 + b2 = a1
  b2 + b3 = a2
  b3 + b1 = a3
  b1 =  a1 + -a2 +  a3
  b2 =  a1 +  a2 + -a3
  b3 = -a1 +  a2 +  a3

  b2 = a1 - a2 + a3
     = 2 * a1 - (a1 + a2 - a3)
     = 2 * a1 - b1

Ruby (AC)

ruby.rb


n = gets.to_i
a = gets.split.map(&:to_i)
ans = [0] * n
a.each_with_index do |x, i|
  if i.even?
    ans[0] += x
  else
    ans[0] -= x
  end
end
1.upto(n - 1) do |i|
  ans[i] = 2 * a[i - 1] - ans[i - 1]
end
puts ans * ' '

rui.rb


a.each_with_index do |x, i|
  if i.even?
    ans[0] += x
  else
    ans[0] -= x
  end
end

Une somme cumulative spéciale qui est ajoutée ou soustraite en fonction de l'indice. Ruby Matrix(TLE)

TLE.rb


require 'matrix'

n = gets.to_i
a = gets.split.map(&:to_i)
b = []
n.pred.times do |i|
  b[i] = [0] * i + [1] * 2 + [0] * (n - i - 2)
end
b << [1] + [0] * (n - 2) + [1]
m = Matrix.rows(b).lup.solve(a)
puts (m * 2).to_a.map{|e| e.to_i}.join(' ')

C'est une solution utilisant «lup» de la bibliothèque «Matrix», mais c'est «TLE». Ruby BigDecimal(TLE)

TLE.rb


require 'bigdecimal'
require 'bigdecimal/util'
require 'bigdecimal/ludcmp'

include LUSolve

n = gets.to_i
a = gets.chomp.split.map(&:to_d)
zero = '0.0'.to_d
one = '1.0'.to_d
b = []
n.pred.times do |i|
  b[i] = [zero] * i + [one] * 2 + [zero] * (n - i - 2)
end
b << [one] + [zero] * (n - 2) + [one]
b.flatten!
x = lusolve(b, a, ludecomp(b, a.size, zero, one), zero)
puts x.map{|e| e.to_i * 2}.join(' ')

La solution utilise «LUSolve», mais c'est «TLE». Python (AC)

python.py


from sys import stdin

def main():
    input = stdin.readline

    n = int(input())
    a = list(map(int, input().split()))
    ans = [0] * n
    for i in range(n):
        if i % 2 == 0:
            ans[0] += a[i]
        else:
            ans[0] -= a[i]
    for i in range(1, n):
        ans[i] = 2 * a[i - 1] - ans[i - 1]
    print(' '.join(map(str, ans)))
main()

Python numpy(TLE)

TLE.py


from sys import stdin

def main():
    import numpy as np
    input = stdin.readline

    n = int(input())
    a = [[] for _ in range(n)]
    for i in range(n - 1):
        a[i] = [0] * i + [1, 1] + [0] * (n - i - 2)
    a[n - 1] = [1] + [0] * (n - 2) + [1]
    A = np.array(a)
    b = np.array(list(map(int, input().split())))
    x = np.linalg.solve(A, b) * 2
    print(' '.join(map(str, map(int, x))))
main()

La solution utilisant la «bibliothèque linalg» de «numpy» est «TLE». Python scipy(TLE)

TLE.py


from sys import stdin

def main():
    import numpy as np
    from scipy import linalg
    input = stdin.readline

    n = int(input())
    a = [[] for _ in range(n)]
    for i in range(n - 1):
        a[i] = [0] * i + [1, 1] + [0] * (n - i - 2)
    a[n - 1] = [1] + [0] * (n - 2) + [1]
    A = np.array(a)
    b = np.array(list(map(int, input().split())))
    LU = linalg.lu_factor(A)
    x = linalg.lu_solve(LU, b) * 2
    print(' '.join(map(str, map(int, x))))
main()

La solution utilisant la «bibliothèque linalg» de «scipy» est «TLE».

Ruby Python
Longueur du code(Byte) 234 382
Temps d'exécution(ms) 130 98
Mémoire(KB) 14084 19132

Résumé

Site référencé instance method Matrix#lup

Recommended Posts

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
AtCoder ARC104 B Somme cumulative résolue en Ruby, Python et Java
AtCoder ABC130 D Dichotomie de la somme cumulée résolue par Ruby et Python
Résoudre AtCoder ABC168 avec python (A ~ D)
Résolution avec Ruby et Python AtCoder ABC178 D Méthode de planification dynamique
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
Résolvez AtCoder ABC166 avec python
Résolution avec Ruby, Python et networkx AtCoder ABC168 D Liste adjacente
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
Résolution avec Ruby et Python AtCoder ABC172 C Dichotomie de somme cumulée
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 047 C Expression régulière
Résoudre ABC166 A ~ D avec Python
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
[AtCoder] Résoudre ABC1 ~ 100 Un problème avec Python
Résolvez AtCoder 167 avec python
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, Perl, Java et Python AtCoder ABC 065 C-th power
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 ABC 107 B Manipulation de chaînes
Résoudre ABC175 D en Python
AtCoder ABC 182 Python (A ~ D)
Simulation AtCoder ARC080 D résolue avec Ruby et Python
Résolution avec Ruby et Python AtCoder ARC 059 C Méthode du carré minimum
AtCoder ABC155 Problème D Pairs Review Note 2 NumPy et Python
Résoudre ABC163 A ~ C avec Python
Scraping avec Node, Ruby et Python
Résoudre Atcoder ABC169 A-D avec Python
Recommandation de résolution des problèmes d'AtCoder avec python (20200517-0523)
Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 A
Résoudre ABC168 A ~ C avec Python
Résolu AtCoder ABC 114 C-755 avec Python3
Résolution avec Ruby et Python AtCoder ARC067 C factorisation premier
Résoudre ABC162 A ~ C avec Python
Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 B
Résoudre ABC167 A ~ C avec Python
Résoudre ABC158 A ~ C avec Python
AtCoder ABC168 Une expression de cas résolue en Ruby et Python
AtCoder JSC2019 Qual B à résoudre par Ruby et Python
Je voulais résoudre le problème ABC164 A ~ D avec Python
ABC 157 D - Résolvez les suggestions d'amis en Python!
Je voulais résoudre ABC160 avec Python
Résoudre ABC165 A, B, D avec Python
Crypter avec Ruby (Rails) et décrypter avec Python
Scraping Web facile avec Python et Ruby
Je voulais résoudre ABC172 avec Python
AtCoder ABC 174 Python
AtCoder ABC 175 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
Résolvez AtCoder Débutant Contest 170 D - Non divisible (ABC170D) avec python (tamis Eratostenes)