0
0

More than 3 years have passed since last update.

Ruby の sum は地味にすごい話

Last updated at Posted at 2020-11-02

はじめに

速い速いと評判のsumが本当に速かった話

今回のお題

AtCoder Beginner Contest B - Trapezoid Sum
Difficulty: 27

今回のテーマ、等差数列の和

題意としては、普通に加算するとTLEするので、等差数列の和の公式

S=n(a+b)/2

を使いましょうというもの。

inject(TLE)

ruby.rb
n = gets.to_i
sum = 0
n.times do
  a, b = gets.split.map(&:to_i)
  sum += (a..b).inject(:+)
end
puts sum

見事にTLE

sum(AC)

ruby.rb
n = gets.to_i
sum = 0
n.times do
  a, b = gets.split.map(&:to_i)
  sum += (a..b).sum
end
puts sum

普通に通ります。
rangesumは内部的に、等差数列の和の公式を使っていると思われます(適当)
どうやら本当だった様子。
コメント欄を参照願います。

Ruby(inject) Ruby(sum)
コード長 (Byte) 110 103
実行時間 (ms) TLE 135
メモリ (KB) 14344 14392

まとめ

  • ABC 181 B を解いた
  • sum は速かった
0
0
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0