pontz_rwのブログ

プログラミング等の備忘録

AtCoder Beginner Contest 096

AtCoder Beginner Contest 096

A - Day of Takahashi

各月に対して、高橋の日になる月の数と日の数との組み合わせは 1 通りずつです

ab 日において、

  1. a \leqq b の場合、合計 a
  2. a \gt b の場合、合計 a - 1

となります

# coding: utf-8

a, b = [int(i) for i in input().split()]

print(a - 1 if a > b else a)

B - Maximum Sum

A+B+C を最大化するためには、A, B, C の中で最大の整数を 2 倍する操作を k 回繰り返せば良いです

つまり、 A + B + C + \max (A, B, C) \times (2^{k} - 1) で求めることができます

# coding: utf-8

a, b, c = [int(i) for i in input().split()]
k = int(input())

print(a + b + c + max(a, b, c) * (2 ** k - 1))

C - Grid Repainting 2

#のマスの上下左右に#があるか判定すれば良いです

# coding: utf-8

h, w = [int(i) for i in input().split()]
s = [list(input()) for _ in range(h)]
flg = True

for i in range(1, h - 1):
    for j in range(1, w - 1):
        # '#'のマスの上下左右に'#'がない場合、目標を達成することができない
        if s[i][j] == "#" and s[i - 1][j] == s[i + 1][j] == s[i][j - 1] == s[i][j + 1] == ".":
            flg = False

print('Yes' if flg else 'No')

D - Five, Five Everywhere

5 で割って 1 余る素数を列挙すれば良く、これらの素数から 5 個選んだ合計は全て 5 の倍数となります(つまり、合成数です)

# coding: utf-8

n = int(input())
ps = []

# 素数チェック
def isPrime(target):
    for i in range(2, target):
        if target % i == 0:
            return False
    return True

# 5で割って1余る数を55,555まで検証する
for i in range(11, 55555, 5):
    # 素数の場合、数列に加える
    if isPrime(i):
        ps.append(i)
        # 数列の長さがNの場合、処理を抜ける
        if len(ps) == n:
            break

print(*ps)