hirohirohirohirosのブログ

地方国立大学に通う情報系学部4年

Atcoder ABC254 振り返り

純粋に気付いたら夜9時過ぎてて泣く泣くバチャ参加でした……

A - Last Two Digits【AC】

 インデックスにマイナスを付けると後ろから数える事が出来て便利です.

N = input()
print(N[-2:])
B - Practical Computing【AC】

 N<30なので,全ての要素で計算しても間に合います.
 まず,[[0]+[1 for _ in range(i)] for i in range(N)]で答えのリストを作っておきます.j=0の時0と決まってるので,そのようにしています.また,j=iの時1と決まっているので,とりあえずj=0以外は1になるように設定します.
 リストを作ったら,全てのi, jについて計算します.aijについて,ai-1, j-1を利用する必要があるので,ijは0から計算しなければ行けません.

N = int(input())
A = [[0]+[1 for _ in range(i)] for i in range(N)]
for i in range(N):
    for j in range(i+1):
        if j == 0 or i == j:
            A[i][j] = 1
        else:
            A[i][j] = A[i-1][j-1] + A[i-1][j]

for a in A:
    print(" ".join(map(str, a)))
C - K Swap【AC】

 K=2の時,どのように入れ替えても1番目の値と2番目の値が入れ替わることはありません.K=2なら入れ替わるのは1, 3, 5, 7...番目の値が入れ替わります.入れ替えは何度も出来るので1, 3, 5, 7...番目の値では完全にソートできます.また,2 ,4, 6, 8...番目の値も同様にソートできます.これを合わせたときに,正しくソートされているか判別できれば良いです.
 pythonでは,[a:b:c]でa番目からb番目までc飛ばしでリストの値を取り出す事が出来ます.よって,cをKとすればKおきの値を取ることが出来ます.このリストに対してソートし,元のリストに値を書き換えます.これをK回繰り返し,全ての値をまとめてソートしたときと値が同じならソート可能,そうでないならソート不可能となります.

N, K  =map(int, input().split())
A = [int(i) for i in input().split()]
sorted_A = sorted(A)
for i in range(K):
    AA = sorted(A[i::K])
    for j, a in enumerate(AA):
        A[K*j + i] = a

if sorted_A == A:
    print("Yes")
else:
    print("No")