<题目链接>

题目大意:
给你一堆数字,允许你修改所有相同的数字成为别的数字,不过只能修改一次,问你修改后序列相邻数字的距离和最小是多少。

解题分析:

首先,修改不是任意的,否则那样情况太多了,因为最后只是求序列相邻项差值的绝对值的和,所以我们只需要考虑修改之后能够改变最终答案的情况,因为本题要使差值的绝对值的和最小,所以我们可以利用中位数的性质转化。

 #include <bits/stdc++.h>
using namespace std; #define N int(1e5+7)
typedef long long ll;
vector<int>G[N];
int n,m,a[N]; int main(){
scanf("%d%d",&n,&m);
ll res=;
for(int i=;i<=m;i++){
scanf("%d",&a[i]);
if(i> && a[i]!=a[i-]){ //因为没有必要将相同页数的进行merge
G[a[i]].push_back(a[i-]),G[a[i-]].push_back(a[i]); //如果第i条信息所在页merge为其它页能够造成最终结果改变,就将它们连边,等一下会进行这些情况的考虑
res+=abs(a[i]-a[i-]); //得到初始的差值绝对值之和
}
}
ll ans=res;
for(int i=;i<=n;i++){
ll sz=G[i].size();
if(sz){
ll tmp=res;
sort(G[i].begin(),G[i].end());
int mid=G[i][sz/]; //第i页改为要必要更改的页码(更改后能对最终的结果造成改变的页码)中的中位数
for(int j=;j<sz;j++)tmp+=abs(mid-G[i][j])-abs(i-G[i][j]); //根据中位数的性质,mid-G[i][j]之和,必然小于等于i-G[i][j]之和
ans=min(ans,tmp);
}
}
printf("%lld\n",ans);
}

2019-02-22

CodeForces 433C Ryouko's Memory Note (中位数定理)的更多相关文章

  1. codeforces 433C. Ryouko's Memory Note 解题报告

    题目链接:http://codeforces.com/problemset/problem/433/C 题目意思:一本书有 n 页,每页的编号依次从 1 到 n 编排.如果从页 x 翻到页 y,那么| ...

  2. CodeForces 433C Ryouko's Memory Note-暴力

                                             Ryouko's Memory Note Time Limit:1000MS     Memory Limit:262 ...

  3. codeforces C. Ryouko's Memory Note

    题意:给你m个数,然后你选择一个数替换成别的数,使得.最小.注意选择的那个数在这m个数与它相同的数都必须替换同样的数. 思路:用vector记录每一个数与它相邻的数,如果相同不必记录,然后遍历替换成与 ...

  4. codeforces 434A A. Ryouko's Memory Note(数学)

    题目链接: A. Ryouko's Memory Note time limit per test 1 second memory limit per test 256 megabytes input ...

  5. Codeforces Round #248 (Div. 1) A. Ryouko's Memory Note 水题

    A. Ryouko's Memory Note 题目连接: http://www.codeforces.com/contest/434/problem/A Description Ryouko is ...

  6. Codeforces Round #248 (Div. 2) C. Ryouko's Memory Note

    题目链接:http://codeforces.com/contest/433/problem/C 思路:可以想到,要把某一个数字变成他的相邻中的数字的其中一个,这样总和才会减少,于是我们可以把每个数的 ...

  7. Codeforces Round #248 (Div. 2) C. Ryouko's Memory Note (vector 替换)

    题目链接 题意:给m个数字, 这些数字都不大于 n,  sum的值为相邻两个数字 差的绝对值.求这n个数字里把一个数字 用 其中另一个数字代替以后, 最小的sum值. 分析:刚开始以为两个for 最坏 ...

  8. Ryouko's Memory Note

    题目意思:一个书有 n 页,每页的编号依次从 1 到 n 编排.如果从页 x 翻到页 y,那么|x-y|页都需要翻到(联系生活实际就很容易理解的了).接着有m pieces 的 information ...

  9. Codeforces 433 C. Ryouko&#39;s Memory Note

    C. Ryouko's Memory Note time limit per test 1 second memory limit per test 256 megabytes input stand ...

随机推荐

  1. 2018谷歌I/O开发者大会8大看点汇总 新品有哪些

    2018谷歌I/O开发者大会8大看点汇总 新品有哪些美国科技媒体The Verge近日撰文,列举了在即将召开的2018年谷歌I/O开发者大会上的8大看点,包括Android P.人工智能等等. 以下为 ...

  2. 【CSS】Bootstrap中select2+popover冲突

    网上搜索得到: It changes the position because the position is based on the popover's dimansions and select ...

  3. Java的实验程序之输出单个文件中的前 N 个最常出现的英语单词

    日期:2018.10.11 星期四 博客期:016 题目:输出单个文件中的前 N 个最常出现的英语单词,并输出到文本文件中 在程序运行之前,我试着先写了字符的字母的总结,加载代码如下: //如下是第一 ...

  4. LeetCode(89):格雷编码

    Medium! 题目描述: 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异. 给定一个代表编码总位数的非负整数 n,打印格雷码序列.格雷码序列必须以 0 开头. 例如,给定 ...

  5. django配置一个网站建设

    第一步: 安装数据库MySQL,也可以使用pycharm自带的数据库sqllite,大项目要使用数据库.安装请参考上篇. 数据库在pycharm中驱动设置,setting文件中修改驱动文件密码等信息. ...

  6. hdu1213并查集

    板子题不多说,上代码 #include<iostream> #include<cstdio> #include<cstring> using namespace s ...

  7. Linux/Unix/Mac OS下的远程访问和文件共享方式

    scp -P 20022 src.tar.gz zhouhh@192.168.12.13:/home/zhouhhscp -P 20022 zhouhh@192.168.12.13:/home/zho ...

  8. mac pro 基本使用

    command+空格  调出搜索框 可以输入:网络,就是配置ip等信息 可以输入:终端,就是命令行窗口 可以输入:触控板,可以调节多点触控版 可以输入:系统偏好设置,进行配置 触控板:多点触控——两个 ...

  9. JQuery 标签之间组合取值

    <body> <div></div> <input type="text" value="first-1" /> ...

  10. gradle repo conf - maven-central.storage-download.googleapis.com

    repositories { google() jcenter() maven { // The google mirror is less flaky than mavenCentral() url ...