AtCoder Beginner Contest 131 D - Megalomania Difficulty: 594
Ce thème, tri des tableaux Ruby C'est une sorte de tableau, donc je pense que c'est facile à mettre en œuvre. ~~ Puisque c'est mon premier Python, j'ai choisi une question plus légère. ~~
ruby.rb
n = gets.to_i
a = Array.new(n){gets.split.map(&:to_i)}
a.sort_by!{|x| x[1]}
ans = 0
n.times do |i|
  ans += a[i][0]
  if ans > a[i][1]
    puts "No"
    exit
  end
end
puts "Yes"
sort.rb
a.sort_by!{|x| x[1]}
~~ Tri selon plusieurs conditions, mais à des fins d'apprentissage, une seule peut être triée comme solution. ~~ ** Addenda ** Certaines corrections ont été apportées aux commentaires reçus. Python C'est presque une copie car c'est résolu avec *** Python *** pour la première fois.
python.py
n = int(input())
a = list(list(map(int, input().split())) for _ in range(n))
a.sort(key=lambda x: x[1])
ans = 0
for i in range(0, n):
    ans += a[i][0]
    if ans > a[i][1]:
        print("No")
        exit()
print("Yes")
Le codage est facile car l'extension VSCode fonctionne.
range.py
for i in range(0, n):
for i in range(0, n - 1):
J'ai essayé de le tourner avec i à for, mais j'ai écrit n -1 et j'ai obtenu WA.
La prochaine fois, j'essaierai de trier selon plusieurs conditions. Perl
perl.pl
chomp (my $n = <STDIN>);
my @a;
for my $i (0..$n-1) {
  my @in = split / /, <STDIN>;
  ($a[$i][0], $a[$i][1]) = @in;
}
@a = sort {$$a[1]<=>$$b[1] || $$b[0]<=>$$a[0]} @a;
my $ans = 0;
for my $i (0..$n-1) {
  $ans += $a[$i][0];
  if ($ans>$a[$i][1]) {
    print "No\n";
    exit;
  }
}
print "Yes\n";
sort.pl
@a = sort {$$a[1]<=>$$b[1] || $$b[0]<=>$$a[0]} @a;
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());
        List<Work> work = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            int time = Integer.parseInt(sc.next());
            int limit = Integer.parseInt(sc.next());
            work.add(new Work(time, limit));
        }
        sc.close();
        work.sort(Comparator.comparingInt(x -> x.limit));
        int ans = 0;
        for (int i = 0; i < n; i++) {
            ans += work.get(i).time;
            if (ans > work.get(i).limit) {
                System.out.println("No");
                return;
            }
        }
        System.out.println("Yes");
    }
    static class Work {
        int time;
        int limit;
        Work(int time, int limit) {
            this.time = time;
            this.limit = limit;
        }
    }
}
sort.java
        work.sort(Comparator.comparingInt(x -> x.limit));
** Addenda ** Comme on m'a dit dans les commentaires, j'ai changé la partie de comparaison de tri par le code qui utilise Comparator introduit dans java8. Plus sûr et légèrement plus rapide.
| Ruby | Python | Perl | Java | |
|---|---|---|---|---|
| Longueur du code | 189 Byte | 231 Byte | 315 Byte | 972 Byte | 
| Temps d'exécution | 484 ms | 995 ms | 1237 ms | 883 ms | 
| Mémoire | 22520 KB | 53728 KB | 66788 KB | 72900 KB | 
Recommended Posts