AtCoder Regular Contest C - Make a Rectangle Difficulty: 538
Ce thème, hash Ruby
ruby.rb
n = gets.to_i
c = gets.split.map(&:to_i)
h = {}
n.times do |i|
if h[c[i]]
h[c[i]] += 1
else
h[c[i]] = 1
end
end
s = h.select{|k, v| v >= 4}.keys.sort{|a, b| b<=>a}
t = h.select{|k, v| v >= 2}.keys.sort{|a, b| b<=>a}
ans = 0
ans = s[0] * s[0] if s.size > 0
ans = [ans, t[0] * t[1]].max if t.size > 1
puts ans
Utilisez le hachage pour connaître le nombre d'occurrences.
Je peux utiliser la méthode de filtrage dans Ruby (2.7.1), mais dans l'ancien environnement Ruby (2.3.3) d'AtCoder, cela devient ** RE
** </ font>. J'utilise donc la méthode de sélection.
Perl
perl.pl
use v5.18; # strict say state
use warnings;
use List::Util qw(max);
chomp (my $n = <STDIN>);
chomp (my @a = split / /, <STDIN>);
my %h;
$h{$_}++ for @a;
my @s = sort {$b <=> $a} grep {$h{$_} >= 4} keys %h;
my @t = sort {$b <=> $a} grep {$h{$_} >= 2} keys %h;
my $ans = 0;
$ans = $s[0] * $s[0] if @s > 0;
$ans = max($ans, $t[0] * $t[1]) if @t > 1;
say $ans;
Il utilise des idiomes Perl.
hash.pl
$h{$_}++ for @a;
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());
int a[] = new int[n];
for (int i = 0; i < n; i++) {
a[i] = Integer.parseInt(sc.next());
}
sc.close();
Map<Integer, Integer> h = new TreeMap<>(Comparator.reverseOrder());
for (int i = 0; i < n; i++) {
if (h.containsKey(a[i])) {
h.put(a[i], h.get(a[i]) + 1);
} else {
h.put(a[i], 1);
}
}
List<Integer> s = h.entrySet().stream()
.filter(x -> x.getValue() >= 4)
.map(x -> x.getKey())
.collect(Collectors.toList());
List<Integer> t = h.entrySet().stream()
.filter(x -> x.getValue() >= 2)
.map(x -> x.getKey())
.collect(Collectors.toList());
long ans = 0;
if (s.size() > 0) {
ans = (long) s.get(0) * s.get(0);
}
if (t.size() > 1) {
ans = Math.max(ans, (long) t.get(0) * t.get(1));
}
System.out.println(ans);
}
}
J'utilise des expressions Java lambda. TreeMap est un hachage, mais Comparator.reverseOrder () peut trier automatiquement les clés par ordre décroissant. Il doit être converti en long comme mesure contre le dépassement d'entier.
Ruby | Perl | Java | |
---|---|---|---|
Longueur du code | 336 Byte | 370 Byte | 1199 Byte |
Temps d'exécution | 140 ms | 135 ms | 664 ms |
Mémoire | 14988 KB | 28196 KB | 48532 KB |
Site référencé
Recommended Posts