全然ACならなくて10日間ほどブチ切れてました。
346は土曜日までに記事書くことにします。
C問題
Dを(A+B)で割った余りがAの範囲にあればいいってことかな?
N , A , B = map(int,input().split())
D = list(map(int,input().split()))
count = True
for i in range(N):
if D[i] % (A+B) <= A:
count = True
else:
count = False
break
print("Yes" if count else "No")
結果WA
開始日を考慮してなかったです。そんな簡単なわけないじゃん
youtubeの解説見たけど2周回して2分探索って??
これはお蔵入りで、、、(@^^)/~~~
D問題
ビット演算と全探索らしい。
ビット演算まだ履修してないんで土曜日までに電車の中でにらめっこします。
def solve(a, b, C):
c = C.bit_count()
# 問題の制約を満たさない場合は解が存在しない
if (a + b + c) % 2 != 0 or a + b + c > 120 or a > b + c or b > c + a or c > a + b:
return -1
# nxy = X, Y の k 桁目が xy であるような k の個数
n00 = 60 - (a + b + c) // 2
n01 = (-a + b + c) // 2
n10 = (a - b + c) // 2
n11 = (a + b - c) // 2
X = Y = 0
for B in range(59, -1, -1):
X *= 2
Y *= 2
if (1 & (C >> B)):
if n10:
X += 1
n10 -= 1
else:
Y += 1
n01 -= 1
else:
if n00:
n00 -= 1
else:
X += 1
Y += 1
n11 -= 1
return X, Y
# 入力
a, b, C = map(int, input().split())
# 解の計算と出力
result = solve(a, b, C)
if result != -1:
print(result[0], result[1])
else:
print(-1)