Lösen mit Ruby und Python AtCoder ABC133 D Kumulative Summe

Einführung

Dieses Thema

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

Dieses Thema, kumulative Summe

Es ist ein Problem, simultane Gleichungen zu lösen und kann in der "lup library" von "numpy" und "scipy" gefunden werden. Wie ein Wettbewerbsprofi wird es jedoch "TLE" sein, so dass es gelöst werden kann, indem die simultanen Gleichungen wie folgt transformiert werden.

  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

Eine spezielle kumulative Summe, die je nach Index addiert oder subtrahiert wird. 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(' ')

Es ist eine Lösung, die "lup" der "Matrix" -Bibliothek verwendet, aber es ist "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(' ')

Die Lösung verwendet "LUSolve", aber es ist "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()

Es ist eine Lösung, die die linalg library von numpy verwendet, aber es ist 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()

Es ist eine Lösung, die die "Linalg-Bibliothek" von "scipy" verwendet, aber es ist "TLE".

Ruby Python
Codelänge(Byte) 234 382
Ausführungszeit(ms) 130 98
Erinnerung(KB) 14084 19132

Zusammenfassung

Referenzierte Site instance method Matrix#lup

Recommended Posts

Lösen mit Ruby und Python AtCoder ABC133 D Kumulative Summe
Lösen mit Ruby und Python AtCoder ABC084 D Kumulative Summe der Primzahlen
AtCoder ARC104 B Kumulative Summe in Ruby, Python und Java gelöst
AtCoder ABC130 D Kumulative Summen-Dichotomie, gelöst durch Ruby und Python
Löse AtCoder ABC168 mit Python (A ~ D)
Lösen mit Ruby und Python AtCoder ABC178 D Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ABC151 D Suche nach Breitenpriorität
Lösen mit Ruby und Python AtCoder ABC138 D Benachbarte Liste
Löse AtCoder ABC166 mit Python
Lösen mit Ruby, Python und networkx AtCoder ABC168 D Benachbarte Liste
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
Lösen mit Ruby und Python AtCoder ABC172 C Kumulative Summen-Dichotomie
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 047 C Regulärer Ausdruck
Löse ABC166 A ~ D mit Python
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] Löse ABC1 ~ 100 Ein Problem mit Python
Löse AtCoder 167 mit Python
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, Perl, Java und Python AtCoder ABC 065 C-te Potenz
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 ABC 107 B String-Manipulation
Löse ABC175 D in Python
AtCoder ABC 182 Python (A ~ D)
AtCoder ARC080 D Simulation mit Ruby und Python gelöst
Lösen mit Ruby und Python AtCoder ARC 059 C Minimum-Quadrat-Methode
AtCoder ABC155 Problem D Pairs Review Note 2 NumPy und Python
Löse ABC163 A ~ C mit Python
Scraping mit Node, Ruby und Python
Löse den Atcoder ABC169 A-D mit Python
Beheben von AtCoder-Problemen Empfehlung mit Python (20200517-0523)
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 A.
Löse ABC168 A ~ C mit Python
AtCoder ABC 114 C-755 mit Python3 gelöst
Lösen mit Ruby und Python AtCoder ARC067 C Primfaktorisierung
Löse ABC162 A ~ C mit Python
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 B.
Löse ABC167 A ~ C mit Python
Löse ABC158 A ~ C mit Python
AtCoder ABC168 Ein in Ruby und Python gelöster Fallausdruck
AtCoder JSC2019 Qual B Gelöst von Ruby und Python
Ich wollte das ABC164 A ~ D-Problem mit Python lösen
ABC 157 D - Lösungsvorschläge für Freunde in Python!
Ich wollte ABC160 mit Python lösen
Löse ABC165 A, B, D mit Python
Mit Ruby (Rails) verschlüsseln und mit Python entschlüsseln
Einfaches Web-Scraping mit Python und Ruby
Ich wollte ABC172 mit Python lösen
AtCoder ABC 174 Python
AtCoder ABC 175 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
Löse den AtCoder-Anfängerwettbewerb 170 D - Nicht teilbar (ABC170D) mit Python (Eratostenes-Sieb)