結果
問題 |
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 sys input = sys.stdin.readline N,K=map(int,input().split()) A=list(map(int,input().split())) S=[0] for a in A: S.append(S[-1]+a) plus=K minus=N-K def 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 ANS LANS=1<<100 for i in range(N): MIN=0 MAX=N-K while MAX>MIN+5: mid1=MIN+(MAX-MIN)//3 mid2=MIN+(MAX-MIN)//3*2 if calc(i,mid1)<calc(i,mid2): MAX=mid2 else: MIN=mid1 for j in range(MIN,MAX+1): LANS=min(LANS,calc(i,j)) print(LANS)