0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AtCoderBeginnerContest175復習&まとめ(前半)

Posted at

AtCoder ABC175

2020-08-15(土)に行われたAtCoderBeginnerContest175の問題をA問題から順に考察も踏まえてまとめたものとなります.
前半ではABCまでの問題を扱います.
問題は引用して記載していますが,詳しくはコンテストページの方で確認してください.
コンテストページはこちら
公式解説PDF

A問題 Rainy Season

問題文
AtCoder 町の、ある連続した$3$日間の天気の記録があります。天気の記録は長さ$3$の文字列$S$で表され、$i(1 \leqq i \leqq 3)$日目の天気は$i$文字目が"S"のとき晴れ、"R"のとき雨でした。
天気が雨である日が連続していた最大の日数を求めてください。

解説にも書いてありますが,三日間であれば,8通りしかないので,場合分け書けば通せます.
条件の順番に注意すれば,以下のような場合分けで解けます.

abc175a.py
n = input()
if "RRR" in n:
    print(3)
elif "RR" in n:
    print(2)
elif "R" in n:
    print(1)
else:
    print(0)

B問題 Making Triangle

問題文
$1,⋯,N$の番号がついた$N$本の棒があります。棒$(i(1 \leqq i \leqq N)$の長さは$L_i$です。
このうち、三角形を作ることのできるような長さの異なる$3$本の棒を選ぶ方法は何通りあるでしょうか。
つまり、$3$つの整数$1 \leqq i < j < k \leqq N$の組であって次の$2$つの条件の両方を満たすものの個数を求めてください。
 ・$L_i,L_j,L_k$がすべて異なる
 ・$3$辺の長さが$L_i,L_j,L_k$であるような三角形が存在する

全ての辺が異なる条件は簡単なので,三角形が成り立つ条件に関してですが,$3$辺の長さを$L_i < L_j < L_k$とすると,$L_i + L_j > L_k$のとき三角形が存在します.
最初に$N$本の棒をソートすることで,$N$本から$3$本選んだとき,選ばれた$3$本の中で一番右側が一番大きい値になります.
$N$は100以下なので,時間内に全組み合わせを調べることができます.

abc175b.py
n = int(input())
l_list = list(map(int, input().split()))
l_list.sort()
count = 0
for i in range(0, n - 2):
    for j in range(i + 1, n - 1):
        for k in range(j + 1, n):
            a = l_list[i]
            b = l_list[j]
            c = l_list[k]
            if a == b or b == c or c == a:
                continue
            if a + b > c:
                count += 1
            else:
                break
print(count)

C問題 Walking Takahashi

問題文
数直線上で暮らす高橋君は、今座標$X$にいます。これから高橋君はちょうど$K$回、座標の正または負の方向に$D$移動する行為を繰り返そうと考えています。
より正確には、$1$回の移動では座標$x$から$x+D$または$x−D$に移動できます。
高橋君は、ちょうど$K$回移動した後にいる座標の絶対値が最小となるように移動したいです。
$K$回の移動後の座標の絶対値としてあり得る値の最小値を求めてください。

最初,座標$X$にいますが,求める最小値は座標の絶対値であることから,$X$と$-X$の答えは一致する.
$0 \leqq X$のときを考えると,移動回数$K$に制限がなければ,$X$を$D$で割った余り$T1$か,$T1$から$D$を引いた$T2$のどちらかが答えになる.(座標の絶対値を小さくしたいので,原点近くで行ったり来たりするのがベスト)
まず,$T1$に到達できるかどうかを判定し,到達できない場合は,$X$から移動回数×$D$を引いた値が答えとなる.
$T1$に到達できる場合,必ず$K$回移動しなければならないので,それまでに移動した回数から残りの移動回数を計算し,残りの移動回数が偶数か奇数かで,$T1$か$T2$が決まる.
$T2$は負となるため出力に注意.

abc175c.py
x, k, d = map(int, input().split())
if x < 0:
    x *= -1
t1 = x % d
t2 = t1 - d
n = (x - t1) // d
if k < n:
    print(x - k * d)
else:
    n = k - n
    if n % 2 == 0:
        print(t1)
    else:
        print(-t2)

前半はここまでとなります.
夏休み中ですが,論文が条件付き採録になって回答書作りで忙しいため,後半は時間ができたら書きたいと思います.
最後まで読んでいただきありがとうございました.

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?