結果
問題 | No.1391 ±1 Abs Sum |
ユーザー |
![]() |
提出日時 | 2023-05-22 08:04:19 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 432 ms / 2,000 ms |
コード長 | 785 bytes |
コンパイル時間 | 1,402 ms |
コンパイル使用メモリ | 82,400 KB |
実行使用メモリ | 114,228 KB |
最終ジャッジ日時 | 2024-12-22 03:59:46 |
合計ジャッジ時間 | 9,983 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 34 |
ソースコード
import sysinput = sys.stdin.readlineN,K=map(int,input().split())A=list(map(int,input().split()))S=[0]for a in A:S.append(S[-1]+a)plus=Kminus=N-Kdef calc(i,j):a=A[i]ANS=S[i+1]-a*(i+1)ANS+=a*(N-i-1)-(S[-1]-S[i+1])if j+K-1<=i:ANS+=2*(a*K-(S[j+K]-S[j]))elif j>=i:ANS+=2*(S[j+K]-S[j]-a*K)else:ANS+=2*(a*(i-j)-(S[i]-S[j]))ANS+=2*(S[j+K]-S[i]-a*(j+K-i))return ANSLANS=1<<100for i in range(N):MIN=0MAX=N-Kwhile MAX>MIN+5:mid1=MIN+(MAX-MIN)//3mid2=MIN+(MAX-MIN)//3*2if calc(i,mid1)<calc(i,mid2):MAX=mid2else:MIN=mid1for j in range(MIN,MAX+1):LANS=min(LANS,calc(i,j))print(LANS)