Lösen mit Ruby, Perl und Java AtCoder ABC 113 C Referenz

Einführung

Dieses Thema

AtCoder Beginner Contest 113 C - ID Difficulty: 877

Dieses Thema, Referenz Ruby Es ist ein Problem, das * AtCoder Judge System Update Test Contest 202004 B * vor * etwas schwieriger gemacht hat.

ruby.rb


n, m = gets.split.map(&:to_i)
p = []
m.times do |i|
  y = gets.split.map(&:to_i)
  p[i] = [i, y, ""]
end
p.sort! {|a, b| (a[1][0]<=>b[1][0]).nonzero? || (a[1][1]<=>b[1][1])}
pref = 0
cnt = 1
m.times do |i|
  if pref == p[i][1][0]
    cnt += 1
  else
    cnt = 1
    pref = p[i][1][0]
  end
  p[i][2] = p[i][1][0].to_s.rjust(6, "0").concat(cnt.to_s.rjust(6, "0"))
end
p.sort! {|a, b| a[0]<=>b[0]}
m.times do |i|
  puts p[i][2]
end

array.rb


  p[i] = [i, y, ""]
  # => [[0, [1, 32], ""], [1, [2, 63], ""], [2, [1, 12], ""]]
  p.sort! {|a, b| (a[1][0]<=>b[1][0]).nonzero? || (a[1][1]<=>b[1][1])}
  # => [[2, [1, 12], ""], [0, [1, 32], ""], [1, [2, 63], ""]]
  p[i][2] = p[i][1][0].to_s.rjust(6, "0").concat(cnt.to_s.rjust(6, "0"))
  # => [[2, [1, 12], "000001000001"], [0, [1, 32], "000001000002"], [1, [2, 63], "000002000001"]] 

Wenn das Innere des Arrays p in den Sinn kommt, dann ist diese Problemstufe die Graduierung.

Ruby (Hash-Version)

RubyHash.rb


n, m = gets.split.map(&:to_i)
p = []
h = Hash.new(0);
m.times do |i|
  y = gets.split.map(&:to_i)
  p[i] = [i, y, ""]
  h[y[0]] +=1
end
p.sort! {|a, b| b[1][1]<=>a[1][1]}
m.times do |i|
  p[i][2] = p[i][1][0].to_s.rjust(6, "0").concat(h[p[i][1][0]].to_s.rjust(6, "0"))
  h[p[i][1][0]] -= 1
end
p.sort! {|a, b| a[0]<=>b[0]}
m.times do |i|
  puts p[i][2]
end

Ich löse mit einem Hash anstelle einer Zählvariablen. Es ist etwas schneller, weil die Codelänge kürzer ist und die Sortierbedingungen eins sind. ~~ Die Java-Version ist TLE, also habe ich sie hinzugefügt. ~~ Perl

perl.pl


chomp (my ($n, $m) = split / /, <STDIN>);
my @p;
for my $i (0..$m-1) {
  chomp (my @in = split / /, <STDIN>);
  $p[$i] = [$i, @in];
}
@p = sort {$$a[1]<=>$$b[1] || $$a[2]<=>$$b[2]} @p;
my ($pref, $cnt) = (0, 0);
for my $i (0..$m-1) {
  if ($pref == $p[$i][1]) {
    $cnt++;
  } else {
    $pref = $p[$i][1];
    $cnt = 1;
  }
  $p[$i][3] = sprintf("%06s", $p[$i][1]) . sprintf("%06s", $cnt);
}
@p = sort {$$a[0]<=>$$b[0]} @p;
print $$_[3], "\n" for @p;

Dies ist auch eine Sortierung mit mehreren Bedingungen, indem * vorheriger Artikel * angewendet wird.

array.pl


[0, 1, 32], [1, 2, 63], [2, 1, 12]

Die Struktur im Array unterscheidet sich jedoch von * Ruby * und ist flach. Java

java.java


import java.io.PrintWriter;
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());
        Map<Integer, Integer> h = new HashMap<>();
        List<City> city = new ArrayList<>();
        for (int i = 0; i < m; i++) {
            int Pref = Integer.parseInt(sc.next());
            int Year = Integer.parseInt(sc.next());
            city.add(new City(i, Pref, Year));
            if (h.containsKey(Pref)) {
                h.put(Pref, h.get(Pref) + 1);
            } else {
                h.put(Pref, 1);
            }
        }
        sc.close();
        city.sort((o1, o2) -> Integer.compare(o2.Year, o1.Year));
        for (City c : city) {
            c.Num = h.get(c.Pref);
            h.put(c.Pref, h.get(c.Pref) - 1);
        }
        city.sort((o1, o2) -> Integer.compare(o1.ID, o2.ID));
        PrintWriter pw = new PrintWriter(System.out);
        for (City c : city) {
            pw.printf("%06d%06d\n", c.Pref, c.Num);
        }
        pw.flush();
    }

    static class City {
        int ID;
        int Pref;
        int Year;
        int Num;

        City(int ID, int Pref, int Year) {
            this.ID = ID;
            this.Pref = Pref;
            this.Year = Year;
            this.Num = 0;
        }
    }
}

