競プロ弱者の解答

競プロ弱者の成長記録

ABC148:水色競プロerのムーブ備忘録(今回は参考になるムーブ)

前回(ABC147)で水色に復帰したので、タイトルは水色競プロerの・・に戻ってます。

〇コンテスト名:ABC148

〇配点          A:100 B:200 C:300 D:400 E:500 F:600

〇制限時間  100分

 配点も時間もいつも通りのABCです。

〇コンテスト開始時のsyunsukeのレート 1217

〇今回の方針 

 基本的に前から解く。

 ハマってしまったら、飛ばして次の問題に進むが、順位表を時々チェック。

 そして、解いた人が多い問題を解く。

 

コンテスト開始!

A:1~3までループを回し、A,Bが含まれていなければ出力、強制終了

 A,B=map(int,input().split())

    for i in range(1,4):

   if A!=i and B!=i:

   print(i)

   exit()

 一応テストケースを確認して、テストケースが通るのを確認できたので提出

 2:21 AC

B:空白の文字列を用意しておいて、あとは指示通りSとTから順番にくっつければ良いですね。

 N=int(input())

 S,T=input().split()

 ANS=""

 for i in range(N):

  ANS+=S[i]

  ANS+=T[i]

 print(ANS)

 5:01 AC

 C:最小公倍数の定義そのままですね。

 ただ、AtCoderPythonを使用する場合

 「gcdのライブラリは極力使わない」

 です。

 Pythonのgcdは古バージョンと新しいバージョンでは、入っている場所が違い、それを知らないと手元の環境でACなのに、いざ提出するとRE!なんてことになりかねません。また、どこかのタイミングでAtCoderPythonもバージョンが上がるでしょう。その時また困ったことにならないよう、gcdは自分で用意しておくか、その都度作るのがおすすめです。

 それと、A,Bの最小公倍数は、A*B//gcd(A,B)を知っていれば、やるだけ。

 A,B=map(int,input().split())

 def lcm(X,Y):

  if Y>X:

   X,Y=Y,X

  while X%Y!=0:

   X,Y=Y,X%Y

  return Y

 print(A*B//lcm(A,B))

 8:41 AC

D:左から順に1を探す、見つかればその場所からつぎは2を、3をと繰り返し、見つけた数をカウント。

 もし1が見つからなければ-1。みつかれば、N-カウント数+1を出力

 13:23 AC

E:強いテストケースがあって助かりました。

 まずは、テストケースの通り、奇数の時は0

  偶数の時、10が出れば0が1個増える

  余裕ですね。

  テストケースで確認して・・合いません。

  100までシミュレートして・・

  50の時にずれますね。

 50の数も数えれば良いんですね。

  余裕です。

  Nを50で割って小数点以下切り捨て

  それと①を足せば良いんですね。

  テストケースで確認して・・合いません。

  500までシミュレートして・・

  250の時にずれますね。

  なぜ250?

  50x5!

  なるほど、10x5の〇乗のときも数えないといけませんんね。

 ②を踏まえて10x5^1,10 x 5^2,10 x 5^3 の数も足せば、

  テストケースに通りますね。

  41:49 AC

  しかし、コンテストが終わって考えてみれば、

  N//10とN//50,N//250,N//1250,N//6250・・・を足したら答えになるんでしょう?

  後でゆっくり考えましょう。

F:①高橋くんの最初の位置を根とした木を作成し、根から各頂点までの距離を求める。ただし、青木くんの位置より先は除外

 ②青木くんの最初の位置を根とした木を作成し、根から各頂点までの距離を求める。ただし、①で除外した点は使用しない。

 ③①で求めた距離<②で求めた距離 を満たす中で、②で求めた距離が最も長くなる点を選択

 ④③で求めた点の距離-1が答え

 75:24 AC

 ACが出た後に気づきましたが、①で青木くんの位置より先を除外する必要はなさそうですね。

 

結局75:24でノーペナ全完!

522位でパフォ1650 レートは+52で1269になりました。

 

今回は何といってもEのシミュレーションが良かったです。

とっさに、0が増えるときだけ出力するコードを書いて走らせる。

どこで増えたか見て、考える。

良いムーブで良い結果が出たコンテストでした。

良いムーブを忘れないように記録して、今回の記事は終わりです。