水面下の夢

競プロやイラストに興味があります.メインブログがここ.同人サークル「かのらぶ」のページはこっち( https://yumechi0525.amebaownd.com ).ブログアイコンはYaQ(@8_9_00)さんから.

yukicoder 107 に参加しました

魔法陣は実装しきれてないので,できたところまでで.

No.216 FAC

問題

No.216 FAC - yukicoder

回答

#28972 No.216 FAC - yukicoder

先に断っておきますが,あまりよいコードではないと思います...
Dictionaryで点数が入った人と点数を数えておいて,最後に一番点数の高い人を求めて,出力ですね.

同率トップでもYESである点に注意.そこが若干厄介だと思います.
私は迷った挙句,ディクショナリの中身を全部確認することにしました.それが確実だと思ったので….

N = int(input())
progli = list(map(int, input().split()))
scoreli = list(map(int, input().split()))
scoremap = {0:0}
for i in range(N):
    if scoreli[i] in scoremap:
        scoremap[scoreli[i]] += progli[i]
    else:
        scoremap.update({scoreli[i]:progli[i]})

maxid = 0
maxval = scoremap[0]
for k, v in scoremap.items():
    if maxval < v:
        maxval = v
        maxid = k

print("YES" if maxid == 0 else "NO")

変数名をもう少しかっこよくしたい...

NO.217 魔法陣

問題

No.217 魔方陣を作ろう - yukicoder

これ解説することもないんですよね,ただWikipediaに書いてあるアルゴリズムを元に実装するだけなので….
ただ,私は実装しきれなかったので,まだまだです….行列とかは頭がいたーい.

奇数の部分だけ完成しました.テストしても通ってるみたい.参考までにどうぞ.

N = int(input())
if N % 2 == 1:
    table = [[0 for _ in range(N)] for i in range(N)]
    putter = N // 2
    counter = 1
    for i in range(N):
        for j in range(N):
            table[(N - j + i * 2) % N][putter] = counter
            counter += 1
            putter += 1
            if putter >= N:
                putter = 0
        putter -= 1

    for elem in table:
        print(" ".join(list(map(str, elem))))


続きは気が向いた時に実装します.