0
0

ABC_347

Last updated at Posted at 2024-04-02

全然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)
0
0
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
0