読者です 読者をやめる 読者になる 読者になる

Tamflexの貯蔵庫

やる気のない備忘録

aoj 0029

単語の出現頻度 | Aizu Online Judge

cだと面倒な問題も比較的簡単に書ける.
アンダースコアは使わない変数に使うらしい.
調べたところmax, min, sortに関して*_byの方が計算コストが小さいらしい.
qiita.com
詳しく言えばn要素をもつ配列に対して*_byはn回のブロックの返り値で評価を行うのに対し,*は最悪2n-1回評価を行わなければならない.だからarr.max{|a,b| hoge<=>hoge}よりもarr.max_by{|v| hoge}のほうが高速で良さそう.

require 'scanf'

s = gets.split.map(&:to_s)
ans = {};
s.each do |word|
  ans[word] = 0 if(ans[word].nil?)
  ans[word] += 1;
end
puts (ans.max_by{|_, v| v})[0] + " " + (s.max_by{|v| v.size})