🐙
AtCoder ABC186 個人的メモ
所感
abc3完
A - Brick
N, W = map(int, input().split())
print(N // W)
B - Blocks on Grid
最もブロックの個数が少ないマスのブロックの数を
全てのマスで
ブロックの個数は2次元のリストで保持する必要は無いので,1次元のリストで保持した
H, W = map(int, input().split())
A = []
for _ in range(H):
a = list(map(int, input().split()))
for i in a:
A.append(i)
res = min(A)
print(sum([a - res for a in A]))
C - Unlucky 7
全探索
N = int(input())
ans = 0
for i in range(1, N + 1):
if "7" in str(i):
continue
if "7" in oct(i):
continue
ans += 1
print(ans)
D - Sum of difference
Aを降順(大きい順)にソートする
こうすると,常に
ソートの前後で
後はAの累積和を取っておけば,
ソート気づかなかった
from itertools import accumulate
N = int(input())
A = list(map(int, input().split()))
A.sort(reverse=True)
cumsum = list(accumulate(A))
ans = 0
for i in range(N):
ans += A[i] * (N - i - 1) - (cumsum[-1] - cumsum[i])
print(ans)
E - Throne
公式解説通りに解説ac
https://atcoder.jp/contests/abc186/editorial/401
以下のツイートも参考にした
acはしたけど,要復習
というわけで復習した
これを余剰演算に変形する
これを
ここで
なので,
すると,
よって,
以上より,以下の順で実装すればおk
-
(g=gcd(N,K) とN の最大公約数)を求めるK - 解が存在するか(
がS で割り切れるか)調べるg -
をN,S,K で割って,g を求めるx
python3.8なら,余剰演算の逆元
from math import gcd
T = int(input())
for _ in range(T):
N, S, K = map(int, input().split())
g = gcd(N, K)
if S % g:
ans = -1
else:
N //= g
S //= g
K //= g
ans = -S * pow(K, -1, N) % N
print(ans)
参考
- AtCoder ABC 186 E - Throne (水色, 500 点) - けんちょんの競プロ精進記録
https://drken1215.hatenablog.com/entry/2020/12/20/015100 - 解説 - パナソニックプログラミングコンテスト(AtCoder Beginner Contest 186)
https://atcoder.jp/contests/abc186/editorial/401 - モジュラ逆数 - Wikipedia
https://ja.wikipedia.org/wiki/モジュラ逆数 - 「1000000007 で割ったあまり」の求め方を総特集! 〜 逆元から離散対数まで 〜 - Qiita
https://qiita.com/drken/items/3b4fdf0a78e7a138cd9a#3-6-逆元が存在する条件
Discussion