CodeForces 433C Ryouko's Memory Note (中位数定理)
<题目链接>
题目大意:
给你一堆数字,允许你修改所有相同的数字成为别的数字,不过只能修改一次,问你修改后序列相邻数字的距离和最小是多少。
解题分析:
首先,修改不是任意的,否则那样情况太多了,因为最后只是求序列相邻项差值的绝对值的和,所以我们只需要考虑修改之后能够改变最终答案的情况,因为本题要使差值的绝对值的和最小,所以我们可以利用中位数的性质转化。
#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 (中位数定理)的更多相关文章
- codeforces 433C. Ryouko's Memory Note 解题报告
题目链接:http://codeforces.com/problemset/problem/433/C 题目意思:一本书有 n 页,每页的编号依次从 1 到 n 编排.如果从页 x 翻到页 y,那么| ...
- CodeForces 433C Ryouko's Memory Note-暴力
Ryouko's Memory Note Time Limit:1000MS Memory Limit:262 ...
- codeforces C. Ryouko's Memory Note
题意:给你m个数,然后你选择一个数替换成别的数,使得.最小.注意选择的那个数在这m个数与它相同的数都必须替换同样的数. 思路:用vector记录每一个数与它相邻的数,如果相同不必记录,然后遍历替换成与 ...
- 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 ...
- 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 ...
- Codeforces Round #248 (Div. 2) C. Ryouko's Memory Note
题目链接:http://codeforces.com/contest/433/problem/C 思路:可以想到,要把某一个数字变成他的相邻中的数字的其中一个,这样总和才会减少,于是我们可以把每个数的 ...
- Codeforces Round #248 (Div. 2) C. Ryouko's Memory Note (vector 替换)
题目链接 题意:给m个数字, 这些数字都不大于 n, sum的值为相邻两个数字 差的绝对值.求这n个数字里把一个数字 用 其中另一个数字代替以后, 最小的sum值. 分析:刚开始以为两个for 最坏 ...
- Ryouko's Memory Note
题目意思:一个书有 n 页,每页的编号依次从 1 到 n 编排.如果从页 x 翻到页 y,那么|x-y|页都需要翻到(联系生活实际就很容易理解的了).接着有m pieces 的 information ...
- Codeforces 433 C. Ryouko's Memory Note
C. Ryouko's Memory Note time limit per test 1 second memory limit per test 256 megabytes input stand ...
随机推荐
- SQL Server 2016 Failover Cluster + ALwaysOn
SQL Server 2016 Failover Cluster + ALwaysOn 环境的搭建 近期公司为了提高服务的可用性,就想到了部署AlwaysOn,之前的环境只是部署了SQL Server ...
- Confluence 6 恢复一个空间
你可以导出一个空间 – 包括页面,评论和附件到一个压缩的 XML 文件中,可选的你可以在 XML 文件中包括所有空间使用的附件.希望导入空间到其他的 Confluence 站点中,请按照下面的方法进行 ...
- hdu2871 区间合并(类似poj3667)+vector应用
用vector进行插入和删除操作! 总是有些地方处理不好,对拍了才知道错在哪里,, /* 给定一些操作 reset 清空 new a ,申请最左边的连续a个空间 free a,清空a所在的块 get ...
- bzoj 3191
非常好的一道题 看到这道题,肯定能想到概率dp,但是状态的设计与转移都是一个难点 如果正向模拟来设计状态,那么不难发现是很难以转移的 所以我们考虑反向模拟,用类似博弈的方法来转移 不难发现,如果只剩了 ...
- base64解密
问题 : base64解密 时间限制: 1 Sec 内存限制: 128 MB 题目描述 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个 ...
- Nginx详解十二:Nginx场景实践篇之跨站访问相关
跨站访问 浏览器请求一个页面的时候,发送了两个域名的请求 此情况不安全,容易出现CSRF攻击,所以浏览器禁止跨域访问 Nginx设置打开跨站访问 配置语法:add_header name value ...
- 在一些开源框架中,dist文件夹是什么意思
全称是distribution. distribution英 [dɪstrɪ'bjuːʃ(ə)n]美 ['dɪstrə'bjʊʃən]: 发行版 n. 分布:分配 在某些框架中,因为开发和发布是的内容 ...
- C++ 关闭显示器
好困,想躺一下,关灯.上床,笔记本的屏幕还亮着,好刺眼,睡不着! 脑子里出现一个疑问,怎么用C++写一个关闭屏幕的小程序呢? 参考了网上已有的例子,最简化: #include <windows. ...
- Android播放图片动画
1.布局文件中添加ImageView <ImageView android:id="@+id/iv_fan" android:layout_width="wrap_ ...
- Liunx 特殊权限 suid sgid t
suid 在passwd 中体现,在执行命令的时候普通用户拥有管理员的权限 [root@test_android_client_download ~]# ll /usr/bin/passwd -rws ...