16.1113 模拟考试T1
笔记
【问题描述】
给定一个长度为m的序列a,下标编号为1~m。序列的每个元素都是1~N的
整数。定义序列的代价为累加(1->m-1 abs(ai+1-ai))
你现在可以选择两个数x和y,并将序列?中所有的x改成y。x可以与y相等。
请求出序列最小可能的代价。
【输入格式】
输入第一行包含两个整数n和m。第二行包含n个空格分隔的整数,代表序
列a。
【输出格式】
输出一行,包含一个整数,代表序列最小的代价。
【样例输入 1】
4 6
1 2 3 4 3 2
【样例输出 1】
3
【样例输入 2】
10 5
9 4 3 8 8
【样例输出 1】
6
【样例解释】
样例 1 中,最优策略为将 4 改成 3。样例 2 中,最优策略为将 9 改成 4。
【数据规模和约定】
对于30%的数据,n,m<=100
对于60%的数据,n,m ≤ 2000。
对于100%的数据,1 ≤ n,m ≤ 100,000。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <ios>
#include <vector>
using namespace std;
typedef long long ll;
const int N = (int)1e5;
int n, m, a[N+];
vector<int> b[N+];
int main(int argc, char *argv[]) {
freopen("note.in", "r", stdin);
freopen("note.out", "w", stdout); ios :: sync_with_stdio(false);
cin>>n>>m;
for (int i=;i<=m;++i) cin>>a[i];
for (int i=;i<=m;++i) {
if (i>&&a[i-]!=a[i]) b[a[i-]].push_back(a[i]);
if (i<m&&a[i+]!=a[i]) b[a[i+]].push_back(a[i]);
} ll ans=0LL,sum=0LL;
for (int i=;i<=n;++i){
if (!b[i].size()) continue;
sort(b[i].begin(),b[i].end());
int y=b[i][b[i].size()>>];
ll before=0LL,after=0LL;
for (int j=;j<b[i].size();++j) {
before+=abs(i-b[i][j]);
after+=abs(y-b[i][j]);
}
ans=max(ans,before-after),sum+=before;
}
cout<<sum/-ans<<endl;
fclose(stdin);
fclose(stdout);
return ;
}
思路:动态数组记录下与每个数字相邻的所有数字,若是要修改这这个数字的话,肯定是从与它相邻的数字中间取中位数(先sort)这样对于答案的贡献肯定最小,before记录改之前的值,sum记录所有改之前的值,sum/2是因为相邻的两个数字肯定是互相相邻的,即每一个数字都被计算了两遍,ans记录对答案贡献较大的修改值,即遍历一遍检查修改1-N中的哪个数字,可以使答案更优,before-after为将i修改为
int y=b[i][b[i].size()>>1]前后差值,即修改i对答案的优化程度
数据:见网盘我叫雷锋~ 提取密码:gmcf
16.1113 模拟考试T1的更多相关文章
- 16.1114 模拟考试T1
1.正确答案 [题目描述] 小H与小Y刚刚参加完UOIP外卡组的初赛,就迫不及待的跑出考场对答案. “吔,我的答案和你都不一样!”,小Y说道,”我们去找神犇们问答案吧”. 外卡组试卷中共有m道判断题, ...
- 16.1113 模拟考试T2
测试题 #4 括号括号[问题描述]有一个长度为?的括号序列,以及?种不同的括号.序列的每个位置上是哪种括号是随机的,并且已知每个位置上出现每种左右括号的概率.求整个序列是一个合法的括号序列的概率.我们 ...
- 16.1113 模拟考试T3
城堡[问题描述]给定一张N个点M条边的无向连通图,每条边有边权.我们需要从M条边中选出N − 1条, 构成一棵树. 记原图中从 1 号点到每个节点的最短路径长度为?Di ,树中从 1 号点到每个节点的 ...
- 16.1112 模拟考试 T1
加密[问题描述]有一种不讲道理的加密方法是: 在字符串的任意位置随机插入字符. 相应的,不讲道理的解密方法就是从字符串中恰好删去随机插入的那些字符.给定原文s和加密后的字符串t,求?有多少子串可以通过 ...
- 【2019.7.16 NOIP模拟赛 T1】洗牌(shuffle)(找环)
找环 考虑每次洗牌其实是一次置换的过程,而这样必然就会有循环出现. 因此我们直接通过枚举找出每一个循环,询问时只要找到环上对应的位置就可以了. 貌似比我比赛时被卡成\(30\)分的倍增简单多了? 代码 ...
- 10.16 NOIP模拟赛
目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...
- 驾照理论模拟考试系统Android源码下载
驾照理论模拟考试系统Android源码下载 <ignore_js_op> 9.png (55.77 KB, 下载次数: 0) <ignore_js_op> 10.png ...
- RHCE模拟考试
真实考试环境说明: 你考试所用的真实物理机器会使用普通账号自动登陆,登陆后,桌面会有两个虚拟主机图标,分别是system1和system2.所有的考试操作都是在system1和system2上完成.S ...
- 【2018.06.26NOIP模拟】T1纪念碑square 【线段树】*
[2018.06.26NOIP模拟]T1纪念碑square 题目描述 2034年,纪念中学决定修建校庆100周年纪念碑,作为杰出校友的你被找了过来,帮校方确定纪念碑的选址. 纪念中学的土地可以看作是一 ...
随机推荐
- 修改visual studio setup 安装顺序(解决新版安装包无法自动移除老版本程序的问题)
背景 visual studio setup 支持自动删除之前版本的安装,需要设置RemovePreviousVersions = true, DetectNewerInstalledVersion ...
- BOM函数之history对象
前面的话 history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起.由于安全方面的考虑,开发人员无法得到用户浏览器的URL,但借由用户访问过的页面列表,可以在不知道实际URL的情况下实现后 ...
- Lucene原理与代码分析
http://www.cnblogs.com/forfuture1978/category/300665.html
- Ukulele 原来你也在这里
- 746. Min Cost Climbing Stairs@python
On a staircase, the i-th step has some non-negative cost cost[i] assigned (0 indexed). Once you pay ...
- 几种常用库在CentOS下的编译
1操作环境 通过命令查看操作系统版本信息: [root@localhost ~]# cat /proc/version Linux version 3.10.0-327.el7.x86_64 (bui ...
- linux各种终端类型的区别和概念
1 pty(虚拟终端或伪终端): 当我们远程telnet到主机或使用xterm时不也需要一个终端交互么?是的,这就是虚拟终端pty(pseudo-tty). 2 tty(终端设备的统称):tty一词源 ...
- 自动化运维工具Ansible
一.简介 当下有许多的运维自动化工具( 配置管理 ),例如:Ansible.SaltStack.Puppet.Fabric 等. Ansible 一种集成 IT 系统的配置管理.应用部署.执行特定任务 ...
- redis:高可用分析
https://www.cnblogs.com/xuning/p/8464625.html 基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其 ...
- python爬虫(爬取视频)
爬虫爬视频 爬取步骤 第一步:获取视频所在的网页 第二步:F12中找到视频真正所在的链接 第三步:获取链接并转换成机械语言 第四部:保存 保存步骤代码 import re import request ...