Codeforces Round #649 (Div. 2) C. Ehab and Prefix MEXs
题目链接:https://codeforces.com/contest/1364/problem/C
题意
给出大小为 $n$ 的非递减数组 $a$,构造同样大小的数组 $b$,使得对于每个 $i$,$b_1, b_2, \ldots, b_i$ 中未出现的最小正整数均为 $a_i$ 。($1 \le n \le 10^5, 0 \le a_i \le i, 0 \le b_i \le 10^6$)
题解
一个比较重要的结论:
\begin{equation} if\ a_i \neq a_{i-1}\ then\ b_i = a_{i - 1} \end{equation}
之后将未出现在数组 $a$ 中或更大的数依次加入数组 $b$ 中即可。
证明
$a_{i - 1}$ 不能等于 $b_j(j < i)$,否则对于 $i - 1$ 不满足题意。
$a_{i - 1}$ 不能等于 $b_j(j > i)$,否则,因为数组 $a$ 为非递减数组,对于 $i$ 不满足题意。
又因为 $a_{i - 1} \neq a_i, a_{i - 1}$ 对于 $a_i$ 是必须的,所以 $b_i = a_{i - 1}$ 。
代码一
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10; int a[N], b[N];
bool ex[N]; int main() {
int n; cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
memset(b, -1, sizeof b);
for (int i = 1; i <= n; i++) {
if (a[i] != a[i - 1]) {
b[i] = a[i - 1];
ex[b[i]] = true;
}
}
ex[a[n]] = true; //防止全部相同的情况
int num = 0;
for (int i = 1; i <= n; i++) {
if (b[i] == -1) {
while (ex[num]) num++;
b[i] = num++;
}
}
for (int i = 1; i <= n; i++)
cout << b[i] << " \n"[i == n];
}
代码二
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10; int a[N], not_in[N];
bool ex[N]; int main() {
int n; cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i], ex[a[i]] = true;
int p = 0;
for (int i = 1; i <= n; i++)
if (!ex[i]) not_in[p++] = i;
int j = 0;
for (int i = 1; i <= n; i++)
cout << (a[i] != a[i - 1] ? a[i - 1] : not_in[j++]) << " \n"[i == n];
}
Codeforces Round #649 (Div. 2) C. Ehab and Prefix MEXs的更多相关文章
- Codeforces Round #649 (Div. 2) C. Ehab and Prefix MEXs (构造,贪心)
题意:有长度为\(n\)的数组\(a\),要求构造一个相同长度的数组\(b\),使得\({b_{1},b_{2},....b_{i}}\)集合中没有出现过的最小的数是\(a_{i}\). 题解:完全可 ...
- Codeforces Round #628 (Div. 2) C. Ehab and Path-etic MEXs(树,思维题)
题意: 给有 n 个点的树的 n-1 条边从 0 到 n-2 编号,使得任意两点路径中未出现的最小数最小的方案. 思路: 先给所有度为 1 的点所在边编号,之后其他点可以随意编排. #include ...
- Codeforces Round #649 (Div. 2)
Codeforces Round #649 (Div. 2) -- WKL \(\mathcal{A}\)题: \(\mathrm{XXXXX}\) Greedy implementation *12 ...
- Codeforces Round #649 (Div. 2) C、Ehab and Prefix MEXs D、Ehab's Last Corollary 找环和点染色
题目链接:C.Ehab and Prefix MEXs 题意; 有长度为n的数组a(下标从1开始),要求构造一个相同长度的数组b,使得b1,b2,....bi集合中没有出现过的最小的数是ai. mex ...
- Codeforces Round #525 (Div. 2) F. Ehab and a weird weight formula
F. Ehab and a weird weight formula 题目链接:https://codeforces.com/contest/1088/problem/F 题意: 给出一颗点有权值的树 ...
- Codeforces Round #525 (Div. 2)E. Ehab and a component choosing problem
E. Ehab and a component choosing problem 题目链接:https://codeforces.com/contest/1088/problem/E 题意: 给出一个 ...
- Codeforces Round #525 (Div. 2)D. Ehab and another another xor problem
D. Ehab and another another xor problem 题目链接:https://codeforces.com/contest/1088/problem/D Descripti ...
- Codeforces Round #525 (Div. 2)B. Ehab and subtraction
B. Ehab and subtraction 题目链接:https://codeforc.es/contest/1088/problem/B 题意: 给出n个数,给出k次操作,然后每次操作把所有数减 ...
- Codeforces Round #525 (Div. 2)A. Ehab and another construction problem
A. Ehab and another construction problem 题目链接:https://codeforc.es/contest/1088/problem/A 题意: 给出一个x,找 ...
随机推荐
- CSS卡片旋转
html{ perspective: 800px; } body{ display:flex; flex-wrap: wrap; } .card{ transform-style: preserve- ...
- node中 path.join 和 path.resovle 区别
console.log(__dirname) console.log('----') console.log(path.resolve(__dirname, '/a/b', '../')) conso ...
- 【JavaWeb】书城项目
书城网站 项目说明 项目地址 阶段一 登录.注册的验证 使用 jQuery 技术对登录中的用户名.密码进行非空验证: 使用 jQuery 技术和正则表达式对注册中的用户名.密码.确认密码.邮箱进行格式 ...
- 在阿里云托管的k8s上使用nas做动态存储
前言 关于aliyun托管k8s的存储插件主要有两种: CSI # kubectl get pod -n kube-system | grep csi-plugin csi-plugin-8bbnw ...
- Python Kafka Client 性能测试
一.前言 由于工作原因使用到了 Kafka,而现有的代码并不能满足性能需求,所以需要开发高效读写 Kafka 的工具,本文是一个 Python Kafka Client 的性能测试记录,通过本次测试, ...
- requests +httprunne r
1.get 请求和 post 请求的区别是什么? 2.requests 模拟 get 请求时,有哪两种方式让响应的结果不是乱码?(直接代码描述) 3.requests 库中的 post 方法,参数 ...
- 腾讯QQ,人人都是高手
今天,腾讯果然给出了官方回应,具体表述如下: 可能你看不太懂,其实我也看的不太懂,不过这就是公关的能力体现,就像我"人人都是高手"的大连车务组微机室小编一样,把一个降级flash描 ...
- Python批量 png转ico
Python 批量 png 转 ico 一.前言: 首先说一下ico文件的作用:ico是windows的图标文件格式,可以用于浏览器首段图标显示,也可以用于Windows软件.我的话一般用来美化文件夹 ...
- MYSQL基础知识的复习2
1.修改表中的数据 update 表名 set 要修改的字段 where 条件;-- 如果修改多个字段那么字段和字段之间用逗号隔开 2.查询(很重要) 1.查询表中部分字段: select 字段名,字 ...
- 前端知识(二)04-vue-element-admin-谷粒学院
目录 一.vue-element-admin 1.简介 2.安装 二.vue-admin-template 1.简介 2.安装 一.vue-element-admin 1.简介 vue-element ...