隙あらば自分語り

とある専門学生が機械学習を学んでいく軌跡を描いたブログ

ABC121

ABC121 感想

初の全完で嬉しいv^^v
f:id:biyt1280350:20190309214020p:plain
時間的にはこんな感じ!!

AGCが延期のため急遽用意された為か全体的に優しいイメージ

A - White Cells

最初見て震えた
何も思いつかなかった死んだと思った

とりあえず方針としては全体の個数から黒くした個数を引くことにする

全体はH×W個ある
まず行から黒くすると、h×W個黒くなる
次に列を黒くするが重複を防がなければならない
1列に白いマスはまだH-h個残っていることから、(H-h)×w個黒くすることになる

よってH×W-h×W-(H-h)×w個が残った白いマスである

H,W = map(int, input().split())
h,w = map(int, input().split())
 
p = H*W
q = h*W+w*(H-h)
 
print(p-q)

B - Can you solve this?

特に思いつかなかったから工夫ゼロ
ただの全探索

N,M,C = [int(i) for i in input().split()]
B = [int(i) for i in input().split()]
 
ans = 0
for _ in range(N):
    A = [int(j) for j in input().split()]
    p = C
    for i in range(M):
        p += A[i]*B[i]
    if p > 0:
        ans += 1
print(ans)

C - Energy Drink Collector

2×N配列を用意して値段と個数を入れる
その配列を値段でソートした後にM個を超えないように買っていくだけ
Bと同様にコードに起こせるかどうかの問題な気がする

N,M = [int(i) for i in input().split()]
 
li = []
for _ in range(N):
    a = [int(i) for i in input().split()]
    li.append(a)
 
li.sort()
 
p = 0
ans = 0
for i in range(N):
    if M > li[i][1]:
        M -= li[i][1]
        ans += li[i][0]*li[i][1]
    else:
        ans += li[i][0]*M
        print(ans)
        exit()

D - XOR World

解けたからというのもあると思うがDとは思えない簡単さだった

2 XOR 3や4 XOR 5の様にN(偶数) XOR N+1の場合は必ず1になる
後はそれが偶数回あるのかどうかを調べればいい

Aが偶数でかつBも偶数で間が偶数回1が出るなら出力はB
1が奇数回なら出力はB XOR 1となる

Aが偶数でBが奇数なら間の1が偶数回の時、出力は0で奇数回の時1となる

Aが奇数でかつBも奇数なら間の1が偶数回の時、出力はAで奇数回の時A XOR 1となる

Aが奇数でBが偶数なら間の1が偶数回の時、出力はA XOR Bで奇数回の時 A XOR B XOR 1となる

長く書いてしまったが実際にノートに実際に書いてみると分かりやすいと思う
自分は解けると思った興奮で、1が偶数回の時を考慮し忘れてしまい1WAを出してしまった

書き忘れたがA=Bの時はAを出力すればいい
コードが冗長になっているので終わったら他の人のを参考にして短くしたい

A,B = [int(i) for i in input().split()]
 
if A == B:
    print(A)
    exit()
p = B-A+1
q = p //2
if A%2 == 0:
    if p%2 == 0:
        if q%2 != 0:
            print(1)
        else:
            print(0)
    else:
        if q%2 != 0:
            print(B^1)
        else:
            print(B)
else:
    if p%2 == 0:
        if q%2 != 0:
            print(A^B)
        else:
            print(A^B^1)
    else:
        if q%2 != 0:
            print(A^1)
        else:
            print(A)