M-SOLUTIONS プロコンオープン

Jun 3, 2019 22:42 · 1066 words · 3 minute read

出場はできなかったが後から問題を解いた。と言ってもA, Bの2問だけ(*/∇\*)
Cは一応チャレンジはしてみたが...。

A - Sum of Interior Angles

問題

3以上の整数 Nが与えられます。正N角形の内角の和を求めてください。
ただし、度数法を用いて、単位は出力しないでください。
\(3≤N≤100\)

考察

\(N\)角形の内角の和は\(180 * (N - 2)\)で求まる。
ひとつの頂点から対角線を引くと、内部に\(N-2\)個の三角形ができるため。

提出コード

n = gets.strip.to_i

puts 180 * (n - 2)

B - Sumo

問題

高橋君は相撲の大会に参加しています。大会は15日間行われ、高橋君は1日1番の取組を行います。
また、高橋君は8番以上勝つと次の大会にも参加できます。
k日目までの取組が終了しました。高橋君の取組の結果が'o', 'x'からなる長さkの文字列Sで与えられます。
Sのi文字目が'o'ならば高橋君がi日目の取組で勝ったことを、'x'ならば負けたことをそれぞれ表します。
高橋君が次の大会にも参加できる可能性があるならば'YES'を、 そのような可能性がないならば'NO'を出力してください。
1≤k≤15
Sは'o', 'x;からなる長さkの文字列である

考察

その時点で8敗以上していればダメ。
それより負けが少なければ8勝以上できる可能性がある。

提出コード

s = gets.strip

if s.chars.select { |c| c == 'x' }.count >= 8
    puts "NO"
else
    puts "YES"
end

ところで、↑のコードでxの個数をカウントする部分を

s.chars.select { |c| c == 'x' }.count

としているのは冗長で、もっとシンプルに

s.count("x")

と書けることをあとで知った。便利。

C - Best-of-(2n-1)

こんなのもう解けないよ...。
でも「数学から逃げるな」、ということで解説PDFを読みながらなんとかコードを書いてみよう。

問題

高橋君と青木君がゲームをします。 どちらかが合計で\(N\)回勝つまでゲームを繰り返し行います。

\(1\)回ゲームを行ったとき、高橋君が勝つ確率は\(A%\)、青木君が勝つ確率は\(B%\)、どちらも勝たず引き分けとなる確率は\(C%\)です。
ゲームが行われる回数の期待値を求めて、以下のように出力してください。

求める期待値は互いに素な整数\(P\), \(Q\)を用いて\(P/Q\)と表せます。
\(R×Q≡P (\bmod 10^9+7)\)となる\(0\)以上\(10^9+6\)以下の整数\(R\)を出力してください。
(この問題の制約下で、このような\(R\)は必ず一意に存在します。)

\(1≤N≤100000\)
\(0≤A,B,C≤100\)
\(1≤A+B\)
\(A+B+C=100\)
入力はすべて整数である

考察

いややっぱこれむずすぎる。今後の課題とさせていただきあmす。