AtCoder Beginner Contest 129 C - Typical Stairs Difficulty: 795
Le thème de la première partie est Fibonacci Ruby
| Nombre d'escaliers | Motif de combinaison | Nombre de combinaisons | 
|---|---|---|
| 1 | 1 | 1 | 
| 2 | 1-2 | 1 | 
| 3 | 1-2-3/1-3 | 2 | 
| 4 | 1-2-3-4/1-2-4/1-3-4 | 3 | 
| 5 | 1-2-3-4-5/1-2-3-5/1-2-4-5/1-3-4-5/1-3-5 | 5 | 
** Addition ** Nombre d'étapes = Étapes à vos pieds + Étape suivante. Merci pour votre commentaire, @swordone.
La façon de monter les escaliers est comme ci-dessus, mais celle avec une bonne idée est ** [numéro Fibonatch](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3 Vous remarquerez que% 83% 9C% E3% 83% 8A% E3% 83% 83% E3% 83% 81% E6% 95% B0) **.
Par conséquent, trouvez le nombre d'escaliers consécutifs et ajoutez le nombre total de combinaisons à «exemple. #. # ...» -> «1, 1, 3». fib (1) * fib (1) * fib (3)
ruby.rb
n, m = gets.split.map(&:to_i)
a = []
1.upto(m) do |i|
  a[i] = gets.to_i
end
a[0] = -1
a.push(n + 1)
b = []
1.upto(m + 1) do |i|
  if a[i] - a[i - 1] == 1
    puts "0"
    exit
  end
  b.push(a[i] - a[i - 1] - 1)
end
fib = []
fib[1] = 1
fib[2] = 1
3.upto(n + 1) do |i|
  fib[i] = fib[i - 1] + fib[i - 2]
  fib[i] %= 1_000_000_007
end
ans = 1
0.upto(b.size - 1) do |i|
  ans *= fib[b[i]]
  ans %= 1_000_000_007
end
puts ans
WA.rb
  ans %= 1_000_000_007
  ans %= 1e9 + 7
Si vous écrivez le diviseur comme 1e9 + 7, il sera traité comme un nombre réel dans * Ruby *, et il sera WA </ font> en raison de l'erreur après la virgule décimale, alors soyez prudent. Veuillez joindre. Perl
perl.pl
chomp (my ($n, $m) = split / /, <STDIN>);
my @a;
for my $i (1..$m) {
  chomp (my $in = <STDIN>);
  $a[$i] = $in;
}
$a[0] = -1;
push @a, $n + 1;
my @b;
for my $i (1..$m+1) {
  if ($i != 1 && $a[$i] - $a[$i - 1] == 1) {
    print "0\n";
    exit;
  }
  push @b, $a[$i] - $a[$i - 1] - 1;
}
my @fib;
$fib[1] = 1;
$fib[2] = 1;
for my $i (3..$n+1) {
  $fib[$i] = $fib[$i - 1] + $fib[$i - 2];
  $fib[$i] %= 1e9 + 7;
}
my $ans = 1;
for my $i (@b) {
  $ans *= $fib[$i];
  $ans %= 1e9 + 7;
}
print "$ans\n";
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());
        int m = Integer.parseInt(sc.next());
        int a[] = new int[m + 2];
        for (int i = 1; i <= m; i++) {
            a[i] = Integer.parseInt(sc.next());
        }
        sc.close();
        a[0] = -1;
        a[m + 1] = n + 1;
        List<Integer> b = new ArrayList<>();
        for (int i = 1; i <= m + 1; i++) {
            if (a[i] - a[i - 1] == 1) {
                System.out.println(0);
                return;
            }
            b.add(a[i] - a[i - 1] - 1);
        }
        long fib[] = new long[n + 2];
        fib[1] = 1;
        fib[2] = 1;
        for (int i = 3; i <= n + 1; i++) {
            fib[i] = fib[i - 1] + fib[i - 2];
            fib[i] %= 1_000_000_007;
        }
        long ans = 1;
        for (int i = 0; i < b.size(); i++) {
            ans *= fib[b.get(i)];
            ans %= 1_000_000_007;
        }
        System.out.print(ans);
    }
}
C'est une promesse que vous obtiendrez RE </ font> sans utiliser long.
| Ruby | Perl | Java | |
|---|---|---|---|
| Longueur du code | 457 Byte | 522 Byte | 1106 Byte | 
| Temps d'exécution | 64 ms | 85 ms | 343 ms | 
| Mémoire | 3836 KB | 10368 KB | 45652 KB | 
C'est généralement la fin, mais cette fois j'ai beaucoup rencontré dans le cas du coin, donc je publierai une autre solution.
Recommended Posts