Lösen mit Ruby, Perl, Java und Python AtCoder ARC 066 C Iterativer Square Hash

Einführung

Dieses Thema

AtCoder Regular Contest 066 C - Lining Up Difficulty: 927

Dieses Thema, iterative Quadratmethode und Hash Ruby Dies ist ein symmetrisches Problem. Wenn Sie es also einem Hash zuweisen, wird erwartet, dass es sich um ein Wertearray handelt, z. B. "2221222" für ungerade Namen und "22222222" für gerade Namen. In anderen Fällen kann festgestellt werden, dass keine Vereinbarung vorliegt.

Es ist auch an der Zeit, dass das zuvor veröffentlichte * Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 B * nützlich ist. Da es sich um die Anzahl der Multiplikationskombinationen von 2 handelt, kann die im obigen Beitrag erstellte iterative Quadratmethode (Funktion | Methode) unverändert verwendet werden.

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

Ich benutze es so wie es ist. 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

Deklarieren Sie "aus Sammlungen Importzähler", wenn Sie Hashes verwenden.

mod.py


MOD = 1000000007
MOD = 1_000_000_007

In meinem Ring "Python 3.8.2 (Standard, 16. April 2020, 16:12:56)" können Sie "1_000_000_007" schreiben, aber in der AtCoder-Umgebung scheint es "WA" zu sein. 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";

Wie es ist ... 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
Codelänge 438 Byte 535 Byte 504 Byte 1100 Byte
Ausführungszeit 75 ms 125 ms 76 ms 435 ms
Erinnerung 12172 KB 16096 KB 20556 KB 49896 KB

Zusammenfassung

Referenzierte Site

Recommended Posts

Lösen mit Ruby, Perl, Java und Python AtCoder ARC 066 C Iterativer Square Hash
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 098 C Kumulative Summe
Lösen mit Ruby und Python AtCoder ARC 059 C Minimum-Quadrat-Methode
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 086 C Hash-Sortierung
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 065 C-te Potenz
Lösen mit Ruby, Perl, Java und Python AtCoder CADDi 2018 C Primfaktorisierung
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 mit Ruby, Perl, Java und Python AtCoder ATC 002 B.
Lösen mit Ruby, Perl, Java und Python AtCoder diverta 2019 Programmierwettbewerb C String Manipulation
Lösen in Ruby, Python und Java AtCoder ABC141 D Priority Queue
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
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 ABC 047 C Regulärer Ausdruck
AtCoder ARC080 D Simulation mit Ruby und Python gelöst
Lösen mit Ruby und Python AtCoder ABC011 C Dynamische Planungsmethode
AtCoder ARC104 B Kumulative Summe in Ruby, Python und Java gelöst
Lösen mit Ruby und Python AtCoder ABC057 C Zerlegung des Primfaktors Bit vollständige Suche
Lösen mit Ruby und Python AtCoder Tenka1 Programmer Contest C Kumulative Summe
Lösen mit Ruby und Python AtCoder CODE FESTIVAL 2016 qual C B Priority Queue
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 ABC153 E Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ABC138 D Benachbarte Liste
Hallo Welt in verschiedenen Sprachen [Python / PHP / Java / Perl / Ruby]
AtCoder ABC168 Ein in Ruby und Python gelöster Fallausdruck
Lösen mit Ruby, Python und numpy AtCoder ABC054 B Matrixberechnung
Lösen mit Ruby, Python und networkx AtCoder ABC168 D Benachbarte Liste
Überlappende reguläre Ausdrücke in Python und Java
Unterschiede zwischen Ruby und Python im Umfang
So schreiben Sie den richtigen Shebang in Perl-, Python- und Ruby-Skripten
Implementieren Sie den FIR-Filter in Python und C.
Unterschiede zwischen Python- und Java-Syntax
Schreiben Sie die O_SYNC-Datei in C und Python
Hash in Perl ist ein Wörterbuch in Python
Lösen mit Ruby und Python AtCoder ABC172 C Kumulative Summen-Dichotomie
AtCoder Anfängerwettbewerb 170 B Problem "Crane and Turtle" Erklärung (Python3, C ++, Java)
Ich habe die Geschwindigkeit regulärer Ausdrücke in Ruby, Python und Perl (Version 2013) verglichen.
So generieren Sie eine Sequenz in Python und C ++
Ich habe eine Klasse in Python3 und Java geschrieben
AtCoder ABC110 C-String-Manipulation zum Lösen in Ruby
paiza POH ec-Kampagne (C # / Java / Python / Ruby) # paizahack_01
Trends für das Webanwendungs-Framework 2014 (PHP / Java / Ruby / Python / Perl)
C-Sprache, Java, Python-Benchmarks mit Primfaktorisierung
Unterschied zwischen Ruby und Python in Bezug auf Variablen
AtCoder Anfängerwettbewerb 176 C Problem "Schritt" Erklärung (Python3, C ++, Java)
Löse den Atcoder ABC176 (A, B, C, E) in Python
Sie wandeln in einer Spirale in einer Welt, in der sich die Wände des Kreuzes erheben (Regelmäßigkeit, Python / Ruby / C / C # / Java)
Täglicher AtCoder # 36 mit Python
AtCoder # 2 jeden Tag mit Python
Täglicher AtCoder # 32 in Python
Täglicher AtCoder # 6 in Python
Täglicher AtCoder # 18 in Python
Täglicher AtCoder # 53 in Python
Täglicher AtCoder # 33 in Python
Täglicher AtCoder # 7 in Python
AtCoder # 24 jeden Tag mit Python
Täglicher AtCoder # 37 in Python