【题解】CF1375D Replace by MEX
\(\text{Solution:}\)
观察到题目要求操作次数不超过\(2n,\)且不必最小化操作次数,所以一定是构造题。
考虑将序列转化为\([0,1,...n-1].\)于是,有以下操作方法:
- 当\(a_i=i-1\)时,不予操作。
- 当\(a_i\not =i-1\)且\(mex=n\)时,任选一个不满足上面条件的\(a_i\)令它\(=mex.\)
- 当\(a_i\not=i-1\)且\(mex\not =n\)时,将\(a_{mex+1}=mex\)即可。
观察可得,第二个操作每个数最多一次,第三个同样。所以操作次数不超过\(2n.\)
#include<bits/stdc++.h>
using namespace std;
int T,n,a[200010];
vector<int>v;
inline bool check(){
for(int i=1;i<=n;++i)if(a[i]!=i-1)return false;
return true;
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);v.clear();
for(int i=1;i<=n;++i)scanf("%d",a+i);
while(!check()){
for(int i=1;i<=n;++i){
if(a[i]==i-1)continue;
else{
int vis[2001];
fill(vis,vis+n+1,0);
for(int j=1;j<=n;++j)vis[a[j]]++;
int mex=0;while(vis[mex])mex++;
if(mex==n){
int p;
for(int j=1;j<=n;++j){
if(a[j]!=j-1){
p=j;
break;
}
}
v.push_back(p);a[p]=mex;
}
else a[mex+1]=mex,v.push_back(mex+1);
break;
}
}
}
cout<<(int)v.size()<<endl;
for(int i=0;i<(int)v.size();++i)cout<<v[i]<<" ";
cout<<endl;
}
return 0;
}
【题解】CF1375D Replace by MEX的更多相关文章
- Codeforces Global Round 9 D. Replace by MEX
题目链接:https://codeforces.com/contest/1375/problem/D 题意 给出一个大小为 $n$,元素值位于 $[0,n]$ 之间的数组,每次可以将一个元素替换为数组 ...
- 【题解】Luogu CF817F MEX Queries
原题传送门 817,我突然想到了某8位质数 这题珂以说是珂朵莉树的模板 三个操作都肥肠简单,前两个区间赋值,第三个区间0变1,1变0 每次输出从头开始扫描就行(我忘了珂朵莉树的性质,竟然还动态维护最左 ...
- 简介&目录
欢迎来到 MK 的博客鸭~ 这里会被我用来发一些OI算法.数据结构的学习笔记,各种游记和其他的一些内容,希望大家多多关照! ε≡٩(๑>₃<)۶ 然后目录就也放这里⑧:
- CF1139E Maximize Mex 题解【二分图】
我发现我有道叫[SCOI2010]连续攻击游戏的题白写了.. Description There are \(n\) students and \(m\) clubs in a college. Th ...
- BZOJ3339:Rmq Problem & BZOJ3585 & 洛谷4137:mex——题解
前者:https://www.lydsy.com/JudgeOnline/problem.php?id=3339 后者: https://www.lydsy.com/JudgeOnline/probl ...
- 洛谷4137 mex题解 主席树
题目链接 虽然可以用离线算法水过去,但如果强制在线不就gg了. 所以要用在线算法. 首先,所有大于n的数其实可以忽略,因为mex的值不可能大于n 我们来设想一下,假设已经求出了从0到n中所有数在原序列 ...
- [题解]Mail.Ru Cup 2018 Round 1 - B. Appending Mex
[题目] B. Appending Mex [描述] Ildar定义了一种方法,可以由一个数组产生一个数.具体地,从这个数组中任选一个子集,不在这个子集中的最小的非负整数称为mex,就是由这个数组得到 ...
- Educational Codeforces Round 37-F.SUM and REPLACE题解
一.题目 二.题目链接 http://codeforces.com/contest/920/problem/F 三.题意 给定$N$个范围在$[1, 1e6)$的数字和$M$个操作.操作有两种类型: ...
- 【luogu P4137 Rmq Problem / mex】 题解
题目链接:https://www.luogu.org/problemnew/show/P4137 求区间内最大没出现过的自然数 在add时要先判断会不会对当前答案产生影响,如果有就去找下一个答案. # ...
随机推荐
- 2020重新出发,NOSQL,什么是Redis?
@ 目录 Redis是什么? NoSQL和传统数据库的区别 Redis的优点 Redis在Java Web中的应用 缓存 高速读/写场合 Redis是什么? Redis 是一个由 Salvatore ...
- ARM开发板实现双系统引导的一种方法——基于迅为iTOP-4412开发板
前言 本文所用的uboot代码为迅为官方提供,开发板是迅为iTOP-4412开发板.本文如有错误,欢迎指正. 首先,我们确定一下系统启动的流程:首先启动uboot,uboot启动内核并挂载rootfs ...
- js扩展运算符(spread)三个点(...)
常见用法: 1.该运算符主要用于函数调用. function push(array, ...items) { array.push(...items); } function add(x, y) { ...
- Laptop(线段树+离散化)
链接:https://ac.nowcoder.com/acm/contest/16/A来源:牛客网 题目描述 FST是一名可怜的小朋友,他很强,但是经常fst,所以rating一直低迷. 但是重点在于 ...
- 【IDEA】【SpringBoot】基于idea对springboot程序远程调试
一.开启远程调试前提:本地代码与服务器代码一致(实测:不关键的代码稍微有点不一样好像也不会有多大问题). 二.开启远程调试步骤 1.开发工具配置 idea端打开Edit configurations, ...
- 创建DBA用户luna
用system/pswd登陆sql plus,执行下面命令: 请输入用户名: system 输入口令: 连接到: Oracle Database 11g Enterprise Edition Rele ...
- smbms系统中引用的js文件出现乱码
问题如下显示: 时间显示出现了乱码,找到显示该时间的js文件,定位问题出现的地方. 解决方案: 改变该文件的编码方式,这里的使用了vscode进行改变js文件的编码方式 步骤如下: 使用vscode打 ...
- Appium之常用API
Appium常用API解析 1.current_activity:获取当前页面的activity名,比如com.taobao.tao.TBMainActivity 或 com.taobao.brows ...
- SpringCloud实战 | 第四篇:SpringCloud整合Gateway实现API网关
一. 前言 微服务实战系列是基于开源微服务项目 有来商城youlai-mall 版本升级为背景来开展的,本篇则是讲述API网关使用Gateway替代Zuul,有兴趣的朋友可以进去给个star,非常感谢 ...
- C#开发PACS医学影像处理系统(十八):Dicom使用LUT色彩增强和反色
在医生阅片确诊的过程中,当发线疑似病灶时在灰度显示下有时并不清晰,这时候就需要色彩增强效果来使灰度图像变为彩色图像. LUT可以简单的理解为0-255的颜色映射值,例如:彩虹编码,将其打包成LUT格式 ...