AtCoder ABC 111 C Hash-Sortierung In Ruby, Perl und Java gelöst

Einführung

Dieses Thema

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

Dieses Thema, eine Art Hash Ruby Doppelte Elemente, es ist ein Hash, nicht wahr? Die Lösung ähnelt der vorherigen * AtCoder ABC 113 C in Ruby, Perl und 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

In ABC113C war es eine * Perl * -ähnliche Sorte, aber diesmal habe ich eine * Ruby * -ähnliche Sorte ausprobiert. 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;

Der * Perl * -Hash hat ein einfaches und schnelles Bild. 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);
    }
}

Das Sortieren von * Java * -Hashes ist sehr schwierig zu implementieren. Wenn Sie normalerweise * Java * machen, sortieren Sie nach Klasse?

Ruby Perl Java
Codelänge 694 Byte 808 Byte 2646 Byte
Ausführungszeit 164 ms 131 ms 649 ms
Erinnerung 24808 KB 28616 KB 54320 KB

Zusammenfassung

Referenzierte Site

Recommended Posts

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
Lösen mit Ruby, Perl und Java AtCoder ABC 113 C Referenz
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
AtCoder dwango Programmierwettbewerb B zum Lösen in Ruby, Perl und Java B.
Von Java nach C und von C nach Java in Android Studio
AtCoder ABC 136 D Suche nach Breitenpriorität Gelöst in Ruby, Perl und Java
AtCoder ABC 169 C Gleitkomma, das in Ruby passt
AtCoder ABC127 D Hash mit Ruby 2.7.1 zu lösen
AtCoder ABC129 D 2D-Array In Ruby und Java gelöst
Unterschiede im Umgang mit Zeichenfolgen zwischen Java und Perl
Löse den AtCoder-Anfängerwettbewerb 151 mit Java
Löse den AtCoder-Anfängerwettbewerb 153 mit Java
Löse den AtCoder-Anfängerwettbewerb 175 mit Java
Löse den AtCoder-Anfängerwettbewerb 160 mit Java
Löse den AtCoder-Anfängerwettbewerb 152 mit Java
Löse den AtCoder-Anfängerwettbewerb 156 mit Java
AtCoder ARC 081 C-Hash, der in Ruby, Perl und Java gelöst werden muss
Lösen mit Ruby, Perl und Java AtCoder ABC 128 C.
Lösen mit Ruby, Perl und Java AtCoder ABC 129 C (Teil 1)
AtCoder ABC 136 D Suche nach Breitenpriorität Gelöst in Ruby, Perl und Java
Lösen mit Ruby AtCoder ABC177 D Union Find
AtCoder ABC 111 C Hash-Sortierung In Ruby, Perl und Java gelöst
Lösen mit Ruby, Perl und Java AtCoder ABC 129 C (Teil 2) Dynamische Planungsmethode
AtCoder ABC127 D Hash mit Ruby 2.7.1 zu lösen
AtCoder ABC129 D 2D-Array In Ruby und Java gelöst
[Bei Coder] Lösen Sie das ABC183 D-Problem mit Ruby
[Bei Coder] Lösen Sie das ABC182 D-Problem mit Ruby
Lösen mit Ruby, Perl und Java AtCoder ABC 113 C Referenz
Lösen mit Ruby AtCoder ABC177 D Union Find
Versuchen Sie, Project Euler in Java zu lösen
Java-Implementierung zum Erstellen und Lösen von Labyrinthen
Zusammenfassung der Hashes und Symbole in Ruby
Die Richtung von Java in "C ++ Design and Evolution"
[Ruby / Refactoring] Von der iterativen Ruby-Verarbeitung wie Java und C bis zur Ruby-ähnlichen iterativen Verarbeitung
Versuchen Sie, Ruby und Java in Dapr zu integrieren
Unterschiede beim Schreiben von Java-, C # - und Javascript-Klassen
So lösen Sie Ausdrucksprobleme in Java
Organisieren Sie Builds in C ++ / Java- und Win / Linux-Kombinationen
AtCoder Anfängerwettbewerb 170 A, B, C bis Rubin
In der Abbildung verstandene Java-Klassen und -Instanzen
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Umgang mit TSV-Dateien und CSV-Dateien in Ruby
Versuchen Sie, ein eingeschränktes FizzBuzz-Problem in Java zu lösen
atcoder ABC113 C Problem
Von Java zu Ruby !!
atcoder ABC115 C Problem
Secret Note 104 von Mathematical Girl, implementiert in Ruby und C.
[Java] Ändern Sie Sprache und Gebietsschema mit JVM-Optionen in Englisch
Siehe C ++ im Android Studio-Modul (Java / Kotlin)
Was ist in "Java 8 bis Java 11" passiert und wie wird eine Umgebung erstellt?
Aufrufen und Verwenden der API in Java (Spring Boot)
Gründe, Servlet und JSP in der Java-Entwicklung getrennt zu verwenden
So entwickeln und registrieren Sie eine Sota-App in Java
ABC177 - E in Ruby lösen
Über Ruby-Hashes und -Symbole
Ruby C Erweiterung und flüchtig
Reproduzieren Sie die Java-Enumeration in C #
C # und Java überschreiben Story
Offline-Echtzeit zum Schreiben eines F03-Ruby- und C-Implementierungsbeispiels
Abrufen und Hinzufügen von Daten aus dem Firebase Firestore in Ruby
[Android] Konvertieren Sie Map in JSON mit GSON mit Kotlin und Java
So beheben Sie den unbekannten Fehler, der bei der Verwendung von slf4j in Java aufgetreten ist
Dinge, an die Sie sich erinnern sollten, und Konzepte im Ruby on Rails-Tutorial