AtCorder Beginner Contest 175 に参加しました。
ABCの3問ACでした。
Python3を使用しています。
A問題
まず雨(R)の数を求めます。
今回は連続した雨(R)の数を求めるので、RSRの場合は1と答える場合分けの処理を行います。
3日間の天気しか入力されないため例外は1つ考慮すれば十分です。
import sys
def input():
return sys.stdin.readline()[:-1]
def main():
s=input()
c = s.count("R")
if c == 2 and s[1] == "S":
c += -1
print(c)
if __name__ == "__main__":
main()
B問題
*問題文ではi、j、kを選んだ棒の番号になっていますが、以下の解答では棒の長さになっています。
棒の長さリスト(L)から、3本の棒を選びます。
棒を選ぶ順番は影響しない、かつ長さi,j,kは全て異なるので、i,j,kの順に大きくなると制限します。
さらに選んだ3本の棒で三角形の成立条件
「a+b > c かつ b+c > a かつ c+a > b」
を満たす場合の数を数えます。
import sys
def input():
return sys.stdin.readline()[:-1]
def main():
N = int(input())
L = list(map(int,input().split()))
ans = 0
for i in L:
for j in L:
for k in L:
if i < j and j < k and (i+j) > k and (i+k) > j and (j+k) >i:
ans +=1
print(ans)
if __name__ == "__main__":
main()
C問題
高橋君の行動パターンは大きく2つに分けることができます。
・K回行動してもXから0に到達できない(可能な限り近づいた)
・K回より少ない回数でXから0に到達しており、残った回数で往復して0付近まで戻ってきた
さらに2つ目のパターンは、残った回数が偶数か奇数かで場合分けしています。
import sys
def input():
return sys.stdin.readline()[:-1]
def main():
X,K,D = map(int,input().split())
x = abs(X)
if K * D < x:
ans = x - K * D
else:
shou = x // D
nokori = K - shou
if nokori % 2 == 0:
ans = x % D
else:
ans = abs((x % D) - D)
print(ans)
if __name__ == "__main__":
main()