Lösen mit Ruby, Perl und Java AtCoder ABC 128 C.

Einführung

Dieses Thema

AtCoder Beginner Contest 128 C - Switches Difficulty: 807

Das Thema ist diesmal etwas arithmetisch Ruby

ruby.rb


n, m = gets.split.map(&:to_i)
k = []
1.upto(m) do |i|
  s = "0" * n
  h = gets.split.map(&:to_i)
  h.shift
  h.each do |j|
    s[j - 1] = "1"
  end
  k[i] = s.to_i(2)
end
p = gets.split.map(&:to_i)
ans = 0
0.upto(2 ** n - 1) do |i|
  f = 1
  1.upto(m) do |j|
    if (i & k[j]).to_s(2).count("1") % 2 != p[j - 1]
      f = 0
      break;
    end
  end
  ans += f
end
puts ans

Wenn Sie beispielsweise 10 Schalter haben, bereiten Sie die Zeichenfolge "0000000000" vor und ersetzen Sie die gewünschte Schalterposition durch 1. => 0010011011 Vergleichen Sie die Zeichenfolge mit allen Bitkombinationen (** 2 bis zur n-ten Potenz **) und vergleichen Sie sie mit den Lichtverhältnissen.

bit.rb


k[i] = s.to_i(2)
 # =>Konvertieren Sie eine Zeichenfolge in eine Ganzzahl mit binärer Notation

if (i & k[j]).to_s(2).count("1") % 2 != p[j - 1]
 # =>Konvertiert eine Ganzzahl in eine binäre Notationszeichenfolge und zählt die Anzahl der Einsen

perl.pl


use v5.18; # strict say state

chomp (my ($n, $m) = split / /, <STDIN>);
my @k;
for my $i (1..$m) {
  my $s = '0' x $n;
  chomp (my @in = split / /, <STDIN>);
  shift @in;
  for my $j (0..$#in) {
    substr($s, $in[$j]-1, 1) = 1;
  }
  $k[$i] = $s;
}
chomp (my @p = split / /, <STDIN>);
my $ans = 0;
for my $i (0..2**$n-1) {
  my $s = sprintf "%0".$n."b", $i;
  my $f = 1;
  for my $j (1..$m) {
    $f = 0 if ((grep {$_ == 1} split('', ($s & $k[$j]))) % 2 != $p[$j-1]);
    last if $f == 0;
  }
  $ans += $f;
}
say $ans;

and.pl


$f = 0 if ((grep {$_ == 1} split('', ($s & $k[$j]))) % 2 != $p[$j-1]);

In * Ruby * verursacht die Bitoperation der Zeichenfolge einen Fehler, in * Perl * kann das Produkt so genommen werden, wie es ist. Überprüfen Sie die Anzahl der Einsen mit grep.

** Nachtrag **

java.java


import java.util.*;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.next());
        int m = Integer.parseInt(sc.next());
        int k[] = new int[m];
        for (int i = 0; i < m; i++) {
            StringBuilder s = new StringBuilder("0000000000".substring(0, n));
            int x = Integer.parseInt(sc.next());
            for (int j = 0; j < x; j++) {
                int y = Integer.parseInt(sc.next());
                s.replace(y - 1, y, "1");
            }
            k[i] = Integer.parseInt(s.toString(), 2);
        }
        int p[] = new int[m];
        for (int i = 0; i < m; i++) {
            p[i] = Integer.parseInt(sc.next());
        }
        sc.close();
        int ans = 0;
        for (int i = 0; i < Math.pow(2, n); i++) {
            int f = 1;
            for (int j = 0; j < m; j++) {
                String bin = Integer.toBinaryString(i & k[j]);
                int c = 0;
                for (int v = 0; v < bin.length(); v++) {
                    if (bin.substring(v, v + 1).equals("1")) {
                        c++;
                    }
                }
                if (c % 2 != p[j]) {
                    f = 0;
                    break;
                }
            }
            ans += f;
        }
        System.out.println(ans);
    }
}

Da es basierend auf der * Perl * -Quelle in * Java * umgeschrieben wurde, werden Bitoperationen mit Zeichenfolgen ausgeführt, aber Sie können natürlich auch mit Shift-Operationen antworten.

Ruby Perl Java
Codelänge 395 Byte 612 Byte 1424 Byte
Ausführungszeit 11 ms 19 ms 123 ms
Erinnerung 3836 KB 896 KB 24020 KB

Zusammenfassung

Referenzierte Site

Recommended Posts

