ABC335 python Atcoderの記録

問題はこちら
4完

A
最後の一文字を削除し、4に変更する

S = input()
print(S[:(len(S)-1)] + "4")


B
全探索し、ソート後出力

N = int(input())
list_result = []
for a in range(0,22):
    for b in range(0,22):
        for c in range(0,22):
            if a+b+c <= N:
                list_result.append(str(a) + ' ' + str(b) + ' ' + str(c))
# sort
print('\n'.join(map(str, list_result)))


C
頭の位置履歴がわかれば胴体の位置を計算できる。
パーツiのt回移動後の位置をC(i,t)とすると、C(i+1,t+1) = C(i,t)= C(i-1,t-1)=... = C(1,t-i+1)。
t-i+1 が負=負の回数移動ととらえ、辞書にあらかじめ追加しておく。

import copy
N, Q  = list(map(int, input().split()))
dict_coor_head = {i: [-i+1, 0] for i in range(-N+1, 1)}
coor_head = [1,0] # 頭の最初の位置
t = 0 # クエリ1の累積回数

# query
for i in range(Q):
    x, y = input().split()
    #
    if int(x) == 1:
        t += 1
        if y == "R":
            coor_head[0] += 1
        if y == "L":
            coor_head[0] -= 1
        if y == "U":
            coor_head[1] += 1
        if y == "D":
            coor_head[1] -= 1
    # add coor_head
    dict_coor_head[t] = copy.deepcopy(coor_head)

    #
    if int(x) == 2:
        y = int(y)
        print(*dict_coor_head[t-y+1])


D
1~N2を渦巻き状に配置。その後、N2をTに置き換える。

N = int(input())
def print_number_grid(N):
    grid = [[0 for _ in range(N)] for _ in range(N)]

    center = N // 2
    current_number = 1

    for layer in range(center + 1):
        for i in range(layer, N - layer):
            grid[layer][i] = current_number
            current_number += 1

        for i in range(layer + 1, N - layer):
            grid[i][N - layer - 1] = current_number
            current_number += 1

        for i in range(layer + 1, N - layer):
            grid[N - layer - 1][N - i - 1] = current_number
            current_number += 1

        for i in range(layer + 1, N - layer - 1):
            grid[N - i - 1][layer] = current_number
            current_number += 1
    # N^2の数値をTをして出力
    grid[N//2][N//2] = "T"

    # 出力
    for row in grid:
        print(' '.join(map(str, row)))

# 数字を配置したグリッドを出力
print_number_grid(N)


E





F