Tri par hachage AtCoder ABC 111 C résolu en Ruby, Perl et Java

introduction

Ce thème

AtCoder Beginner Contest 111 C - //// Difficulty: 822

Ce thème, une sorte de hachage Ruby Dupliquer des éléments, c'est un hachage, n'est-ce pas? La solution est similaire à la précédente * AtCoder ABC 113 C en Ruby, Perl et Java *.

ruby.rb


n = gets.to_i
v = gets.split.map(&:to_i)
p = Hash.new(0)
q = Hash.new(0)
n.times do |i|
  p[v[i]] += 1 if i.even?
  q[v[i]] += 1 if i.odd?
end
ps = Hash[p.sort_by{|k, v| -v}].keys
qs = Hash[q.sort_by{|k, v| -v}].keys
x, y, ans = 0, 0, n / 2
f = false
ps.size.times do |i|
  x = ps[i]
  qs.size.times do |j|
    if x != qs[j]
      y = qs[j]
      f = true
      break
    end
  end
  break if f
end
ans = n - p[x] - q[y] if f
x, y = 0, 0
f = false
qs.size.times do |i|
  x = qs[i]
  ps.size.times do |j|
    if x != ps[j]
      y = ps[j]
      f = true
      break
    end
  end
  break if f
end
ans = n - q[x] - p[y] if f && ans > n - q[x] - p[y]
puts ans

hash.rb


ps = Hash[p.sort_by{|k, v| -v}].keys

Dans ABC113C, c'était une sorte de * Perl *, mais cette fois j'ai essayé une sorte de * Ruby *. Perl

perl.pl


chomp (my $n = <STDIN>);
chomp (my @v = split / /, <STDIN>);
my (%p, %q);
for my $i (0..$n-1) {
  if ($i % 2 == 0) {
    $p{$v[$i]}++;
  } else {
    $q{$v[$i]}++;
  }
}
my @ps = sort {$p{$b}<=>$p{$a}} keys %p;
my @qs = sort {$q{$b}<=>$q{$a}} keys %q;
my ($x, $y) = (0, 0);
my $ans = $n / 2;
my $f = 0;
for my $i (0..$#ps) {
  $x = $ps[$i];
  for my $j (0..$#qs) {
    if ($x != $qs[$j]) {
      $y = $qs[$j];
      $f = 1;
      last;
    }
  }
  last if $f;
}
$ans = $n - $p{$x} - $q{$y} if $f;
($x, $y) = (0, 0);
my $f = 0;
for my $i (0..$#qs) {
  $x = $qs[$i];
  for my $j (0..$#ps) {
    if ($x != $ps[$j]) {
      $y = $ps[$j];
      $f = 1;
      last;
    }
  }
  last if $f;
}
$ans = $n - $q{$x} - $p{$y} if $f && $ans > $n - $q{$x} - $p{$y};
print "$ans\n";

hash.pl


my @ps = sort {$p{$b}<=>$p{$a}} keys %p;

Le hachage * Perl * a une image simple et rapide. Java

java.java


import java.util.*;
import java.util.stream.Collectors;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.next());
        Map<Integer, Integer> p = new HashMap<>();
        Map<Integer, Integer> q = new HashMap<>();
        for (int i = 0; i < n; i++) {
            int v = Integer.parseInt(sc.next());
            if (i % 2 == 0) {
                if (p.containsKey(v)) {
                    p.put(v, p.get(v) + 1);
                } else {
                    p.put(v, 1);
                }
            } else {
                if (q.containsKey(v)) {
                    q.put(v, q.get(v) + 1);
                } else {
                    q.put(v, 1);
                }
            }
        }
        sc.close();

        Map<Integer, Integer> ps = p.entrySet().stream()
                .sorted(Map.Entry.<Integer, Integer>comparingByValue().reversed()
                        .thenComparing(Map.Entry.comparingByKey()))
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
        Map<Integer, Integer> qs = q.entrySet().stream()
                .sorted(Map.Entry.<Integer, Integer>comparingByValue().reversed()
                        .thenComparing(Map.Entry.comparingByKey()))
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));

        List<Integer> pss = new ArrayList<>(ps.keySet());
        List<Integer> qss = new ArrayList<>(qs.keySet());
        int x = 0, y = 0, ans = n / 2;
        boolean f = false;
        for (int i = 0; i < pss.size(); i++) {
            x = pss.get(i);
            for (int j = 0; j < qss.size(); j++) {
                if (x != qss.get(j)) {
                    y = qss.get(j);
                    f = true;
                    break;
                }
            }
            if (f)
                break;

        }
        if (f)
            ans = n - p.get(x) - q.get(y);
        x = 0;
        y = 0;
        f = false;
        for (int i = 0; i < qss.size(); i++) {
            x = qss.get(i);
            for (int j = 0; j < pss.size(); j++) {
                if (x != pss.get(j)) {
                    y = pss.get(j);
                    f = true;
                    break;
                }
            }
            if (f)
                break;

        }
        if (f && ans > n - q.get(x) - p.get(y))
            ans = n - q.get(x) - p.get(y);
        System.out.println(ans);
    }
}

