codeforces C. Ryouko's Memory Note

來源:互聯網
上載者:User

標籤:

題意:給你m個數,然後你選擇一個數替換成別的數,使得.最小。注意選擇的那個數在這m個數與它相同的數都必須替換同樣的數。

思路:用vector記錄每一個數與它相鄰的數,如果相同不必記錄,然後遍曆替換成與它相鄰的多個數的中位元之後的所有數的和取最小就可以。。

 1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 #include <vector> 5 #include <algorithm> 6 #include <cmath> 7 #define maxn 100010 8 #define ll __int64 9 using namespace std;10 const int mod=1000000007;11 const int inf=1<<30;12 13 int n,m;14 ll a[maxn];15 int sum[maxn];16 int p[maxn];17 vector<int>g[maxn];18 19 int main()20 {21     cin>>n>>m;22     ll sum=0,max1=0;23     for(int i=1; i<=m; i++)24     {25         scanf("%I64d",&a[i]);26         max1=max(max1,a[i]);27         if(i==1)continue;28         if(a[i]!=a[i-1])29         {30             g[a[i-1]].push_back(a[i]);31             g[a[i]].push_back(a[i-1]);32             sum+=abs(a[i]-a[i-1]);33         }34     }35     ll ans=sum;36     for(int i=1; i<=max1; i++)37     {38         ll tem=sum;39         if(!g[i].size()) continue;40         sort(g[i].begin(),g[i].end());41         int xx=g[i][g[i].size()/2];42         for(int j=0; j<(int)g[i].size(); j++)43         {44            tem+=(abs(xx-g[i][j])-abs(i-g[i][j]));45         }46         ans=min(ans,tem);47     }48     printf("%I64d\n",ans);49     return 0;50 }
View Code

 

codeforces C. Ryouko's Memory Note

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.