Codeforces 433 C Ryouko's Memory Note

来源:互联网 发布:如何查看ubuntu分区 编辑:程序博客网 时间:2024/05/16 18:45

存下每个数旁边的数字

将 i 旁边的数中从小到大排序取中位数

将 i 替换 中位数

算翻的页数

求出 ans值与mi比较大小

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <string>#include <vector>using namespace std;const int N = 100000+10;vector<int>ber[N];__int64 minn(__int64 a,__int64 b){return a<b?a:b;}int main(){int n,m,i,j;__int64 sum=0;int a[N];scanf("%I64d%I64d",&n,&m);for(i=0;i<m;i++){scanf("%I64d",&a[i]);}for(i=1;i<m;i++){sum+=abs(a[i]-a[i-1]);if(a[i]!=a[i-1]){ber[a[i]].push_back(a[i-1]);ber[a[i-1]].push_back(a[i]);}}__int64 mi=sum;for(i=1;i<=n;i++){vector<int> x=ber[i];if(x.size()==0)continue;sort(x.begin(),x.end());int po=x[x.size()/2];__int64 ans=sum;for(j=0;j<x.size();j++){ans+=abs(po-x[j])-abs(i-x[j]);}mi=minn(mi,ans);}printf("%I64d\n",mi);return 0;}


0 0
原创粉丝点击