Lösen mit Ruby, Perl und Java AtCoder ABC 128 C.
Lösen mit Ruby, Perl und Java AtCoder ABC 129 C (Teil 1)
Lösen mit Ruby, Perl und Java AtCoder ABC 129 C (Teil 2) Dynamische Planungsmethode
Lösen mit Ruby, Perl und Java AtCoder ABC 113 C Referenz
AtCoder ABC 136 D Suche nach Breitenpriorität Gelöst in Ruby, Perl und Java
AtCoder ABC129 D 2D-Array In Ruby und Java gelöst
AtCoder ABC 111 C Hash-Sortierung In Ruby, Perl und Java gelöst
AtCoder ARC 081 C-Hash, der in Ruby, Perl und Java gelöst werden muss
Mit Java verschlüsseln und mit C # entschlüsseln
AtCoder dwango Programmierwettbewerb B zum Lösen in Ruby, Perl und Java B.
Lösen mit Ruby AtCoder ACL Anfängerwettbewerb C Union Find (DSU)
Verknüpfen Sie Java- und C ++ - Code mit SWIG
Lösen Sie ARC104 D Multiset Mean mit Scala, Java, C ++, Ruby, Perl, Elixir
AtCoder Anfängerwettbewerb 169 A, B, C mit Rubin
Ich habe versucht, Ruby mit Ruby (und C) zu implementieren (ich habe mit Builtin gespielt)
AtCoder ABC 169 C Gleitkomma, das in Ruby passt
Versuchen Sie, Ruby und Java in Dapr zu integrieren
AtCoder ABC127 D Hash mit Ruby 2.7.1 zu lösen
atcoder ABC113 C Problem
atcoder ABC115 C Problem
ABC177 - E in Ruby lösen
Ruby C Erweiterung und flüchtig
C # und Java überschreiben Story
Kotlin Post- und Pre-Inkrement und Operatorüberladung (Vergleich mit C, Java, C ++)
Verwenden Sie Java mit MSYS und Cygwin
Verteilte Ablaufverfolgung mit OpenCensus und Java
Installieren Sie Java und Tomcat mit Ansible
Ruby mit AtCoder 6 lernen [Contest 168 Daher]
Verwenden Sie JDBC mit Java und Scala.
Hallo Welt mit Docker und C Sprache
PDF und TIFF mit Java 8 ausgeben
Lösen mit Ruby AtCoder 1. Algorithmus Praktischer Test Eine Ausnahmebehandlung
AtCoder Anfängerwettbewerb 167 C Problem (Java)
[Ruby / Refactoring] Von der iterativen Ruby-Verarbeitung wie Java und C bis zur Ruby-ähnlichen iterativen Verarbeitung
So erstellen Sie eine App mit einem Plug-In-Mechanismus [C # und Java]
Mit Rubin ● × Game und Othello (Grundlegende Bewertung)
Überwachen Sie Java-Anwendungen mit Jolokia und Hawtio
Erste Schritte mit Ruby für Java-Ingenieure
Rufen Sie die Java-Bibliothek von C mit JNI auf
Java-Kern: HotSpot-Compiler und C-Heap
Ruby mit AtCoder 7 lernen [Contest 168 Triple Dots]
Probieren wir WebSocket mit Java und Javascript aus!
[Java] Lesen und Schreiben von Dateien mit OpenCSV
Die Richtung von Java in "C ++ Design and Evolution"
Von Java nach C und von C nach Java in Android Studio
Konvertieren Sie mit Ruby von JSON nach TSV und von TSV nach JSON
Lesen und Schreiben Sie zeilenweise aus dem Puffer mit TCP-Kommunikation zwischen C und Ruby
Durchbrechen Sie gewaltsam das C-Problem "* 3 oder / 2" von [AtCoder Problem-ABC100] mit Java [Code]
Erstellen und testen Sie Java + Gradle-Anwendungen mit Wercker
Ich habe auch Web Assembly mit Nim und C ausprobiert
JSON mit Java und Jackson Teil 2 XSS-Maßnahmen
Unterschiede beim Schreiben von Java-, C # - und Javascript-Klassen
Erstellen Sie mit Docker ein Jupyter-Notizbuch und führen Sie Ruby aus
Fassen Sie die Unterschiede zwischen C # - und Java-Schrift zusammen
Bereiten Sie eine Scraping-Umgebung mit Docker und Java vor
KMS) Umschlagverschlüsselung mit OpenSL- und Java-Entschlüsselung
Verschlüsseln / Entschlüsseln mit AES256 in PHP und Java
[Java] Konvertieren und Importieren von Dateiwerten mit OpenCSV
[Review] Lesen und Schreiben von Dateien mit Java (JDK6)