競プロ弱者の解答

競プロ弱者の成長記録

ABC144:水色競プロerのムーブ備忘録(爆死)

今回はABC144のムーブ記録です。

後で意味を持つのですが、syunsukeはpythonerです。

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

〇制限時間  100分

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

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

〇今回の方針 

    (いつもの方針です)

 基本前から解く。

 ただし、はまったら順位表を確認して、次の問題を通す人が多ければ、次の問題を先に解く。

コンテスト開始!

A:if 文で、AもBも1~9の範囲ならAxBそうでなければ-1を出力

  って問題文開くの速くなりましたか?

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

  if A<=9 and B<=9:

    print(A*B)

  else:

    print(-1)

  1:34 AC

B:あれ?間違えてA問題を開いた・・やり直し

  ??やり直し

  ???!

  問題文の出だしが紛らわしい!

  for文を2重でまわせば良いですね。

  

  N=int(input())

  for i in range(1,10):

   for j in range(1,10):

    if N==i*j:

     print("Yes")

     exit()

  print("No")

  

 2重のforの積にNがあればYesを出力してそこで終わり

 なければ最後にNoを出力して終わり

 3行目のforは

  for j in range(i,10):

 とすれば高速化できますが、そもそも10^2しかないループなので、高速化する必要はな さそうですね。

 

 3:12 AC 

 

C:全部の約数を作る

  全部の約数に対し、

  約数+(N÷約数)-2を調べて、一番小さいものが正解

 15:04 AC

 

D:xをaで割って、2次元で考える

  水の面積がaxbの半分より大きいか、半分以下かで条件分岐

f:id:syunsuk1024:20191028004706j:plainこんな感じなら黒い部分を

  

f:id:syunsuk1024:20191028004640j:plainこんな感じなら白い部分を計算

 角度のライブラリは良くわからないけど、3角形の3点の座標か、3辺の長さを求めれば、きっとよいライブラリか競プロの問題の解説にでもよいコードがあるはず。(ラジアンだと面どいから、度単位のがあると良いな)

 

3角形の3辺の長さは簡単。

黒い部分の面積がaxbの半分以下であれば、面積をSとすると

・b

・S*2/b

・((b)^2+(S*2/b)^2)^0.5

で求められる。

また、3点の座標も、直角部分を(0,0)にあわせれば、残りは(0,b)と(2*S/b,0)

あとは「python 3角形 角度」で検索すれば終わり

 

・・とはなりませんでした。

良いライブラリが見つかりません

良い記事もみつけられず1時間このまま

なんとか見つけた記事を参考に

最後のいくつかのケースでWA

一番最後のケースでRE

そのまま爆死

参加者の半数が解く問題を解けなければ600台のパフォも出ます。

 

後でわかったことですが、

アークタンジェントを使えば良かったんですね。

なぜいきなり「良いライブラリがあるはずだから探せ」と考えたのか理解できません。

アークタンジェントが出てこなくても、検索に「python」を入れる意味はないですね。

公式があって、C++で実装してあるなら、pythonに書き換えるorいっそのことC++で書くでも良いわけで。

 

ちなみに、E問題はぱっと見2分探索で、実際に2分探索で解けるようです。

きちんと実装までできたかはわかりませんが、Dを早めにあきらめれば、Eを解けたかもしれません。ここも判断ミスです。

 

結局A,B,C 3完 15:04で0ペナ (Dは通せていないのでペナルティ扱いみなりません)

2992位でパフォ665  レートは-50で1243

久しぶりの茶パフォ

今回の反省

ハマった時の対応が悪すぎる。

あきらめて先に進む基準を決める!

冷静に検索キーワードを選ぶ、言語にこだわりすぎない(簡単なものならC++でも良い)