Port 53

明日のための技術メモ

AtCoder ABC173

AtCoder ABC173解いた分だけまとめ。
AB早解きしてレート冷えるのは回避。Cがbit全探索だったものの、気づけず残念...

目次

解説AC

A. Payment

f:id:saturn-glave:20200709001014p:plain

問題文

やるだけ、とはいえ1000円札でちょうど払える場合と、
お釣りが来る場合で場合分けが必要。

ACしたコード

# coding:utf-8
n = int(input())
if n % 1000 == 0:
    print(0)
else:
    print(1000 - (n % 1000))

B. Judge Status Summary

f:id:saturn-glave:20200709001217p:plain

問題文

countメソッドで集計して、結果を表示するだけ

ACしたコード

# coding:utf-8
n = int(input())
s = [input() for _ in range(n)]
# print(s)

print('AC x ' + str(s.count('AC')))
print('WA x ' + str(s.count('WA')))
print('TLE x ' + str(s.count('TLE')))
print('RE x ' + str(s.count('RE')))

C. H and V

f:id:saturn-glave:20200709001501p:plain

問題文

2重ループでBit全探索。行と列の選択パターンを全列挙し、
各行・列について赤に塗られないところをフラグありとして考える。
赤に塗られているところはこれ以上探索しても仕方ないのでcontinueする。
ちょっと気づけなかった...

解説ACしたコード

# coding:utf-8

h, w, k = map(int, input().split())
c = [list(input()) for _ in range(h)]
# print(c)
black = 0
ans = 0

for bit_h in range(2**h):
    for bit_w in range(2**w):
        black = 0
        for i in range(h):
            if not ((bit_h >> i) & 1):
                continue
            for j in range(w):
                if not ((bit_w >> j) & 1):
                    continue
                if c[i][j] == '#':
                    black += 1
        if black == k:
            ans += 1
print(ans)

port53.hatenablog.com

D問題はまた後日かな...