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

introduction

Ce thème

AtCoder Beginner Contest 113 C - ID Difficulty: 877

Ce thème, référence Ruby C'est un problème qui a rendu * AtCoder Judge System Update Test Contest 202004 B * résolu avant * un peu plus difficile.

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"]] 

Si l'intérieur du tableau p vient à l'esprit, alors ce niveau de problème est la graduation.

Ruby (version Hash)

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

Je résolve en utilisant un hachage au lieu d'une variable de nombre. C'est un peu plus rapide car la longueur du code est plus courte et les conditions de tri sont une. ~~ La version Java est TLE, donc je l'ai ajoutée. ~~ 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;

Il s'agit également d'un tri à conditions multiples en appliquant * article précédent *.

array.pl


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

Cependant, la structure du tableau est différente de celle de * Ruby * et elle est plate. 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;

Si vous n'utilisez pas «PrintWriter», ce sera «TLE».

Ruby Ruby(Hash) Perl Java
Longueur du code 450 Byte 372 Byte 470 Byte 1444 Byte
Temps d'exécution 943 ms 880 ms 1079 ms 1615 ms
Mémoire 27376 KB 33900 KB 45168 KB 107864 KB

Résumé

Site référencé instance method String#rjust

Recommended Posts

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)
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
Recherche de priorité de largeur AtCoder ABC 136 D résolue en Ruby, Perl et Java
AtCoder ARC 081 C hash à résoudre en Ruby, Perl et Java
Tableau 2D AtCoder ABC129 D résolu en Ruby et Java
Concours de programmation AtCoder dwango B à résoudre en Ruby, Perl et Java
AtCoder ABC 169 C virgule flottante qui tient dans Ruby
ABC177-Résoudre E avec Ruby
La direction de Java dans "C ++ Design and Evolution"
De Java à C et de C à Java dans Android Studio
Différences dans l'écriture des classes Java, C # et Javascript
Problème atcoder ABC113 C
problème atcoder ABC115 C
Organiser les builds dans des combinaisons C ++ / Java et Win / Linux
Note secrète de Mathematical Girl 104e implémentée en Ruby et C
Extension Ruby C et volatile
Reproduire l'énumération Java en C #
Différences dans la gestion des chaînes entre Java et Perl
Histoire de remplacement C # et Java
Résolution avec Ruby AtCoder ACL Débutant Contest C Union Find (DSU)
Résolvez AtCoder Beginner Contest 151 avec Java
Résolvez AtCoder Beginner Contest 150 avec Java
Lire le fichier de propriétés Java en C #
Exemple d'encodage et de décodage en Java
Résolvez AtCoder Beginner Contest 153 avec Java
Java, JavaScript, C # (différence d'affectation)
Types de données de base et types de référence (Java)
Mécanisme de référence Java (pile et tas)
CGI en C et Dart: Introduction (1)
Classe StringBuffer et StringBuilder en Java
Résolvez AtCoder Beginner Contest 175 avec Java
Ecrire des clés et des valeurs dans Ruby
Java passe par valeur et passe par référence
Résolvez AtCoder Beginner Contest 160 avec Java
Comprendre equals et hashCode en Java
Résolvez AtCoder Beginner Contest 152 avec Java
A propos des types primitifs et des types de référence Java
Types de données de base et types de référence Java
Résolvez AtCoder Beginner Contest 156 avec Java
Crypter avec Java et décrypter avec C #
AtCoder Beginner Contest 167 Problème C (Java)
Bonjour tout le monde en Java et Gradle
Résoudre la moyenne multiset ARC104 D avec Scala, Java, C ++, Ruby, Perl, Elixir
A propos du renvoi d'une référence dans un Java Getter
Résolution avec Ruby AtCoder ABC177 D Union Find
Différence entre final et immuable en Java
[Explication facile à comprendre! ] Conversion de type de type de référence en Java
Référence Java à comprendre dans la figure
noyau java: compilateur HotSpot et tas C
Faire un tri à bulles et sélectionner le tri avec Ruby
Différences d'écriture en Ruby, PHP, Java, JS
Lier le code Java et C ++ avec SWIG
Résumé des hachages et symboles dans Ruby
[Ruby] Distinction et utilisation des boucles dans Ruby
Différence entre "|| =" et "instance_variable_defined?" Dans Ruby memo