Résolution avec Ruby, Perl et Java AtCoder ABC 128 C

introduction

Ce thème

AtCoder Beginner Contest 128 C - Switches Difficulty: 807

Le thème cette fois est un peu arithmétique 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

Par exemple, si vous avez 10 commutateurs, préparez la chaîne «0000000000» et remplacez l'emplacement du commutateur souhaité par 1. => 0010011011 Comparez la chaîne avec toutes les combinaisons de bits (** 2 à la nième puissance **) et comparez avec les conditions d'éclairage.

bit.rb


k[i] = s.to_i(2)
 # =>Convertir une chaîne en un entier de notation binaire

if (i & k[j]).to_s(2).count("1") % 2 != p[j - 1]
 # =>Convertit un entier en chaîne de notation binaire et compte le nombre de 1

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]);

Dans * Ruby *, l'opération sur les bits de la chaîne de caractères provoque une erreur, mais dans * Perl *, le produit peut être calculé tel quel. Vérifiez le nombre de 1 avec grep.

** Addenda **

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);
    }
}

Comme il a été réécrit en * Java * basé sur la source * Perl *, les opérations sur les bits sont effectuées à l'aide de chaînes de caractères, mais bien sûr, vous pouvez également répondre en utilisant des opérations de décalage.

Ruby Perl Java
Longueur du code 395 Byte 612 Byte 1424 Byte
Temps d'exécution 11 ms 19 ms 123 ms
Mémoire 3836 KB 896 KB 24020 KB

Résumé

Site référencé

Recommended Posts

Résolution avec Ruby, Perl et Java AtCoder ABC 128 C
Résolution avec Ruby, Perl et Java AtCoder ABC 129 C (Partie 1)
Résolution avec Ruby, Perl et Java AtCoder ABC 129 C (Partie 2) Méthode de planification dynamique
Résolution avec Ruby, Perl et Java AtCoder ABC 113 C Reference
Recherche de priorité de largeur AtCoder ABC 136 D résolue en Ruby, Perl et Java
Tableau 2D AtCoder ABC129 D résolu en Ruby et Java
Tri par hachage AtCoder ABC 111 C résolu en Ruby, Perl et Java
AtCoder ARC 081 C hash à résoudre en Ruby, Perl et Java
Crypter avec Java et décrypter avec C #
Concours de programmation AtCoder dwango B à résoudre en Ruby, Perl et Java
Résolution avec Ruby AtCoder ACL Débutant Contest C Union Find (DSU)
Lier le code Java et C ++ avec SWIG
Résoudre la moyenne multiset ARC104 D avec Scala, Java, C ++, Ruby, Perl, Elixir
AtCoder Beginner Contest 169 A, B, C avec rubis
J'ai essayé d'implémenter Ruby avec Ruby (et C) (j'ai joué avec intégré)
AtCoder ABC 169 C virgule flottante qui tient dans Ruby
Essayez d'intégrer Ruby et Java avec Dapr
AtCoder ABC127 D hash à résoudre avec Ruby 2.7.1
Problème atcoder ABC113 C
problème atcoder ABC115 C
ABC177-Résoudre E avec Ruby
Extension Ruby C et volatile
Histoire de remplacement C # et Java
Kotlin post- et pré-incrémentation et surcharge des opérateurs (comparaison avec C, Java, C ++)
Utiliser java avec MSYS et Cygwin
Traçage distribué avec OpenCensus et Java
Installez Java et Tomcat avec Ansible
Apprendre Ruby avec AtCoder 6 [Concours 168 Donc]
Utilisez JDBC avec Java et Scala.
Hello World avec Docker et langage C
Sortie PDF et TIFF avec Java 8
Résolution avec Ruby AtCoder 1er test pratique de l'algorithme Une gestion des exceptions
AtCoder Beginner Contest 167 Problème C (Java)
[Ruby / Refactoring] Du traitement itératif Ruby tel que Java et C au traitement itératif de type Ruby
Comment créer une application avec un mécanisme de plug-in [C # et Java]
Avec ruby ● × Game et Othello (examen de base)
Surveillez les applications Java avec jolokia et hawtio
Premiers pas avec Ruby pour les ingénieurs Java
Appeler la bibliothèque Java à partir de C avec JNI
noyau java: compilateur HotSpot et tas C
Apprendre Ruby avec AtCoder 7 [Contest 168 Triple Dots]
Essayons WebSocket avec Java et javascript!
[Java] Lecture et écriture de fichiers avec OpenCSV
La direction de Java dans "C ++ Design and Evolution"
De Java à C et de C à Java dans Android Studio
Conversion de JSON en TSV et TSV en JSON avec Ruby
Lecture et écriture ligne par ligne à partir du tampon avec communication TCP entre C et Ruby
Briser de force le problème C "* 3 ou / 2" de [AtCoder Problem-ABC100] avec Java [Code]
Créez et testez des applications Java + Gradle avec Wercker
J'ai aussi essayé Web Assembly avec Nim et C
JSON avec Java et Jackson Part 2 XSS mesures
Différences dans l'écriture des classes Java, C # et Javascript
Créez un notebook Jupyter avec Docker et exécutez ruby
Résumer les différences entre l'écriture C # et Java
Préparer un environnement de scraping avec Docker et Java
KMS) Chiffrement d'enveloppe avec décryptage openssl et java
Crypter / décrypter avec AES256 en PHP et Java
[Java] Convertir et importer des valeurs de fichier avec OpenCSV
[Review] Lecture et écriture de fichiers avec java (JDK6)