flush.java


import java.io.PrintWriter;

Wenn Sie "PrintWriter" nicht verwenden, ist es "TLE".

Ruby Ruby(Hash) Perl Java
Codelänge 450 Byte 372 Byte 470 Byte 1444 Byte
Ausführungszeit 943 ms 880 ms 1079 ms 1615 ms
Erinnerung 27376 KB 33900 KB 45168 KB 107864 KB

Zusammenfassung

Referenzierte Site instance method String#rjust

Recommended Posts

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)
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 ABC 136 D Suche nach Breitenpriorität Gelöst in Ruby, Perl und Java
AtCoder ARC 081 C-Hash, der in Ruby, Perl und Java gelöst werden muss
AtCoder ABC129 D 2D-Array In Ruby und Java gelöst
AtCoder dwango Programmierwettbewerb B zum Lösen in Ruby, Perl und Java B.
AtCoder ABC 169 C Gleitkomma, das in Ruby passt
ABC177 - E in Ruby lösen
Die Richtung von Java in "C ++ Design and Evolution"
Von Java nach C und von C nach Java in Android Studio
Unterschiede beim Schreiben von Java-, C # - und Javascript-Klassen
atcoder ABC113 C Problem
atcoder ABC115 C Problem
Organisieren Sie Builds in C ++ / Java- und Win / Linux-Kombinationen
Secret Note 104 von Mathematical Girl, implementiert in Ruby und C.
Ruby C Erweiterung und flüchtig
Reproduzieren Sie die Java-Enumeration in C #
Unterschiede im Umgang mit Zeichenfolgen zwischen Java und Perl
C # und Java überschreiben Story
Lösen mit Ruby AtCoder ACL Anfängerwettbewerb C Union Find (DSU)
Löse den AtCoder-Anfängerwettbewerb 151 mit Java
Löse den AtCoder Beginner Contest 150 mit Java
Lesen Sie die Java-Eigenschaftendatei in C #
Beispiel für Codierung und Decodierung in Java
Löse den AtCoder-Anfängerwettbewerb 153 mit Java
Java, JavaScript, C # (Unterschied in der Zuordnung)
Grundlegende Datentypen und Referenztypen (Java)
Java-Referenzmechanismus (Stack und Heap)
CGI in C und Dart: Einführung (1)
StringBuffer- und StringBuilder-Klasse in Java
Löse den AtCoder-Anfängerwettbewerb 175 mit Java
Schreiben Sie Schlüssel und Werte in Ruby
Java als Wert übergeben und als Referenz übergeben
Löse den AtCoder-Anfängerwettbewerb 160 mit Java
Verstehe gleich und hashCode in Java
Löse den AtCoder-Anfängerwettbewerb 152 mit Java
Informationen zu primitiven Java-Typen und Referenztypen
Java-Basisdatentypen und Referenztypen
Löse den AtCoder-Anfängerwettbewerb 156 mit Java
Mit Java verschlüsseln und mit C # entschlüsseln
AtCoder Anfängerwettbewerb 167 C Problem (Java)
Hallo Welt in Java und Gradle
Lösen Sie ARC104 D Multiset Mean mit Scala, Java, C ++, Ruby, Perl, Elixir
Informationen zum Zurückgeben einer Referenz in einem Java Getter
Lösen mit Ruby AtCoder ABC177 D Union Find
Unterschied zwischen final und Immutable in Java
[Leicht verständliche Erklärung! ] Konvertierung des Referenztyptyps in Java
Java-Referenz zum Verständnis in der Abbildung
Java-Kern: HotSpot-Compiler und C-Heap
Blasensortierung durchführen und mit Ruby sortieren auswählen
Schriftliche Unterschiede in Ruby, PHP, Java, JS
Verknüpfen Sie Java- und C ++ - Code mit SWIG
Zusammenfassung der Hashes und Symbole in Ruby
[Ruby] Schleifenunterscheidung und Verwendung in Ruby
Unterschied zwischen "|| =" und "instance_variable_defined?" Im Ruby-Memo