schedule2019-02-19

Pythonで点数をとりたい。北大・日立新概念コンピューティングコンテスト2018

Atcoderのマラソン型コンテスト北大・日立新概念コンピューティングコンテスト2018に6日目になってやっと参加しました。 現時点(2019-02-19 12:00)でコードを提出した人が100人に満たないようです。

参加の閾値を下がるかと思うので、最低限の点数が取れるPythonのコードをさらします。 品質に関しては灰色コーダーなので察してください。 ご自由にどうぞ。

ソースコード

北大・日立新概念コンピューティングコンテスト2018で正の点数が取りたいを参考にさせていただきました。

def _output(S, L, c, v):
    print(S, L)
    for i in range(L):
        print(len(v[i]), c[i], *v[i])


def _input():
    N, K = list(map(int, input().split()))
    v = [[] for i in range(K)]
    c = [0 for i in range(K)]
    for i in range(K):
        tmp = list(map(int, input().split()))
        c[i] = tmp[1]
        v[i] = tmp[2:]

    return N, K, c, v


def calc(N, K, c, v):
    v_res = []
    c_res = []

    total_c = 0

    for i in range(K):
        if len(v[i]) > 0 and len(v[i]) <= 2:
            v_res.append(v[i])
            c_res.append(c[i])
        else:
            total_c += max(0, c[i])
    v_res.append([])
    c_res.append(max(1, total_c))
    return N, len(v_res), c_res, v_res

def main():
    N, K, c, v = _input()
    S, L, c, v = calc(N, K, c, v)
    _output(S, L, c, v)


if __name__ == "__main__":
    main()

_input()_output()で入出力をしている。 calc()のところでg(X,W)g(X,W)を作成しています。

参考によると次数が0<d20<d \le 2はそのままにして、それ以外はf(X)g(X,W)f(X) \le g(X,W)となるように正の係数と定数の合計を定数として出力しています。

スコアはA,B,Cの合計で4.5E08ぐらいは取れました。

これから

2<d2<dの次数をどうにかしてスコアを伸ばしていきたい。 あと1週間あるのでゆっくり考えていきます。