AtCoder ABC144
AtCoder ABC144解いた分だけ書きます。
ここ1ヶ月、右手を痛めたので、コンテスト参加できずゆっくり解いてました。
皆さんも手の使いすぎにはお気をつけて...
A. 9×9
場合分けをして踏めば分岐させる。
先に制約が厳しいものから割り振る。
#coding:utf-8 a, b = map(int, input().split()) if a >= 10 or b >= 10: print(-1) else: print(a*b)
B. 81
問題文
Aの発展系みたいな問題だった。
数が少ないので、2重ループ回して全探索でいってみる。
ヒットするパターンがあれば抜けて、flagをYesに変える。
#coding:utf-8 n = int(input()) flag = 'No' for i in range(1, 10): for j in range(1, 10): if i*j == n: flag = 'Yes' break print(flag)
C. Walk on Multiplication Table
問題文
例を中心にパターンを書き出すと、座標(a, b)(ただしa≦b)に行くまで
移動回数が a+b-2
であることが分かった。
なので、n = a * bを満たすnについて、a+b-2の最小値を出せばいい。
するとaの探索範囲がsqrt(n)で良いことになる
#coding:utf-8 import math #移動回数はa+b-2。これを満たす座標(a,b)について、a,bの最小値 #探索範囲はsqrt(N)まで、a<=b n = int(input()) ans = n-1 for i in range(2, int(math.sqrt(n))+1): if n % i == 0: ans = min(ans, n//i + i - 2) print(ans)