Lösen mit Ruby, Python und numpy AtCoder ABC054 B Matrixberechnung

Einführung

Dieses Thema

AtCoder Beginner Contest B - Template Matching Difficulty: 828

Dieses Thema, Matrixberechnung

Es ist ein zweidimensionales Array, aber die Verwendung einer Matrizenbibliothek kann Operationen einfacher machen. Ruby

ruby.rb


require 'matrix'

class Matrix
  # v2.Kann nicht in 3 zugewiesen werden
  def []=(i, j, x)
    @rows[i][j]=x
  end
end

n, m = gets.split.map(&:to_i)
rows = Array.new(n + m){gets.chomp.chars.map{|c| (c == '#') ? 1 : 0}}
a = Matrix.rows(rows.shift(n))
b = Matrix.rows(rows)
(n - m + 1).times do |i|
  (n - m + 1).times do |j|
    if a.minor(i, m, j, m) == b
      puts "Yes"
      exit
    end
  end
end
puts "No"

matrix.rb


require 'matrix'

class Matrix
  # v2.Kann nicht in 3 zugewiesen werden
  def []=(i, j, x)
    @rows[i][j]=x
  end
end

Rufen Sie die Matrixbibliothek mit "require'matrix" auf. In der lokalen Umgebung "v2.7.1" kann es den Elementen der Matrix zugewiesen werden, in der AtCoder-Umgebung "v2.3.3" kann es jedoch nicht zugewiesen werden, sodass eine Methode hinzugefügt wird. Das Interessante an ** Ruby ** ist, dass Sie dies auch für Standardbibliotheken tun können.

minor.rb


    if a.minor(i, m, j, m) == b

Die Submatrix wird von "minor" erfasst und die Matrix wird verglichen.

error.rb


(n - m).times do |i|
  (n - m).times do |j|

(n - m + 1).times do |i|
  (n - m + 1).times do |j|

Im Fall einer ~~ 1 x 1 Matrix läuft der Matrixvergleich nicht gut, so dass die entsprechende Verarbeitung enthalten ist. ~~ (n - m) war falsch und (n - m + 1) war richtig.

** Nachtrag ** Die zweidimensionale Array-Version finden Sie im Kommentarbereich. Python

import numpy

n, m = map(int, input().split())
a = numpy.zeros([n, n], dtype=int)
b = numpy.zeros([m, m], dtype=int)
for i in range(n):
    s = input()
    for j in range(n):
        if s[j] == '#':
            a[i, j] = 1
for i in range(m):
    s = input()
    for j in range(m):
        if s[j] == '#':
            b[i, j] = 1
for i in range(n - m + 1):
    for j in range(n - m + 1):
        if numpy.all(a[i: i + m, j: j + m] == b):
            print("Yes")
            exit()
print("No")

all.py


        if numpy.all(a[i: i + m, j: j + m] == b):

Der Vergleich der Numpy-Matrix gibt beispielsweise "[[True, True], [True, True]]" zurück. Daher verwenden wir die Funktion "all", um zu überprüfen, ob alle "True" sind.

Ruby (Matrix) Ruby (Array) Python (numpy)
Codelänge(Byte) 420 288 534
Ausführungszeit(ms) 22 10 166
Erinnerung(KB) 3196 1788 12512

Zusammenfassung

Recommended Posts

Lösen mit Ruby, Python und numpy AtCoder ABC054 B Matrixberechnung
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 107 B String-Manipulation
Lösen mit Ruby und Python AtCoder ABC178 D Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ABC011 C Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ABC138 D Benachbarte Liste
Lösen mit Ruby, Python und networkx AtCoder ABC168 D Benachbarte Liste
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
AtCoder ABC 165 D Bodenfunktion in Ruby, Perl, Java und Python gelöst
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 131 D Sortieren von Arrays
Lösen mit Ruby und Python AtCoder CODE FESTIVAL 2016 qual C B Priority Queue
Lösen mit Ruby und Python AtCoder ARC 059 C Minimum-Quadrat-Methode
Lösen mit Ruby und Python AtCoder ABC133 D Kumulative Summe
Lösen mit Ruby und Python AtCoder AISING2020 D Iterative Square-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 in Ruby, Python und Java AtCoder ABC141 D Priority Queue
AtCoder ARC104 B Kumulative Summe in Ruby, Python und Java gelöst
AtCoder ABC110 C-String-Manipulation zum Lösen in Ruby
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 ARC 098 C Kumulative Summe
Lösen mit Ruby, Perl, Java und Python AtCoder CADDi 2018 C Primfaktorisierung
Lösen mit Ruby und Python AtCoder Tenka1 Programmer Contest C Kumulative Summe
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 047 C Regulärer Ausdruck
Löse AtCoder ABC166 mit Python
Versuchen Sie die Matrixoperation mit NumPy
Lösen mit Ruby und Python AtCoder ABC084 D Kumulative Summe der Primzahlen
Lösen mit Ruby, Perl, Java und Python AtCoder diverta 2019 Programmierwettbewerb C String Manipulation
AtCoder ABC155 Problem D Pairs Review Note 2 NumPy und Python
[AtCoder Erklärung] Kontrollieren Sie ABC180 A, B, C Probleme mit Python!
[AtCoder Erklärung] Kontrollieren Sie ABC158 A, B, C Probleme mit Python!
AtCoder ABC168 Ein in Ruby und Python gelöster Fallausdruck
[AtCoder Erklärung] Kontrollieren Sie ABC164 A, B, C Probleme mit Python!
[AtCoder Erklärung] Kontrollieren Sie ABC168 A, B, C Probleme mit Python!
Scraping mit Node, Ruby und Python
AtCoder ABC 114 C-755 mit Python3 gelöst
AtCoder JSC2019 Qual B Gelöst von Ruby und Python
[AtCoder] Löse ABC1 ~ 100 Ein Problem mit Python
Löse AtCoder ABC168 mit Python (A ~ D)
Mit Ruby (Rails) verschlüsseln und mit Python entschlüsseln
Einfaches Web-Scraping mit Python und Ruby
[Erklärung zum AtCoder] Kontrollieren Sie die A-, B- und C-Probleme von ABC182 mit Python!
AtCoder ABC130 D Kumulative Summen-Dichotomie, gelöst durch Ruby und Python
Lösen mit Ruby und Python AtCoder ABC172 C Kumulative Summen-Dichotomie
[AtCoder Erklärung] Kontrollieren Sie ABC184 A, B, C Probleme mit Python!
AtCoder ABC 174 Python
[Python] Matrixoperation
AtCoder ABC 175 Python
[AtCoder] Lösen Sie ein Problem von ABC101 ~ 169 mit Python
Lösen des Lorenz 96-Modells mit Julia und Python
Fordern Sie AtCoder (ABC) 164 mit Python heraus! A ~ C Problem
[AtCoder-Erklärung] Kontrollieren Sie die A-, B-, C- und D-Probleme von ABC183 mit Python!
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 066 C Iterativer Square Hash