結果
問題 | No.2953 Maximum Right Triangle |
ユーザー |
|
提出日時 | 2024-11-16 00:09:47 |
言語 | Fortran (gFortran 14.2.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,225 bytes |
コンパイル時間 | 1,414 ms |
コンパイル使用メモリ | 31,804 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-11-16 00:09:49 |
合計ジャッジ時間 | 919 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 2 WA * 4 |
ソースコード
!> This file was processed by `fypp`.!> Today's fortune: "Bad WA", really OK?!> ランダムウォーク猿「'因数分解' で はっぴー.」program f902953use, intrinsic :: iso_fortran_env!> auto use moduleimplicit noneinteger(int32) :: tinteger(int32) :: iread(input_unit, *) tdo i = 1, tcall solve()end docontainsimpure subroutine solve()integer(int64) :: d, x, yinteger(int64) :: g, nx, nyread(input_unit, *) d, x, yif (x == 0) thenwrite(output_unit, '(i0)') y * dreturnelse if (y == 0) thenwrite(output_unit, '(i0)') x * dreturnend if!> (nx, ny) == (y, -x) /g ベクトルは (x, y) ベクトルに垂直.g = gcd(x, y)nx = y / gny = - x / gif (nx < 0) thennx = - nxny = - nyend ifblock!> (x, y)!> nx >= 0.!> x + t * nx <= d.integer(int64) :: ansinteger(int64) :: bx, byans = 0_int64associate(t => (d - x) / nx)!> x + t * nx <= dif (t > 0) thenbx = x + t * nxby = y + t * nyif (0 <= by .and. by <= d) thenans = max(ans, t * (x ** 2 + y ** 2))end ifend ifend associateassociate(t => x / nx)!> x - t * nx >= 0if (t > 0) thenbx = x - t * nxby = y - t * nyif (0 <= by .and. by <= d) thenans = max(ans, t * (x ** 2 + y ** 2))end ifend ifend associateassociate(t => (d - y) / abs(ny))if (ny > 0) then!> y + t * ny <= dif (t > 0) thenbx = x + t * nxby = y + t * nyif (0 <= bx .and. bx <= d) thenans = max(ans, t * (x ** 2 + y ** 2))end ifend ifelse!> y + t * abs(ny) <= dif (t > 0) thenbx = x - t * nxby = y + t * abs(ny)if (0 <= bx .and. bx <= d) thenans = max(ans, t * (x ** 2 + y ** 2))end ifend ifend ifend associateassociate(t => y / abs(ny))if (ny > 0) then!> y - t * ny >= 0if (t > 0) thenbx = x - t * nxby = y - t * nyif (0 <= bx .and. bx <= d) thenans = max(ans, t * (x ** 2 + y ** 2))end ifend ifelse!> y - t * abs(ny) >= dif (t > 0) thenbx = x + t * nxby = y - t * abs(ny)if (0 <= bx .and. bx <= d) thenans = max(ans, t * (x ** 2 + y ** 2))end ifend ifend ifend associatewrite(output_unit, '(i0)') ansend blockend subroutine solvepure integer(int64) function gcd(a, b) result(res)integer(int64), intent(in) :: a, binteger(int64) :: arr(1:2)arr(1:2) = [max(abs(a), abs(b)), min(abs(a), abs(b))]do while (arr(2) /= 0)arr(1:2) = [arr(2), mod(arr(1), arr(2))]end dores = arr(1)end function gcdend program f902953