AtCoder Beginner Contest 096

はい。
https://atcoder.jp/contests/abc096

A - Day of Takahashi

Python3

a,b=map(int,input().split())
print(a if a<=b else a-1)

a<=bならx月x日が発生しているのでa。a>bならx月x日が発生前なのでa-1となると思う。

B - Maximum Sum

Python3

l=[int(i) for i in input().split()]
k=int(input())
ans=chk=0
for i in range(3):
    tmp=l[i]
    for j in range(k):
       tmp*=2
    ans=max(ans,sum(l)+tmp-l[i])
print(ans)

シミュして全部調べる以外に思いつかなかったのでシミュして解決。

C - Grid Repainting 2

Python3

xy=[(1,0),(-1,0),(0,1),(0,-1)]
 
h,w=map(int,input().split())
l=[]
for i in range(h):
    l.append(input())
for i in range(h):
    for j in range(w):
        if l[i][j]=="#":
            f=0
            for x,y in xy:
                if 0<=(i+y)<h and 0<=(j+x)<w and l[i+y][j+x]=="#": f=1
            if f==0:
                print("No")
                exit()
                
 
print("Yes")

これも実質は全部調べて解決かな。"「上下左右に隣接する2つのマスを選び, 両方黒く塗る」ことしかできません. ただし, すでに黒く塗られているマスを選ぶこともでき, この場合マスの色は黒のまま変わりません." なので隣接する黒マスがないようなのは出来ない塗り方、黒マスどうして隣接してれば手数はかかるとしても出来る塗り方と判定で大丈夫だと思う。

D - Five, Five Everywhere

PyPy3

def prime_t(t):
    i=2
    while i**2<=t:
        if t%i==0:
            return 0
        i+=1
    return 1
 
def prime_list(tt):
    p_list=[]
    for i in range(2,tt+1):
        if prime_t(i):
            p_list.append(i)
    return p_list
d=prime_list(55555)
ans=[i for i in d if i%10==1]
n=int(input())
print(*ans[:n])

異なる5つの素数を使って合成数になるようにする。方針が間違っていて自力ではAC出来ませんでした。自分で考えていた方針では素数5つの和で素数になるものがそれほど多くなかったらその5つを省けばいいかなと思ったのですがコレだと使う使わない素数の選び方を決めることが出来ませんでした。
解法としてはとても単純で末尾が1の素数だけを選べば良いというものでした。末尾が1の素数の集まりの中から5つ選んだ総和は末尾が5の2桁以上の数になります。末尾が5の2桁以上の数は必ず5で割り切れる合成数です。なので素数を列挙してから末尾が1のものだけを抽出すれば大丈夫というものでした。