去年は色々と忙しくじっくり勉強する時間がなかったので、リハビリを兼ねて競技プログラミングの問題をJuliaで挑戦してみることにします。

ひとまず、AtCoderの競プロ典型 90 問を解いて行く予定です。 ジャッジ時にJITコンパイルが走って200~300ms程度消費してしまいますが、幸い今のところTLEでどう頑張っても通せない問題はなかったです。

下に解答を記録していこうと思います。

https://github.com/matsueushi/CompetitiveProgramming

さてはて、いつまで続くやら。


2022/6/7 追記 (随時更新)

ちょっとしたテクニック

  • 入力
parseint() = parse(Int, readline())
parseints() = parse.(Int, split(readline()))
function parsepoints(n::Int)
    xs, ys = zeros(Int, n), zeros(Int, n)
    for i in 1:n
        xs[i], ys[i] = parseints()
    end
    xs, ys
end
function parsestrings(n)
    ss = Vector{String}(undef, n)
    for i in 1:n
        ss[i] = readline()
    end
    ss
end

このようなテンプレートを作っておくと便利

  • パッケージのバージョンを確認する ローカルの実行環境をジャッジと合わせておかないと、予期しないエラーが起こる可能性あり。 コードテストで
using Pkg
println(Pkg.status())

を実行すると使われているパッケージのバージョンが分かります。

Status `~/.julia/environments/v1.4/Project.toml`
  [864edb3b] DataStructures v0.17.11
  [27ebfcd6] Primes v0.4.0
nothing
  • StringからVector{Char}への変換
cs = Vector{Char}(s)
  • 負の数の剰余
julia> mod(-1, 4)
3