Résolution avec Ruby, Perl, Java et Python AtCoder ARC 066 C Hash carré itératif

introduction

Ce thème

AtCoder Regular Contest 066 C - Lining Up Difficulty: 927

Ce thème, méthode carrée itérative et hachage Ruby C'est un problème symétrique, donc si vous l'assignez à un hachage, il devrait s'agir d'un tableau de valeurs tel que «2221222» pour les noms impairs et «22222222» pour les noms pairs. Dans d'autres cas, il peut être déterminé qu'il n'y a pas d'arrangement.

De plus, le moment est venu pour que le * [Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 B] publié précédemment (https://qiita.com/superrino130/items/adbb485637e45a024fa1) * soit utile. Puisqu'il s'agit du nombre de combinaisons de multiplication de 2, la méthode du carré itératif (fonction | méthode) créée dans l'article ci-dessus peut être utilisée telle quelle.

ruby.rb


n = gets.to_i
a = gets.split.map(&:to_i)
h = Hash.new(0)
a.each do |x|
  h[x] += 1
end
f = true
h.each do |k, v|
  if n.odd? && k == 0
    if v != 1
      f = false
      break
    end
  elsif v != 2
    f = false
    break
  end
end
MOD = 1_000_000_007
def mpow(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
puts (f ? mpow(2, n / 2, MOD) : 0)

mpow.rb


def mpow(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

Je l'utilise tel quel. Python

python.py


from collections import Counter

n = int(input())
a = list(map(int, input().split()))
h = Counter()
for x in a:
    h[x] += 1
f = True
for k, v in h.most_common():
    if n % 2 == 1 and k == 0:
        if v != 1:
            f = False
            break
    elif v != 2:
        f = False
        break
MOD = 1000000007
def mpow(n, p, mod):
    r = 1
    while p > 0:
        if p & 1 == 1:
            r = r * n % mod
        n = n * n % mod
        p >>= 1
    return r
print(mpow(2, n // 2, MOD) if f else 0)

hash.py


from collections import Counter

Déclarez from collections import Counter lorsque vous utilisez des hachages.

mod.py


MOD = 1000000007
MOD = 1_000_000_007

Dans mon anneau Python 3.8.2 (par défaut, 16 avril 2020, 16:12:56), il peut être écrit 1_000_000_007, mais il semble être WA dans l'environnement AtCoder. Perl

perl.pl


chomp (my $n = <STDIN>);
chomp (my @a = split / /, <STDIN>);
my %h;
$h{$_}++ for @a;
my $f = 1;
for my $k (keys %h) {
  if ($n % 2 == 1 && $k == 0) {
    if ($h{$k} != 1) {
      $f = 0;
      last;
    }
  } elsif ($h{$k} != 2) {
    $f = 0;
    last;
  }
}
my $MOD = 1_000_000_007;
sub mpow {
  my ($n, $p) = @_;
  my $r = 1;
  while ($p > 0) {
    $r = $r * $n % $MOD if $p & 1;
    $n = $n * $n % $MOD;
    $p >>= 1;
  }
  $r;
}
print ($f ? mpow(2, int($n / 2)) : 0), "\n";

Tel quel ... Java

java.java


import java.math.BigInteger;
import java.util.*;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.next());
        HashMap<Integer, Integer> h = new HashMap<>();
        for (int i = 0; i < n; i++) {
            int a = Integer.parseInt(sc.next());
            if (h.containsKey(a)) {
                h.put(a, h.get(a) + 1);
            } else {
                h.put(a, 1);
            }
        }
        sc.close();
        boolean f = true;
        for (int k : h.keySet()) {
            if (n % 2 == 1 && k == 0) {
                if (h.get(k) != 1) {
                    f = false;
                    break;
                }
            } else if (h.get(k) != 2) {
                f = false;
                break;
            }
        }
        BigInteger bn = new BigInteger("2");
        BigInteger bm = new BigInteger("1000000007");
        BigInteger bp = new BigInteger(Integer.toString(n / 2));
        System.out.println((f ? bn.modPow(bp, bm) : 0));
    }
}
Ruby Python Perl Java
Longueur du code 438 Byte 535 Byte 504 Byte 1100 Byte
Temps d'exécution 75 ms 125 ms 76 ms 435 ms
Mémoire 12172 KB 16096 KB 20556 KB 49896 KB

Résumé

Site référencé

Recommended Posts

Résolution avec Ruby, Perl, Java et Python AtCoder ARC 066 C Hash carré itératif
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 098 C Somme cumulative
Résolution avec Ruby et Python AtCoder ARC 059 C Méthode du carré minimum
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 086 C Hash Sorting
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 065 C-th power
Résolution avec Ruby, Perl, Java et Python AtCoder CADDi 2018 C factorisation premier
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
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 avec Ruby, Perl, Java et Python AtCoder Diverta 2019 Concours de programmation Manipulation de chaînes C
Résolution en Ruby, Python et Java AtCoder ABC141 D Priority Queue
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
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 ABC 047 C Expression régulière
Simulation AtCoder ARC080 D résolue avec Ruby et Python
Résolution avec Ruby et Python AtCoder ABC011 C Méthode de planification dynamique
AtCoder ARC104 B Somme cumulative résolue en Ruby, Python et Java
Résolution avec Ruby et Python AtCoder ABC057 C Décomposition du facteur premier Recherche complète de bits
Résolution avec Ruby et Python AtCoder Tenka1 Programmer Contest C Somme cumulative
Résolution avec Ruby et Python AtCoder CODE FESTIVAL 2016 qual C B Priority Queue
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 ABC153 E Méthode de planification dynamique
Résolution avec Ruby et Python AtCoder ABC138 D Liste adjacente
Hello World dans divers langages [Python / PHP / Java / Perl / Ruby]
AtCoder ABC168 Une expression de cas résolue en Ruby et Python
Résolution avec Ruby, Python et numpy AtCoder ABC054 B Calcul de la matrice
Résolution avec Ruby, Python et networkx AtCoder ABC168 D Liste adjacente
Chevauchement d'expressions régulières en Python et Java
Différences entre Ruby et Python dans la portée
Comment écrire le bon shebang dans les scripts Perl, Python et Ruby
Implémenter le filtre FIR en langage Python et C
Différences entre la syntaxe Python et Java
Ecrire le fichier O_SYNC en C et Python
Hash en Perl est un dictionnaire en Python
Résolution avec Ruby et Python AtCoder ABC172 C Dichotomie de somme cumulée
AtCoder Beginner Contest 170 B Problème Explication "Crane and Turtle" (Python3, C ++, Java)
J'ai comparé la vitesse des expressions régulières en Ruby, Python et Perl (version 2013)
Comment générer une séquence en Python et C ++
J'ai écrit une classe en Python3 et Java
Manipulation de chaîne C AtCoder ABC110 à résoudre dans Ruby
paiza POH ec-campagne (C # / Java / Python / Ruby) # paizahack_01
Tendances 2014 du cadre d'application Web (PHP / Java / Ruby / Python / Perl)
Benchmarks langage C, Java, Python avec factorisation prime
Différence entre Ruby et Python en termes de variables
AtCoder Beginner Contest 176 Explication de l '«étape» du problème C (Python3, C ++, Java)
Résoudre Atcoder ABC176 (A, B, C, E) en Python
Vous marchez en spirale dans un monde où les murs de la croix s'élèvent (régularité, Python / Ruby / C / C # / Java)
AtCoder # 36 quotidien avec Python
AtCoder # 2 tous les jours avec Python
Daily AtCoder # 32 en Python
Daily AtCoder # 6 en Python
Daily AtCoder # 18 en Python
Daily AtCoder # 53 en Python
Daily AtCoder # 33 en Python
AtCoder # 7 tous les jours avec Python
AtCoder # 24 tous les jours avec Python
Daily AtCoder # 37 en Python