結果
問題 | No.1391 ±1 Abs Sum |
ユーザー |
![]() |
提出日時 | 2021-02-12 22:52:04 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 29 ms / 2,000 ms |
コード長 | 4,858 bytes |
コンパイル時間 | 3,601 ms |
コンパイル使用メモリ | 198,536 KB |
最終ジャッジ日時 | 2025-01-18 19:21:13 |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 34 |
ソースコード
//#include <atcoder/all>//using namespace atcoder;//using mint = modint;#include <bits/stdc++.h>#define int long long#define sint signed#define endl "\n" // fflush(stdout);#define ALL(v) (v).begin(),(v).end()#define Vi vector<int>#define VVi vector<Vi>#define VVVi vector<VVi>#define Vm vector<mint>#define VVm vector<Vm>#define Vs vector<string>#define Vd vector<double>#define Vc vector<char>#define Pii pair<int,int>#define Pdd pair<double,double>#define VPii vector<Pii>#define Tiii tuple<int,int,int>#define VTiii vector<Tiii>#define PQi priority_queue<int>#define PQir priority_queue<int,vector<int>,greater<int>>#define pb push_back#define mp make_pair#define mt make_tuple#define itos to_string#define stoi stoll#define FI first#define SE second#define cYES cout<<"YES"<<endl#define cNO cout<<"NO"<<endl#define cYes cout<<"Yes"<<endl#define cNo cout<<"No"<<endl#define cyes cout<<"yes"<<endl#define cno cout<<"no"<<endl#define sortr(v) sort(v,greater<>())#define rep(i,a,b) for(int i=a;i<b;i++)#define repeq(i,a,b) for(int i=a;i<=b;i++)#define repreq(i,a,b) for(int i=a;i>=b;i--)#define dem(a,b) ((a+b-1)/(b))#define INF 3000000000000000000 // 3.0*10^18#define MAX LLONG_MAX#define PI acos(-1.0L)using namespace std;/* debug */template <typename T>ostream& operator<<(ostream& os,const vector<T> &V){int N=V.size();if(N==0){os<<'.';return os;}rep(i,0,N-1){os<<V[i]<<' ';}os<<V[N-1];return os;}template <typename T>ostream& operator<<(ostream& os,const vector<vector<T>> &V){int N=V.size();rep(i,0,N-1)os<<V[i]<<endl;os<<V[N-1];return os;}template <typename T,typename S>ostream& operator<<(ostream& os, pair<T,S> const&P){os<<P.FI<<' '<<P.SE;return os;}//ostream& operator<<(ostream& os, mint const&M){os<<M.val();return os;}/* useful */template<typename T>void Vin(vector<T> &v){int n=v.size();rep(i,0,n)cin>>v[i];}int scomb(int n, int r){if(r<0||r>n)return 0;if((n-r)<r)r=n-r; // nCrint a=1;for(int i=n;i>n-r;--i){a=a*i;}for(int i=1;i<r+1;++i){a=a/i;}return a;}int digit_sum(int n){int ret=0; while(n>0){ret+=n%10;n/=10;}return ret;}int digit(int k,int i){string s = itos(k);return s[s.size()-i]-'0';}template<typename T>void press(T &v){v.erase(unique(ALL(v)),v.end());}int SMALLER(Vi &a,int x){return lower_bound(a.begin(),a.end(),x)-a.begin();}int orSMALLER(Vi &a,int x){return upper_bound(a.begin(),a.end(),x)-a.begin();}int BIGGER(Vi &a,int x){return a.size()-orSMALLER(a,x);}int orBIGGER(Vi &a,int x){return a.size()-SMALLER(a,x);}int COUNT(Vi &a,int x) {return upper_bound(ALL(a),x)-lower_bound(ALL(a),x);}int maxind(Vi &a){return max_element(ALL(a))-a.begin();}int minind(Vi &a){return min_element(ALL(a))-a.begin();}template<typename T>bool chmax(T &a,T b) {if(a<b){a=b;return 1;}return 0;}template<typename T>bool chmin(T &a,T b) {if(a>b){a=b;return 1;}return 0;}/*Vi zip(Vi b){int Z=b.size();Pii p[Z+10];int a=b.size();Vi l(a);for(int i=0;i<a;i++)p[i]=mp(b[i],i);sort(p,p+a);int w=0;for(int i=0;i<a;i++){if(i&&p[i].first!=p[i-1].first)w++;l[p[i].second]=w;}return l;}*///Vi vis(Vi &v){Vi S(v.size()+1);rep(i,1,S.size())S[i]+=v[i-1]+S[i-1];return S;}//const int MOD = 998244353;const int MOD = 1000000007;const double EPS = 1e-10;void init(){cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);cout<<fixed<<setprecision(12);//mint::set_mod(MOD);}/************************************ START ************************************/void sol() {int n,K;cin >> n >> K;Vi a(n);Vin(a);if(n == 1) {cout << 0 << endl;return;}if(K == 0) {int now = a[0];int ans = 0;rep(i,0,n) {ans -= abs(a[i]-now);}int ans2 = 0;now = a.back();rep(i,0,n) {ans2 -= abs(a[i]-now);}cout << min(ans,ans2) << endl;return;}if(K == n) {int now = a[n/2];int ans = INF;int pre = 0;rep(i,0,n) {pre += abs(a[i]-now);}chmin(ans,pre);now = a[n/2-1];pre = 0;rep(i,0,n) {pre += abs(a[i]-now);}chmin(ans,pre);cout << ans << endl;return;}int ans = INF;int po = n-K;int indr = n-po,indl = 0;int a0 = a[0];int sum = 0;int L=0,R=0,Lct=0,Rct=0;rep(i,0,n) {a[i] = abs(a[i]-a0);sum += a[i];}repreq(i,n-1,n-po) {R += a[i];Rct++;}int nw = 0;int ll=0,rr=n;rep(i,0,n) {int sa = abs(nw-a[i]);sum -= sa*rr;sum += sa*ll;rr--;ll++;while(indr < n && abs(a[indl]-a[i]) > abs(a[indr]-a[i])) {R -= a[indr];L += a[indl];indl++;indr++;Lct++;Rct--;}int pre = sum;int lll,rrr;rrr = abs(R - Rct*a[i]);lll = abs(L - Lct*a[i]);pre -= (rrr+lll)*2;chmin(ans,pre);nw = a[i];}//cout << a << endl;cout << ans << endl;}signed main() {init();sol();return 0;}