AtCoder에서 Juria 사용
배경.
지금까지 C++는 AtCoder에 참가했지만 평소에 사용하지 않았던 C++는 그 동안 켜자마자 잊어버려서 줄리아로 갈아타고 싶습니다.
ABC 186에 대한 질문에 답해 보려고 합니다.여기서는 코드의 설명, 알고리즘 등의 해설이 주로 진행되기 때문에 공식 해설을 보십시오.
A 문제
이 문제는 N을 W로 나누면 됩니다. 간단하지만 입력과 출력은 좀 번거롭습니다.
N ,W = readline |> split .|> x -> parse(Int16,x)
println(N)
이렇게 쓰면 가독성이 높아질 것 같아요.다음과 같이 함수화할 수도 있다.
function main()
N ,W = readline() |> split .|> x -> parse(Int16,x)
println(N÷W)
end
main()
질문
다음 문제는 송어에 곱한 덩어리의 수를 나타내는 배열 A의 최소치입니다.
$$
총 블록 수 - 최소값×격자
$$
계산하면 돼.직감적으로 이걸 쓰면...
function main()
H ,W= readline() |> split .|> x -> parse(Int,x)
A=Array{Int,2}(undef,H,W)
for i in 1:H
A[i,:]= readline() |> split .|> x -> parse(Int,x)
end
Amin=min(A...)
Asum=sum(A)
println(Asum-Amin*H*W)
end
main()
그렇게 되겠지.그런데 여기 문제가 있어요.주리아는 콜럼모어 order.function main()
H ,W= readline() |> split .|> x -> parse(Int,x)
A=Array{Int,2}(undef,W,H)
for i in 1:H
A[:,i]= readline() |> split .|> x -> parse(Int,x)
end
Amin=min(A...)
Asum=sum(A)
println(Asum-Amin*H*W)
end
main()
더 빠릅니다.실제로 AtCoder 측정을 통해 전자는 381ms, 후자는 351ms로 측정됐다.즉, 10%가량 속도가 빨라져 D, E, F 문제는 주의가 필요할 수 있다.C 문제
이건 포리에서 어리석게 다 찾아보는 게 좋겠지.Juria에는 string 함수의 키워드
base
가 있으며 몇 진수로 표시할 수 있습니다.이것을 사용하면 다음과 같습니다.function main()
N=readline() |> x -> parse(Int,x)
count=0
for i in 1:N
if '7' in string(i, base=8) || '7' in string(i, base=10)
count+=1
end
end
println(N-count)
end
main()
여기서 가장 중요한 것은 첫 줄이 split에서 떨어지는 것이다.이걸 하지 않으면 N이 1성분의 배열이 되어 for i in 1:N
에 error에서 나온다.질문
이 문제는 배열 A에 대한sort를 통해 절대치를 피하는 것이 중요하다는 것이다.sort 뒤의 정렬을\tild{A}(오름차순)로 설정하면
\sum_{i=1}^{N-1}\sum_{j=i+1}^{N}\left| A_i-A_j\right|
=
\sum_{i=1}^{N-1}\sum_{j=i+1}^{N}\left(\tilde{A}_j -\tilde{A}_i\right)_.
내부\sum 실행 후
\sum_{i=1}^{N-1}\left(\sum_{j=i+1}^{N}\tilde{A}_j -\left( N -i\right)\tilde{A}_i\right)_.
나는 이것을 실제로 실시할 것이다.
function main()
N=readline() |> x -> parse(Int,x)
A=Array{Int,1}(undef,N)
A=readline() |> split .|> x -> parse(Int,x)
sort!(A) # 小さい順
out=0
B=0
for j in N:-1:2
B+=A[j]
out+=B-(N-j+1)*A[j-1]
end
println(out)
end
main()
여기서 조금만 힘내자\sum{j=i+1}^{N}\tilde{A}_j의 부분을 변수 B로 정의하고 for 문장을 N에서 1로 바꿉니다.끝맺다
이번에는 ABC 186의 D 문제를 주리아로 해결했다.지금까지 경기에서 E문제 이상을 풀지 못했기 때문이다.지금 시작
readline() |> x -> parse(Int,x)
와 같이 입력과 출력도 읽기 쉬운 지정을 하기 쉽다.다음에 도표 문제를 실시하고 싶습니다.
Reference
이 문제에 관하여(AtCoder에서 Juria 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/ma0/articles/8957a681b5eb60텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)