AtCoder JSC2019 Qual B à résoudre par Ruby et Python

introduction

Ce thème

AtCoder JSC2019 Qual B - Kleene Inversion Difficulty: 797

Ce thème, somme de la séquence d'égalité + élément inverse Ruby Je n'ai jamais entendu parler de «chutes», mais voyons de quel genre de «chutes» ce sera par exemple «1 3 2».

K 3 2 1 total
132 1 1
132 132 4 1 5
132 132 132 7 4 1 12

Un «1 3 2» est «1», deux côte à côte «1 3 2 1 3 2» sont «4 + 1», et trois sont alignés «1 3 2 1 3 2 1 3 2» est «7 Vous pouvez voir que c'est la somme de + 4 + 1` et la séquence d'égalité. Pour la formule de la somme de la séquence d'égalité, reportez-vous à * here *.

ruby.rb


n, k = gets.split.map(&:to_i)
a = gets.split.map(&:to_i)
b = a + a
c = 0
(a.size - 1).times do |i|
  (i + 1).upto(a.size - 1) do |j|
    c += 1 if a[i] > a[j]
  end
end
d = 0
(b.size - 1).times do |i|
  (i + 1).upto(b.size - 1) do |j|
    d += 1 if b[i] > b[j]
  end
end
d -= c * 2
def modpow(n, p, mod)
  r = 1
  while p > 0
    r = r * n % mod if p & 1 == 1;
    n = n * n % mod
    p >>= 1
  end
  r
end
def modinv(n, mod)
  modpow(n, mod - 2, mod)
end
MOD = 1_000_000_007
ans = (k - 1) * d % MOD
ans += 2 * c
ans %= MOD
ans *= k
ans %= MOD
ans *= modinv(2, MOD)
ans %= MOD
puts ans

cal.rb


c = 0
(a.size - 1).times do |i|
  (i + 1).upto(a.size - 1) do |j|
    c += 1 if a[i] > a[j]
  end
end
d = 0
(b.size - 1).times do |i|
  (i + 1).upto(b.size - 1) do |j|
    d += 1 if b[i] > b[j]
  end
end
d -= c * 2

Le premier terme «c» et la tolérance «d» sont calculés ici.

wa.rb


ans = (k - 1) * d % MOD
ans += 2 * c
ans %= MOD
ans *= k
ans %= MOD
ans *= modinv(2, MOD)
ans %= MOD

C'est la partie officielle de la somme de la séquence d'égalité, mais comme il y a une division par «2», il est nécessaire de trouver l'élément inverse. Python

python.py


n, k = map(int, input().split())
a = list(map(int, input().split()))
b = a + a
c = 0
for i in range(len(a)):
    for j in range(i + 1, len(a)):
        if a[i] > a[j]:
            c += 1
d = 0
for i in range(len(b)):
    for j in range(i + 1, len(b)):
        if b[i] > b[j]:
            d += 1
d -= c * 2
def modpow(n, p, mod):
    r = 1
    while p > 0:
        if p & 1 == 1:
            r = r * n % mod
        n = n * n % mod
        p >>= 1
    return r
def modinv(n, mod):
    return modpow(n, mod - 2, mod)
MOD = 10 ** 9 + 7
ans = (k - 1) * d % MOD
ans += 2 * c
ans %= MOD
ans *= k
ans %= MOD
ans *= modinv(2, MOD)
ans %= MOD
print(ans)

Même avec PyPy3 (2.4.0), il pourrait être utilisé tel quel.

Ruby Python PyPy3
Longueur du code(Byte) 621 676 676
Temps d'exécution(ms) 948 1903 322
Mémoire(KB) 1916 3188 41692

Résumé

Site référencé

Recommended Posts

AtCoder JSC2019 Qual B à résoudre par Ruby et Python
AtCoder ARC104 B Somme cumulative résolue en Ruby, Python et Java
Résoudre avec Ruby et Python AtCoder ABC084 D Somme cumulative des nombres premiers
Résolution avec Ruby et Python AtCoder CODE FESTIVAL 2016 qual C B Priority Queue
Résolution avec Ruby et Python AtCoder ABC133 D Somme cumulée
Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 B
Résolution avec Ruby, Python et numpy AtCoder ABC054 B Calcul de la matrice
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 ABC 047 C Expression régulière
[AtCoder] Résoudre un problème de ABC101 ~ 169 avec Python
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 086 C Hash Sorting
Résolvez AtCoder 167 avec python
Comparaison de CoffeeScript avec la grammaire JavaScript, Python et Ruby
Résolution avec Ruby et Python AtCoder ARC 059 C Méthode du carré minimum
Résolvez AtCoder ABC166 avec python
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
Une collection de techniques professionnelles compétitives à résoudre avec Python
Résolution avec Ruby et Python AtCoder AISING2020 D Méthode carrée itérative
Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 A
Renvoyez les données d'image avec Flask of Python et dessinez-les dans l'élément canvas de HTML
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 et Python AtCoder ABC138 D Liste adjacente
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Je veux résoudre APG4b avec Python (seulement 4.01 et 4.04 au chapitre 4)
Résolution avec Ruby, Python et networkx AtCoder ABC168 D Liste adjacente
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 065 C-th power
Scraping avec Node, Ruby et Python
Recommandation de résolution des problèmes d'AtCoder avec python (20200517-0523)
Coexistence de Python2 et 3 avec CircleCI (1.0)
Résolution avec Ruby et Python AtCoder ABC057 C Décomposition du facteur premier Recherche complète de bits
[Explication AtCoder] Contrôlez les problèmes A, B, C d'ABC182 avec 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 ARC 098 C Somme cumulative
Résolution avec Ruby, Perl, Java et Python AtCoder CADDi 2018 C factorisation premier
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
Code Python pour former et tester avec Custom Vision of Cognitive Service
Essayez de résoudre un problème défini de mathématiques au lycée avec Python
[Explication AtCoder] Contrôle ABC184 Problèmes A, B, C avec Python!
Fractal pour faire et jouer avec Python
Je voulais résoudre ABC160 avec Python
[AtCoder] Résoudre ABC1 ~ 100 Un problème 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
[Explication AtCoder] Contrôlez les problèmes A, B, (C), D de ABC165 avec Python!
[Explication AtCoder] Contrôlez les problèmes A, B, C, D d'ABC183 avec Python!
[Explication AtCoder] Contrôlez les problèmes A, B, C, D d'ABC181 avec Python!
Grattage de la nourriture avec python et sortie en CSV
MessagePack-Try pour lier Java et Python avec RPC
Résumé de la correspondance entre les opérations de tableau ruby et python
Essayez de résoudre le diagramme homme-machine avec Python