TonamiLog

ゆるキャン△とスノーボードとオタク

ABC128(3完)

ハロートナミです。
ABC128やりました。ひどいペースで3完しました。
昨日との差がありすぎる

ネタバレがあります。

A

考え

いつもの感じ

書いたソース
A,P = map(int,input().split())

print((P+A*3)//2)

なんかこう、一番簡単な問題らしい簡単さだなと思いました

B

考え

えーなんか日本語が難しい。実装もBの割にめんどうな気がする
都市名でソートした後、都市ごとにソートをする

書いたソース
N = int(input())
sp = {}
for i in range(1,N+1):
    s, p = input().split()
    p = int(p)
    if s in sp:
        sp[s].append((p,i))
    else:
        sp[s] = [(p,i)]

sp = sorted(sp.items(), key=lambda x:x[0])

for x in sp:
    s, v = x
    v.sort(key=lambda x:x[0], reverse=True)
    for p,i in v:
        print(i)

えーほんとにこんな複雑なの?と思わないでもない
でも他に思いつかなくて……

C

考え

多分最悪でも2^10=1024回パターンぐらいしかないので全探索が出来そう。
全探索のうまい書き方が分からん。1と0だし2進数とか使って良い感じに出来るか?出来んな~を30分ぐらいやりました

書いたソース
import itertools
N,M = map(int,input().split())
ks = []
for _ in range(M):
    ks.append(input().split())

pList = list(input().split())
result = 0
was = []
cases = list(itertools.product(['1','0'], repeat=N))
for case in cases:
    light = 0
    for p,x in zip(pList,ks):
        k = x[0]
        s = x[1:]
        oncount = 0
        for c in s:
            if case[int(c)-1] == '1':
                oncount += 1
        if oncount%2 == int(p):
            light += 1
    if light == M:
        result += 1
print(result)

全パターンをitertoolsで吐けるのを思いつくまでに30分以上かかったのが敗因という感じがする

D

考え

え……?(思考停止)
全探索風味のやつしか思いつけなかった。しかも時間が間に合わず終了6秒後に提出してLTEでした。むずないこれ

書いたソース
import copy

N,K = map(int,input().split())
vList = [int(x) for x in input().split()]

def dfs(vv, DD, k):
    v = copy.deepcopy(vv)
    D = copy.deepcopy(DD)
    value = sum(v)
    if k == 0:
        return value
    if len(D) > 0:
        v.extend([D[0]])
        a = dfs(v, D[1:], k-1)
        v = v[:-1]
        v.extend([D[-1]])
        b = dfs(v, D[:-1], k-1)
        v = v[:-1]
    else:
        a = 0
        b = 0
        
    if len(v) > 0:
        m = [min(v)]
        idx = v.index(m[0])
        del v[idx]
        D.extend(m)
        c = dfs(v, D, k-1)
        D = D[:-1]
        m.extend(D)
        d = dfs(v, m, k-1)
    else:
        c = 0
        d = 0
    return max(value, a,b,c,d)

result = dfs([], vList, K)
print(result)

ひどい。

EとF

考え

見てすらいない(よくない)

結果

f:id:Thiroyuki:20190526234409p:plain

f:id:Thiroyuki:20190526234433p:plain
いやー50分かけて3完とか終わりでしょと思ったんですがそこまでダメージ無く終われました。まあ下がってんですけど
水色なれるかなと思ったけどそんなに甘くなかった。というか今回BとCが難しすぎませんか?そうでもないか はい
はー次のABCは頑張って水色なりたいですね
おわり