-
-
Save kunst1080/b1e61999d488548c72f5 to your computer and use it in GitHub Desktop.
| # 仕様: | |
| # ホーム画面の領域を「field」とする。 | |
| # fieldは[縦][横]の2次元配列。 | |
| # fieldの各マスについて、配置できるウィジェットの高さ毎の最大横幅を持を格納した2次元配列を「fmap」とし、 | |
| # 縦幅と最大横幅ごとに配置可能なマスの数を集計したものを「wctable」とする。 | |
| # | |
| # ホーム画面に配置するウィジェットの属性を「widget」とし、その配列を「widgets」とする。 | |
| # | |
| # 判定について | |
| # fieldのマスに対し、widgetをいくつ配置できるか判定する | |
| # | |
| # データ構造: | |
| # field[y][x] = 0 or 1 | |
| # fmap[y][x] = {:max_height => n, widget_height => max_widget_width..} | |
| # wctable[widget_height][max_widget_width] = count | |
| # widget = [widget_height, widget_width] | |
| def scanField() | |
| head = $stdin.readline.split | |
| h = head[0].to_i | |
| w = head[1].to_i | |
| field = $stdin.read(h * (w.succ)).split("\n").map do |row| | |
| row.split("").map(&:to_i) | |
| end | |
| fmap = [] | |
| (h-1).downto(0).each do |y| | |
| fmap[y] = [] | |
| (w-1).downto(0).each do |x| | |
| fmap[y][x] = searchMaxWidthes( | |
| field[y][x], | |
| fmap[y][x+1], | |
| if fmap[y+1] != nil && fmap[y+1][x][:max_height] != nil then | |
| fmap[y+1][x][:max_height] else 0 end, | |
| h - y) | |
| end | |
| end | |
| fmap | |
| end | |
| def searchMaxWidthes(value, right_value, bottom_max_height, count_y) | |
| hs = {} | |
| if value == 1 | |
| hs[:max_height] = 0 | |
| elsif right_value == nil || right_value[:max_height] == 0 | |
| max_height = bottom_max_height + 1 | |
| hs = fillMap(max_height, 1) | |
| hs[:max_height] = max_height | |
| else | |
| max_height = bottom_max_height + 1 | |
| hs = headPlusMap(right_value, max_height) | |
| hs[:max_height] = max_height | |
| end | |
| hs | |
| end | |
| def fillMap(size, value) | |
| hs = {} | |
| (1..size).each do |i| | |
| hs[i] = value | |
| end | |
| hs | |
| end | |
| def headPlusMap(srcMap, size) | |
| hs = {} | |
| (1..size).each do |i| | |
| if srcMap[i] == nil | |
| hs[i] = 1 | |
| else | |
| hs[i] = srcMap[i] + 1 | |
| end | |
| end | |
| hs | |
| end | |
| def scanWidgets() | |
| n = $stdin.readline.chomp.to_i | |
| widgets = Array.new(n) | |
| lines = $stdin.read.split | |
| offset = 0 | |
| n.times {|i| | |
| widgets[i] = [ | |
| lines[offset].to_i, | |
| lines[offset.succ].to_i | |
| ] | |
| offset = offset.succ.succ | |
| } | |
| widgets | |
| end | |
| def countWidgets(fmap) | |
| wctable = [] | |
| fmap.each do |row| | |
| row.each do |cell| | |
| (1..cell[:max_height]).each do |h| | |
| max_widget_width = cell[h] | |
| wctable[h] = [] if wctable[h] == nil | |
| if wctable[h][max_widget_width] == nil | |
| wctable[h][max_widget_width] = 1 | |
| else | |
| wctable[h][max_widget_width] += 1 | |
| end | |
| end | |
| end | |
| end | |
| wctable | |
| end | |
| # MAIN | |
| begin | |
| fmap = scanField | |
| widgets = scanWidgets | |
| wctable = countWidgets(fmap) | |
| result = "" | |
| widgets.each do |widget| | |
| widget_height, widget_width = widget | |
| count = 0 | |
| max_widget_width = 0 | |
| max_widget_width = wctable[widget_height].size if wctable[widget_height] != nil | |
| (widget_width..max_widget_width).each do |w| | |
| count += wctable[widget_height][w] if wctable[widget_height][w] != nil | |
| end | |
| result << count.to_s << "\n" | |
| end | |
| print result | |
| end |
result of rev2 http://paiza.jp/poh/paizen/result/be43a2a066596d0d07d831553042061c
■結果
提出言語:Ruby
得点:42 点
結果:
テストケース1:success 0.02秒
テストケース2:success 0.01秒
テストケース3:success 0.04秒
テストケース4:invalid
テストケース5:invalid
テストケース6:invalid
テストケース7:invalid
result of rev3 https://paiza.jp/poh/paizen/result/ffe91018360eea150770b23ad790ee9a
■結果
提出言語:Ruby
得点:42 点
結果:
テストケース1:success 0.02秒
テストケース2:success 0.01秒
テストケース3:success 0.04秒
テストケース4:invalid
テストケース5:invalid
テストケース6:invalid
テストケース7:invalid
result of rev4 https://paiza.jp/poh/paizen/result/9ca8b6a229e81455b5ba377f6459870d
■結果
提出言語:Ruby
得点:42 点
結果:
テストケース1:success 0.02秒
テストケース2:success 0.01秒
テストケース3:success 0.04秒
テストケース4:invalid
テストケース5:invalid
テストケース6:invalid
テストケース7:invalid
result of rev5 https://paiza.jp/poh/paizen/result/10872f885150f12b8f313eb3ad52e105
■結果
提出言語:Ruby
得点:42 点
結果:
テストケース1:success 0.02秒
テストケース2:success 0.01秒
テストケース3:success 0.03秒
テストケース4:invalid
テストケース5:invalid
テストケース6:invalid
テストケース7:invalid
※入出力を改善してみたけどまだ駄目。チェックのアルゴリズムを根本的に見直さないといけないと思う。
result of rev6 https://paiza.jp/poh/paizen/result/e2fe88c724b3446157910e2924ed9654
■結果
提出言語:Ruby
得点:100 点
結果:
テストケース1:success 0.01秒
テストケース2:success 0.01秒
テストケース3:success 0.03秒
テストケース4:success 0.06秒
テストケース5:success 0.2秒
テストケース6:success 0.41秒
テストケース7:success 0.74秒
※アルゴリズムを根本的に見直した。
result of rev1 http://paiza.jp/poh/paizen/result/029e6a61c105d942820fae91a1755bf3
■結果
提出言語:Ruby
得点:42 点
結果:
テストケース1:success 0.03秒
テストケース2:success 0.01秒
テストケース3:success 0.1秒
テストケース4:invalid
テストケース5:invalid
テストケース6:invalid
テストケース7:invalid