結果
| 問題 | 
                            No.366 ロボットソート
                             | 
                    
| コンテスト | |
| ユーザー | 
                             aka_satana_ha
                         | 
                    
| 提出日時 | 2017-12-04 23:55:23 | 
| 言語 | Python3  (3.13.1 + numpy 2.2.1 + scipy 1.14.1)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 259 ms / 2,000 ms | 
| コード長 | 1,829 bytes | 
| コンパイル時間 | 84 ms | 
| コンパイル使用メモリ | 12,672 KB | 
| 実行使用メモリ | 10,880 KB | 
| 最終ジャッジ日時 | 2024-11-28 04:43:20 | 
| 合計ジャッジ時間 | 1,908 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge5 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 23 | 
ソースコード
N,K=[int(i) for i in input().split()]
a=[int(i) for i in input().split()]
#K個のリストを作ってそれらをバブルソートすると考える
#その後それらの要素の同インデックスで大小関係を比較する
lists=[[] for i in range(K)]
for i in range(K):
    index=i%K
    while(1):
        if index>=N:
            break
        lists[i].append(a[index])
        index+=K
# print(lists)
#各リストのバブルソートと回数の計算
move_count_list=[0 for i in range(K)]
for i in range(K):
    sort_list=lists[i]
    #バブルソート
    move_count=0
    for j in range(len(sort_list)):
        for k in range(len(sort_list)-j-1):
            if sort_list[k] > sort_list[k+1]:
                tmp = sort_list[k]
                sort_list[k] = sort_list[k+1]
                sort_list[k+1] = tmp
                move_count+=1
            # print(j,k,sort_list)
    move_count_list[i]=move_count
# print(move_count_list)
#各リストのインデックスを比較
isOK=True
last_num=0
#N/K>=1のときは全てのリストに値が入っている
for i in range(int(N/K)):
    for j in range(K-1):
        small_list=lists[j]
        big_list=lists[j+1]
        if j==0:
            if last_num>=small_list[i]:
                isOK=False
                break
        if small_list[i]>=big_list[i]:
            isOK=False
            break
        if j==K-2:
            last_num=big_list[i]
    if isOK==False:
        break
#N/K==0のときはN%Kだけ大小比較をする
for j in range(N%K-1):
    small_list=lists[j]
    big_list=lists[j+1]
    if j==0:
        if last_num>=small_list[int(N/K)]:
            isOK=False
            break
    if small_list[int(N/K)]>=big_list[int(N/K)]:
        isOK=False
        break
ans=sum(move_count_list) if isOK==True else -1
print(ans)
            
            
            
        
            
aka_satana_ha