結果
| 問題 | No.325 マンハッタン距離2 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-12-18 06:18:29 |
| 言語 | Ruby (3.4.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,712 bytes |
| 記録 | |
| コンパイル時間 | 175 ms |
| コンパイル使用メモリ | 7,680 KB |
| 実行使用メモリ | 12,416 KB |
| 最終ジャッジ日時 | 2024-09-16 08:30:12 |
| 合計ジャッジ時間 | 3,690 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge6 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 3 |
| other | AC * 8 WA * 16 |
コンパイルメッセージ
Main.rb:93: warning: assigned but unused variable - xs Main.rb:94: warning: assigned but unused variable - ys Syntax OK
ソースコード
#! ruby
# yukicoder My Practice
# author: Leonardone @ NEETSDKASU
def gs() gets.chomp end
def gi() gets.to_i end
def gss() gets.chomp.split end
def gis() gss.map(&:to_i) end
def nmapf(n,f) n.times.map{ __send__ f } end
def arr2d(h,w,v=0) h.times.map{[v] * w} end
def ngs(n) nmapf n,:gs end
def ngi(n) nmapf n,:gi end
def ngss(n) nmapf n,:gss end
def ngis(n) nmapf n,:gis end
def for2p(hr,wr,&pr) hr.each{|i|wr.each{|j| yield(i,j)}} end
def nsum(n) n * (n + 1) / 2 end
=begin
1) D範囲に完全内包
1.1: 軸に接しない
3 1 10 9 100
1.2: 軸に接する
3 0 10 8 100
1.3: 軸をまたぐ
3 -1 10 7 100
1.4: 原点を含む
-3 -4 10 8 100
2) D範囲を完全内包
-10 -12 15 14 9
3)
=end
def bruteforce(x1, y1, x2, y2, d)
count = 0
(y1..y2).each do |y|
(x1..x2).each do |x|
count += 1 if x.abs + y.abs <= d
end
end
count
end
def bunkatsu(z1_,z2_)
z1, z2 = [z1_, z2_].minmax
z1a, z2a = [z1.abs, z2.abs].minmax
case
when z2 < 0
[[z1a, z2a]]
when z2 == 0
[[0, 0], [1, z1a]]
when z1 > 0
[[z1a, z2a]]
when z1 == 0
[[0, 0], [1, z2a]]
when z1 < 0 && 0 < z2
[[0, 0], [1, z1a], [1, z2a]]
else
sleep 10
[]
end
end
X1,Y1,X2,Y2,D = gis
#bf = bruteforce(X1, Y1, X2, Y2, D)
#puts "bruteforce %d" % [bf]
# 1) D範囲に完全内包
if [X1.abs, X2.abs].max + [Y1.abs, Y2.abs].max <= D
count = (X2 - X1).abs.succ * (Y2 - Y1).abs.succ
puts count
exit
end
# 2) D範囲を完全内包
if X1.abs >= D && X2.abs >= D && Y1.abs >= D && Y2.abs >= D
count = nsum(D) * 4 + 1
puts count
exit
end
xs = bunkatsu(X1, X2)
ys = bunkatsu(Y1, Y2)