結果
問題 | 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=0 ans1=0 for x in a: ans0-=abs(x-x0) ans1-=abs(x-x1) return min(ans0,ans1) l,r=0,k # [l,r):+1にする箇所 tmp=0 for 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+1 ans=min(ans,tmp) return ans if __name__=='__main__': n,k=map(int,input().split()) a=list(map(int,input().split())) ret1=main1(n,k,a) print(ret1)