Lösen mit Ruby und Python AtCoder AISING2020 D Iterative Square-Methode

Einführung

Dieses Thema

Dieses Thema wiederholte quadratische Methode

0 1 1 0 1 Notation ablehnen
Originalnummer $0*2^4$ $1*2^3$ $1*2^2$ $0*2^1$ $1*2^0$ 13
0-stellige Bitinversion $1*2^4$ 13+16=29
Bitumkehrung der 1. Stelle $0*2^3$ 13- 8= 5
Bitumkehrung der 2. Stelle $0*2^2$ 13- 4= 9
Bitumkehrung der 3. Stelle $1*2^1$ 13+ 2=15
Bitumkehrung der 4. Stelle $0*2^0$ 13- 1=12

Wenn der angegebene Wert "01101" ist, kann er wie in der obigen Tabelle gezeigt zerlegt werden. Darüber hinaus gilt das Folgende als Verteilungsregel $(a+b)\%m=(a\%m+b\%m)\%m$ Der gesamte numerische Wert kann mit hoher Geschwindigkeit erhalten werden, indem der numerische Wert der bitinvertierten Ziffer ein- und ausgefahren wird. Ruby

ruby.rb


n = gets.to_i
x = gets.chomp
xs = x.to_i(2)
xc = x.count('1')
def mpow(n, p, mod)
  return 0 if mod.zero?
  r = 1
  while p > 0
    r = r * n % mod if p & 1 == 1
    n = n * n % mod
    p >>= 1
  end
  r
end
def popcount(u)
  return 0 if u.zero?
  a = u % u.to_s(2).count('1')
  1 + popcount(a)
end
xsp = mpow(xs, 1, xc + 1)
xsm = mpow(xs, 1, xc - 1)
n.times do |i|
  if x[i] == '0'
    y = xsp + mpow(2, n - i - 1, xc + 1)
    y = mpow(y, 1, xc + 1)
  elsif xc == 1
    puts '0'
    next
  else
    y = xsm - mpow(2, n - i - 1, xc - 1)
    y = mpow(y, 1, xc - 1)
  end
  puts popcount(y) + 1
end

Verwenden Sie die "mpow-Methode" der zuvor veröffentlichten * Mit Ruby, Perl, Java und Python AtCoder ATC 002 B lösen * ~~ copy ~~ ..

mpow.rb


def mpow(n, p, mod)
  return 0 if mod.zero?
  r = 1
  while p > 0
    r = r * n % mod if p & 1 == 1
    n = n * n % mod
    p >>= 1
  end
  r
end

Diesmal kann der Divisor jedoch "0" sein, also entspricht er dem.

inout.rb


n.times do |i|
  if x[i] == '0'
    y = xsp + mpow(2, n - i - 1, xc + 1)
    y = mpow(y, 1, xc + 1)
  elsif xc == 1
    puts '0'
    next
  else
    y = xsm - mpow(2, n - i - 1, xc - 1)
    y = mpow(y, 1, xc - 1)
  end
  puts popcount(y) + 1
end

Hier wird der numerische Wert der bitinvertierten Ziffer ein- und ausgegeben. Auch hier ist eine Verarbeitung erforderlich, wenn der Divisor "0" ist.

popcount.rb


def popcount(u)
  return 0 if u.zero?
  a = u % u.to_s(2).count('1')
  1 + popcount(a)
end

Die zweite und die nachfolgenden "Pop Count" werden rekursiv berechnet. Wenn Sie hier eine Notiz machen, wird es etwas schneller. Python

python.py


from sys import stdin

def mpow(n, p, mod):
    if mod == 0:
        return 0
    r = 1
    while p > 0:
        if p & 1 == 1:
            r = r * n % mod
        n = n * n % mod
        p >>= 1
    return r
def popcount(u):
    if u == 0:
        return 0
    a = u % bin(u).count('1')
    return 1 + popcount(a)
def main():
    input = stdin.readline
    n = int(input())
    x = '0b' + input()
    xs = int(x, 0)
    xc = x.count('1')
    xsp = mpow(xs, 1, xc + 1)
    xsm = mpow(xs, 1, xc - 1)
    for i in range(2, n + 2):
        if x[i] == '0':
            y = xsp + mpow(2, n - i + 1, xc + 1)
            y = mpow(y, 1, xc + 1)
        elif xc == 1:
            print(0)
            continue
        else:
            y = xsm - mpow(2, n - i + 1, xc - 1)
            y = mpow(y, 1, xc - 1)
        print(popcount(y) + 1)
main()
Ruby Python
Codelänge(Byte) 629 872
Ausführungszeit(ms) 625 1048
Erinnerung(KB) 15392 9636

Zusammenfassung

Referenzierte Site

Recommended Posts

Lösen mit Ruby und Python AtCoder AISING2020 D Iterative Square-Methode
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ösen mit Ruby, Python und networkx AtCoder ABC168 D Benachbarte Liste
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, Perl, Java und Python AtCoder ARC 066 C Iterativer Square Hash
Lösen mit Ruby und Python AtCoder ABC133 D Kumulative Summe
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 A.
Lösen mit Ruby und Python AtCoder ABC011 C Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ABC153 E Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ARC067 C Primfaktorisierung
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 B.
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, Perl, Java und Python AtCoder ABC 107 B String-Manipulation
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
AtCoder ARC080 D Simulation mit Ruby und Python gelöst
Lösen mit Ruby und Python AtCoder ABC084 D Kumulative Summe der Primzahlen
Scraping mit Node, Ruby und Python
Lösen mit Ruby, Perl, Java und Python AtCoder diverta 2019 Programmierwettbewerb C String Manipulation
AtCoder ARC104 B Kumulative Summe in Ruby, Python und Java gelöst
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
AtCoder ABC130 D Kumulative Summen-Dichotomie, gelöst durch Ruby und Python
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 047 C Regulärer Ausdruck
Lösen des Lorenz 96-Modells mit Julia und Python
AtCoder ABC110 C-String-Manipulation zum Lösen in Ruby
Löse AtCoder 167 mit Python
Ruby, Python und Map
Python und Ruby teilen sich
Probieren Sie die DB-Operation mit Python aus und visualisieren Sie sie mit d3
Vergleich von CoffeeScript mit JavaScript-, Python- und Ruby-Grammatik
Versionsverwaltung von Node, Ruby und Python mit anyenv
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
AtCoder ABC155 Problem D Pairs Review Note 2 NumPy und Python
Löse AtCoder ABC166 mit Python
Hellblau mit AtCoder @Python
Python und Hardware-Verwenden von RS232C mit Python-
Python auf Ruby und wütend Ruby auf Python
Mathematik mit Python lösen (unvollständig)
Zundokokiyoshi mit Python / Rubin / Lua
Nampre mit Python lösen (Teil 2)
Ruby- und Python-Syntax ~ branch ~
AtCoder ABC 182 Python (A ~ D)
Python mit Pyenv und Venv
AtCoder ABC168 Ein in Ruby und Python gelöster Fallausdruck
So melden Sie sich mit Python bei AtCoder an und senden automatisch
Funktioniert mit Python und R.
AtCoder JSC2019 Qual B Gelöst von Ruby und Python
Ich habe die Geschwindigkeit von Hash mit Topaz, Ruby und Python verglichen
Erstellen Sie mit Python und GAS Termine für AtCoder-Wettbewerbe in Google Kalender
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB