Résolution avec Ruby et Python AtCoder AISING2020 D Méthode carrée itérative

introduction

Ce thème

Ce thème, méthode carrée répétée

0 1 1 0 1 Notation de refus
Numéro d'origine $0*2^4$ $1*2^3$ $1*2^2$ $0*2^1$ $1*2^0$ 13
Inversion du bit 0ème chiffre $1*2^4$ 13+16=29
Inversion de bits du 1er chiffre $0*2^3$ 13- 8= 5
Inversion de bits du 2e chiffre $0*2^2$ 13- 4= 9
Inversion de bits du 3e chiffre $1*2^1$ 13+ 2=15
Inversion de bits du 4e chiffre $0*2^0$ 13- 1=12

Si la valeur donnée est «01101», elle peut être décomposée comme indiqué dans le tableau ci-dessus. En outre, ce qui suit vaut comme règle de distribution, $(a+b)\%m=(a\%m+b\%m)\%m$ La valeur entière peut être obtenue à grande vitesse en insérant et en supprimant la valeur de chiffre à bits inversés. 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

Utilisez la mpow method de la précédente * Résoudre avec Ruby, Perl, Java et Python AtCoder ATC 002 B * ~~ copier ~~ ..

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

Cependant, cette fois, le diviseur peut être «0», donc cela correspond à cela.

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

Ici, la valeur du chiffre à bits inversés est entrée et sortie. Là encore, un traitement est nécessaire lorsque le diviseur est «0».

popcount.rb


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

Le deuxième «pop count» et les suivants sont calculés récursivement. Si vous faites une note ici, ce sera un peu plus rapide. 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
Longueur du code(Byte) 629 872
Temps d'exécution(ms) 625 1048
Mémoire(KB) 15392 9636

Résumé

Site référencé

Recommended Posts

Résolution avec Ruby et Python AtCoder AISING2020 D Méthode carrée itérative
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ésolution avec Ruby, Python et networkx AtCoder ABC168 D Liste adjacente
AtCoder ABC 165 D Floor Function résolue en Ruby, Perl, Java et Python
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 131 D Tri des tableaux
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 066 C Hash carré itératif
Résolution avec Ruby et Python AtCoder ABC133 D Somme cumulée
Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 A
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
Résolution avec Ruby et Python AtCoder ARC067 C factorisation premier
Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 B
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, Perl, Java et Python AtCoder ABC 107 B Manipulation de chaînes
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 ARC 098 C Somme cumulative
Résolution avec Ruby, Perl, Java et Python AtCoder CADDi 2018 C factorisation premier
Résolution avec Ruby et Python AtCoder Tenka1 Programmer Contest C Somme cumulative
Simulation AtCoder ARC080 D résolue avec Ruby et Python
Résoudre avec Ruby et Python AtCoder ABC084 D Somme cumulative des nombres premiers
Scraping avec Node, Ruby et Python
Résolution avec Ruby, Perl, Java et Python AtCoder Diverta 2019 Concours de programmation Manipulation de chaînes C
AtCoder ARC104 B Somme cumulative résolue en Ruby, Python et Java
Résoudre AtCoder ABC168 avec python (A ~ D)
Crypter avec Ruby (Rails) et décrypter avec Python
Scraping Web facile avec Python et Ruby
AtCoder ABC130 D Dichotomie de la somme cumulée résolue par Ruby et Python
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 047 C Expression régulière
Résolution du modèle Lorenz 96 avec Julia et Python
Manipulation de chaîne C AtCoder ABC110 à résoudre dans Ruby
Résolvez AtCoder 167 avec python
Ruby, Python et carte
Python et Ruby se séparent
Essayez le fonctionnement de la base de données avec Python et visualisez avec d3
Comparaison de CoffeeScript avec la grammaire JavaScript, Python et Ruby
Gestion des versions de Node, Ruby et Python avec anyenv
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
AtCoder ABC155 Problème D Pairs Review Note 2 NumPy et Python
Résolvez AtCoder ABC166 avec python
Bleu clair avec AtCoder @Python
Python et matériel - Utilisation de RS232C avec Python -
Python sur Ruby et Ruby en colère sur Python
Résoudre les mathématiques avec Python (incomplet)
Zundokokiyoshi avec python / rubis / Lua
Résolution de Nampre avec Python (partie 2)
Syntaxe Ruby et Python ~ branch ~
AtCoder ABC 182 Python (A ~ D)
python avec pyenv et venv
AtCoder ABC168 Une expression de cas résolue en Ruby et Python
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Fonctionne avec Python et R
AtCoder JSC2019 Qual B à résoudre par Ruby et Python
J'ai comparé la vitesse de Hash avec Topaz, Ruby et Python
Créez des rendez-vous pour le concours AtCoder sur Google Agenda avec Python et GAS
Communiquez avec FX-5204PS avec Python et PyUSB