名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。アクセス解析のためGAを利用、Googleに情報を送信しています。商品紹介のためAmazonアフィリエイトを利用、Amazonに情報を送信しています。記事に関しては私が書いていない引用文を除いて自由にご利用ください。

ABC045に参加しました

3完。68th。もう少し上行けたはず。



A問題

A: 台形 / Trapezoids - AtCoder Beginner Contest 045 | AtCoder


台形の公式にぶち込む。python2でかいた。

print (input()+input())*input()/2

Submission #875917 - AtCoder Beginner Contest 045 | AtCoder

B問題

B: 3人でカードゲームイージー / Card Game for Three (ABC Edit) - AtCoder Beginner Contest 045 | AtCoder


言われたとおりにシミュレーションする。Python3でかいた。多分繰り返し処理はもう少し綺麗にかけるけど、とりあえずACするために雑にかいた。

a = list(input())
b = list(input())
c = list(input())
current = "a"
while True:
    if current == "a":
        if len(a) == 0:
            print("A")
            break
        else:
            current = a.pop(0)
    elif current == "b":
        if len(b) == 0:
            print("B")
            break
        else:
            current = b.pop(0)
    else:
        if len(c) == 0:
            print("C")
            break
        else:
            current = c.pop(0)

Submission #876284 - AtCoder Beginner Contest 045 | AtCoder

C問題

C: たくさんの数式 / Many Formulas - AtCoder Beginner Contest 045 | AtCoder

プラスを入れていく位置の候補は2 ** (文字列の長さ - 1) 通りあるので、bitを使ってプラスが入った文字列を形成してevalで計算。こういう場合はevalして大丈夫ですから>< Python3でかいた。

def solve():
    n = input()
    ans = 0
    for i in range(2 ** (len(n) - 1)):
        insertcount = 0
        count = 0
        line = list(n)
        j = i
        while j > 0:
            if j & 1 == 1:
                line.insert(1 + count + insertcount, "+")
                insertcount += 1
            count += 1
            j >>= 1
        ans += eval("".join(line))
    print(ans)
 
if __name__=="__main__":
    solve()

Submission #876910 - AtCoder Beginner Contest 045 | AtCoder

D問題

D: すぬけ君の塗り絵 / Snuke's Coloring - AtCoder Beginner Contest 045 | AtCoder

時間内に解けなかったので悔しい。いろいろ解放があるとは思うが、黒塗りになっている場所とその周りに1をたしていき、dictionaryで持っておいて置いて、最後に数え上げる、という方針でAC。3secでよかった。2secなら落ちていた。


注意すべきは端の部分では3x3の三角形が作れないこと。そのため、端の部分にはあらかじめ足さないように処理するとよい。あと0個のものは(正方形が作れる個数 - 1〜9個の黒塗りになっている部分を含んだ正方形の合計個数)で求められるので、わざわざか添え上げる必要が無い。

雰囲気的にO(N)でしか間に合いそうになかったので、うまく思いつくことが出来てよかったが、時間内に通せなかったのが心残り。Python3で解いた。

def solve():
    w, h, n = [int(i) for i in input().split()]
    dic = dict()
    for i in range(n):
        a, b = map(lambda x: int(x) - 1, input().split())
        for j in range(3):
            for k in range(3):
                aj = a + j - 1
                bk = b + k - 1
                if 0 < aj and aj < w - 1 and 0 < bk and bk < h - 1:
                    if (aj, bk) in dic:
                        dic[(aj, bk)] += 1
                    else:
                        dic[(aj, bk)] = 1
    ans = [0 for i in range(10)]
    for v in dic.values():
        ans[v] += 1
    for i in range(10):
        if i == 0:
            print((w - 2) * (h - 2) - sum(ans))
        else:
            print(ans[i])
 
 
if __name__=="__main__":
    solve()

Submission #878283 - AtCoder Beginner Contest 045 | AtCoder




D問題を時間に通せたら非常に良かったんですが。。。反省だなあ。


それとこの前問題を読んだだけのCFを埋めておきたい。(unratedになったやつ)