AtCoder Regular Contets C - Attention Difficulty: 641
Ce thème, somme cumulée Ruby Si l'on considère «WEWEWEEEWWWE» dans l'exemple d'entrée 2, cela devient «WEWEWEEiWWWE», et le nombre total de «W» sur le côté gauche de «i» et le nombre de «E» sur le côté droit est le nombre de personnes à calculer. De la gauche «0» à la droite «n-1» de la chaîne de caractères, «E» est une diminution monotone et «W» est une augmentation monotone, donc la ** somme cumulée ** est utilisée comme méthode pour réduire la quantité de calcul. ..
ruby.rb
n = gets.to_i
s = gets.chomp
e = (s[0] == 'E' ? [1] : [0])
w = (s[0] == 'W' ? [1] : [0])
1.upto(n - 1) do |i|
if (s[i] == 'E')
e[i] = e[i - 1] + 1
w[i] = w[i - 1]
else
e[i] = e[i - 1]
w[i] = w[i - 1] + 1
end
end
w.unshift(0)
min = Float::INFINITY
0.upto(n - 1) do |i|
min = e[-1] - e[i] + w[i] if min > e[-1] - e[i] + w[i]
end
puts min
sum.rb
1.upto(n - 1) do |i|
if (s[i] == 'E')
e[i] = e[i - 1] + 1
w[i] = w[i - 1]
else
e[i] = e[i - 1]
w[i] = w[i - 1] + 1
end
end
La somme cumulée est calculée ici.
inf.rb
min = Float::INFINITY
L'infini est défini avec Float :: INFINITY
.
Python
python.py
import sys
n = int(input())
s = input()
e = [0] * n
w = [0] * (n + 1)
e[0] = 1 if s[0] == 'E' else 0
w[0] = 0
w[1] = 1 if s[0] == 'W' else 0
for i in range(1, n):
if s[i] == 'E':
e[i] = e[i - 1] + 1
w[i + 1] = w[i]
else:
e[i] = e[i - 1]
w[i + 1] = w[i] + 1
min = sys.maxsize
for i in range(n):
if min > e[-1] - e[i] + w[i]:
min = e[-1] - e[i] + w[i]
print(min)
max.py
min = sys.maxsize
La limite supérieure des nombres entiers est définie dans sys.maxsize
.
Perl
perl.pl
chomp (my $n = <STDIN>);
chomp (my $s = <STDIN>);
my (@e, @w);
$e[0] = (substr($s, 0, 1) eq 'E' ? 1 : 0);
$w[0] = (substr($s, 0, 1) eq 'W' ? 1 : 0);
for my $i (1..$n-1) {
if (substr($s, $i, 1) eq 'E') {
$e[$i] = $e[$i - 1] + 1;
$w[$i] = $w[$i - 1];
} else {
$e[$i] = $e[$i - 1];
$w[$i] = $w[$i - 1] + 1;
}
}
unshift @w, 0;
my $min = inf;
for my $i (0..$n-1) {
$min = $e[-1] - $e[$i] + $w[$i] if $min > $e[-1] - $e[$i] + $w[$i];
}
print "$min\n";
inf.pl
my $min = inf;
L'infini est défini avec ʻinf`. Java
java.java
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.next());
char s[] = sc.next().toCharArray();
sc.close();
int e[] = new int[n];
int w[] = new int[n + 1];
w[0] = 0;
if (s[0] == 'E') {
e[0] = 1;
w[1] = 0;
} else {
e[0] = 0;
w[1] = 1;
}
for (int i = 1; i < n; i++) {
if (s[i] == 'E') {
e[i] = e[i - 1] + 1;
w[i + 1] = w[i];
} else {
e[i] = e[i - 1];
w[i + 1] = w[i] + 1;
}
}
int min = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
if (min > e[n - 1] - e[i] + w[i])
min = e[n - 1] - e[i] + w[i];
}
System.out.println(min);
}
}
inf.java
int min = Integer.MAX_VALUE;
ʻInteger.MAX_VALUE` définit la valeur maximale de l'entier.
Ruby | Python | Perl | Java | |
---|---|---|---|---|
Longueur du code | 379 Byte | 433 Byte | 488 Byte | 962 Byte |
Temps d'exécution | 160 ms | 302 ms | 255 ms | 181 ms |
Mémoire | 7808 KB | 17552 KB | 22604 KB | 32136 KB |
Site référencé
Recommended Posts