結果
問題 | No.1391 ±1 Abs Sum |
ユーザー |
|
提出日時 | 2021-02-13 11:16:01 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 129 ms / 2,000 ms |
コード長 | 943 bytes |
コンパイル時間 | 151 ms |
コンパイル使用メモリ | 82,048 KB |
実行使用メモリ | 104,192 KB |
最終ジャッジ日時 | 2024-07-20 14:04:37 |
合計ジャッジ時間 | 4,822 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 34 |
ソースコード
def main1(n,k,a):if k<=1:x0=a[0]x1=a[-1]ans0=0ans1=0for x in a:ans0-=abs(x-x0)ans1-=abs(x-x1)return min(ans0,ans1)l,r=0,k# [l,r):+1にする箇所tmp=0for i in range(n):if 0<=i<r:tmp+=abs(a[i]-a[0])else:tmp-=abs(a[i]-a[0])ans=tmp# x=a[i]とし、a[i]から離れている箇所から順に-1にするfor i in range(1,n):tmp-=l*(a[i]-a[i-1])tmp+=(i-l)*(a[i]-a[i-1])tmp-=(r-i)*(a[i]-a[i-1])tmp+=(n-r)*(a[i]-a[i-1])# a[i]から近いk個を+1にし、他は-1# a[l]とa[r]を比較し、a[l]が近いなら変わらず。a[r]が近いならl+=1,r+=1する。while r<n and abs(a[l]-a[i])>=abs(a[r]-a[i]):tmp-=2*(a[i]-a[l])tmp+=2*(a[r]-a[i])l,r=l+1,r+1ans=min(ans,tmp)return ansif __name__=='__main__':n,k=map(int,input().split())a=list(map(int,input().split()))ret1=main1(n,k,a)print(ret1)