AtCorder Beginner Contest 103 に参加した!
用事ない限り参加することにしてるAtCorder!
ABC103に参加してました!
AtCoder Beginner Contest 103 - AtCoder
言語はpython3、競プロはjavaとかのコンパイラ言語の方が良いらしいけど書けません!
A問題 略
B問題
S = list(input()) T = list(input()) Ans = False for i in range(len(S)): S.insert(0,S[-1]) S.pop(-1) if S == T: Ans = True break if Ans == True: print('Yes') else: print('No')
popとinsertで文字を入れ替えていき、一致するものがあれば元々FalseのAns を Trueに変えてbreak
最初にbool型の変数を作っておくと便利ってどこかで見て覚えましたw
C問題
import math from functools import reduce N = int(input()) A= list(map(int,input().split( ))) def gcd(x,y): if x > y: x , y = y , x while x>0: x, y = y%x , x return y def lcm_base(x, y): return (x * y) // gcd(x, y) def lcm_list(numbers): return reduce(lcm_base, numbers, 1) m = lcm_list(A) -1 B = 0 for j in range(len(A)): B += m%A[j] print(B)
与えられた数字の最小公倍数から1を引いた値が非負整数mってことに気づいて、最小公倍数の出し方をネットで調べると
#最大公約数 import math math.gcd(x, y) #最小公倍数 lcm(x, y) = x * y / gcd(x, y)
3つ以上の最小公倍数は2つづつ再帰的に演算して、
import math from functools import reduce def lcm_base(x, y): return (x * y) // gcd(x, y) def lcm_list(numbers): return reduce(lcm_base, numbers, 1)
これでイケた!!って喜んで提出したらREの嵐。間違っとるらしい。
何がおかしいんやろって考えると、どうも最大公約数に使ったmathのgcd(x,y)は
python3.5以降でのサポートだが、AtCorderのはpython3.4.3ってのが原因っぽい。
3.4環境でgcd(x,y)が入ってるfractionsをimprortして見たけど、何かおかしいらしくエラー。
手元のPCでは3.4環境での確認なんて出来ないしw
観念して、ユークリッドの控除法を利用してgcd(a,b)を定義し直して提出したら何とかAC!通った!
morizyun.github.io
修正+修正ミスでのペナルティー×3で30分くらい時間伸びたけど、とりあえずC問題初めて解けて満足。
Dは書き出して行って何となーく方向性のイメージは出来たけど、プログラム書き上げる時間は無くて終了。
まあ、まだまだ修行が必要ですね〜
終わってから他の人のC問題の回答見てると、なんか異様に回答が短い人がちらほら。
たとえばこんな感じの
n=int(input()) a=list(map(int,input().split())) print(sum(a)-n)
え、最小公倍数とか必要なかった?入力2行に出力1行?ってどういうこと?って思ったんですけど、
余りの最大値は割った数-1だから、割った数の合計値から「割った数」の数(与えられるn)を引けば出るんですね。
公式解答も同じ。
全然気が付かなかった・・・
とりあえず、今回はこんな感じ。復習にもなって良いから毎回書いていこう!目指せ水色ランク!