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.
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 |
Referenzierte Site instance method String#rjust
Recommended Posts