📝

[個人的]AtCorder振り返りノート

2021/04/17に公開

この記事の目的

就活の選考時、コーディングテストなるものに遭遇することはよくあると思います。
その対策として、自習したAtCorderやHackerRankでつまずいた点をここに残します。
自分がすぐ参照しやすいように長くなってます。

入力関連

  • 一行で受け取り
a = input() #一つの数字
b,c = map(int, input().split()) #複数の数字
  • リストで受け取り
arr = list(map(int, input().rstrip().split()))
  • 複数行をリストで受け取り
# Kはうけとる行数
input_list = [input() for i in range(K)]

出力関係

  • リストを一行で出力
for i in div_array:
    for j in i:
        print(j ,end=" ")
    print()    

>>>5 6 #6、10の後にスペースが入っている
>>>9 10 #6、10の後にスペースが入っている

基本計算

  • べき乗
print(10 ** 3)
# 1000

print(2 ** 0.5)
# 1.4142135623730951

print(10 ** -2)
# 0.01

print(0 ** 0)
# 1
  • 割り算の整数部
print(10 // 3)
# 3
  • 割り算の剰余
print(10 % 3)
# 1

その他tips

set型を用いて、重複する要素を除去する問題

狭義単調増加な整数列A=(A1,A2,…,AN),B=(B1,B2,…,BM)があります。A,Bのどちらか片方にだけ出現する整数を全て求め、昇順に出力してください。

https://atcoder.jp/contests/jsc2021/tasks/jsc2021_b

input()
A = set(map(int, input().split()))
B = set(map(int, input().split()))
print(*sorted(A ^ B))

参照

計算量が大きくなる数列

数列は手計算でわかっていたが、そのまま実装するとタイムアウトに…
計算量の意識をもたないといけないと反省。

https://atcoder.jp/contests/jsc2021/tasks/jsc2021_d

公式回答例より引用

MOD = 1000000007
N, P = map(int, input().split())
ans = (P - 1) * pow(P - 2, N - 1, MOD) % MOD
print(ans)

powってなによ?

**は演算子、pow()は関数という違いあり、(当たり前?)通常の計算はおなじ。
ただ三番目の引数としてmodを指定することができる。
競プロで剰余を意識するような大きな計算の時は使えるかも。

参考

Discussion