Le tri des hachages * Java * est très difficile à implémenter. Si vous utilisez habituellement * Java *, faites-vous un tri par classe?

Ruby Perl Java
Longueur du code 694 Byte 808 Byte 2646 Byte
Temps d'exécution 164 ms 131 ms 649 ms
Mémoire 24808 KB 28616 KB 54320 KB

Résumé

Site référencé

Recommended Posts

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
Résolution avec Ruby, Perl et Java AtCoder ABC 113 C Reference
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
Concours de programmation AtCoder dwango B à résoudre en Ruby, Perl et Java
De Java à C et de C à Java dans Android Studio
Recherche de priorité de largeur AtCoder ABC 136 D résolue en Ruby, Perl et Java
AtCoder ABC 169 C virgule flottante qui tient dans Ruby
AtCoder ABC127 D hash à résoudre avec Ruby 2.7.1
Tableau 2D AtCoder ABC129 D résolu en Ruby et Java
Différences dans la gestion des chaînes entre Java et Perl
Résolvez AtCoder Beginner Contest 151 avec Java
Résolvez AtCoder Beginner Contest 153 avec Java
Résolvez AtCoder Beginner Contest 175 avec Java
Résolvez AtCoder Beginner Contest 160 avec Java
Résolvez AtCoder Beginner Contest 152 avec Java
Résolvez AtCoder Beginner Contest 156 avec Java
AtCoder ARC 081 C hash à résoudre en Ruby, Perl et Java
Résolution avec Ruby, Perl et Java AtCoder ABC 128 C
Résolution avec Ruby, Perl et Java AtCoder ABC 129 C (Partie 1)
Recherche de priorité de largeur AtCoder ABC 136 D résolue en Ruby, Perl et Java
Résolution avec Ruby AtCoder ABC177 D Union Find
Tri par hachage AtCoder ABC 111 C résolu en Ruby, Perl et Java
Résolution avec Ruby, Perl et Java AtCoder ABC 129 C (Partie 2) Méthode de planification dynamique
AtCoder ABC127 D hash à résoudre avec Ruby 2.7.1
Tableau 2D AtCoder ABC129 D résolu en Ruby et Java
[At Coder] Résolvez le problème ABC183 D avec Ruby
[At Coder] Résolvez le problème ABC182 D avec Ruby
Résolution avec Ruby, Perl et Java AtCoder ABC 113 C Reference
Résolution avec Ruby AtCoder ABC177 D Union Find
Essayez de résoudre Project Euler en Java
Implémentation Java pour créer et résoudre des labyrinthes
Résumé des hachages et symboles dans Ruby
La direction de Java dans "C ++ Design and Evolution"
[Ruby / Refactoring] Du traitement itératif Ruby tel que Java et C au traitement itératif de type Ruby
Essayez d'intégrer Ruby et Java avec Dapr
Différences dans l'écriture des classes Java, C # et Javascript
Comment résoudre les problèmes d'expression en Java
Organiser les builds dans des combinaisons C ++ / Java et Win / Linux
AtCoder Beginner Contest 170 A, B, C jusqu'au rubis
Classes et instances Java comprises dans la figure
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment gérer les fichiers TSV et les fichiers CSV dans Ruby
Essayez de résoudre un problème FizzBuzz restreint en Java
Problème atcoder ABC113 C
De Java à Ruby !!
problème atcoder ABC115 C
Note secrète de Mathematical Girl 104e implémentée en Ruby et C
[Java] Changez la langue et les paramètres régionaux en anglais avec les options JVM
Reportez-vous à C ++ dans le module Android Studio (Java / kotlin)
Que s'est-il passé dans «Java 8 to Java 11» et comment créer un environnement
Comment appeler et utiliser l'API en Java (Spring Boot)
Raisons d'utiliser séparément Servlet et JSP dans le développement Java
Comment développer et enregistrer une application Sota en Java
ABC177-Résoudre E avec Ruby
À propos des hachages et symboles Ruby
Extension Ruby C et volatile
Reproduire l'énumération Java en C #
Histoire de remplacement C # et Java
Comment écrire un exemple d'implémentation F03 ruby et C en temps réel hors ligne
Comment obtenir et ajouter des données depuis Firebase Firestore dans Ruby
[Android] Convertissez Map en JSON à l'aide de GSON avec Kotlin et Java
Comment résoudre l'erreur inconnue apparue lors de l'utilisation de slf4j en Java
Points à retenir et concepts dans le didacticiel Ruby on Rails