CF1375D Replace by MEX 题解

辛姜_千尘红回 2024-10-01 17:35:01 阅读 50

题目传送门

题目大意

m

e

x

mex

mex 为序列中最小的没有出现的数。

给你一个长度为

n

n

n 的序列

a

a

a,你可以进行不超过

2

×

n

2\times n

2×n 次操作,使得序列

a

a

a 单调不降。每次操作你可以选定一个位置

p

p

p,并将

a

p

a_p

ap​ 赋值为

m

e

x

mex

mex。请你输出总共的操作次数与每次操作的位置。

解题思路

题目说了,

x

a

,

0

x

n

\forall x \in a,0\le x\leq n

∀x∈a,0≤x≤n。所以,我们考虑将

a

a

a 变为

0

,

1

,

,

n

1

0,1,\cdots,n-1

0,1,⋯,n−1。

我们在进行操作时,需分成两种情况讨论。

m

e

x

n

mex \neq n

mex=n,由于最后的序列要满足

a

i

=

i

1

a_i=i-1

ai​=i−1,所以我们这里就将

a

m

e

x

+

1

a_{mex+1}

amex+1​ 赋值为

m

e

x

mex

mex。若

m

e

x

=

n

mex = n

mex=n,那我们就找到序列中任意一个满足

a

i

i

1

a_i \neq i - 1

ai​=i−1 的数,然后将其赋值为

m

e

x

mex

mex。如果没有找到,说明现在的序列已经满足题意,不需要再进行操作了。

大概思路就是这样。瞟了一眼数据范围,发现

n

n

n 比较小,于是我们在求

m

e

x

mex

mex 的值时可以暴力求解。

CODE:

<code>#include <bits/stdc++.h>

using namespace std;

#define int long long

int a[1010], b[2010], vis[1010];

signed main() { -- -->

ios::sync_with_stdio(false);

cin.tie(0), cout.tie(0);

int t, n;

cin >> t;

while (t--) {

memset(vis, 0, sizeof vis);

cin >> n;

for (int i = 1; i <= n; i++) {

cin >> a[i];

vis[a[i]]++;

}

int ans = 0; //总共的操作次数

/*

最后

a[i] = i - 1

*/

while (1) {

int mex = 0;

for (int i = 0; i <= n; i++) { //查找 mex

if (!vis[i]) {

mex = i;

break;

}

}

if (mex != n) {

vis[a[mex + 1]]--;

b[++ans] = mex + 1;

a[mex + 1] = mex;

vis[mex]++;

} else {

bool f = 0;

for (int i = 1; i <= n; i++) {

if (a[i] != i - 1) {

f = 1;

vis[a[i]]--;

a[i] = mex;

vis[mex]++;

b[++ans] = i;

break;

}

}

if (!f) //序列合法,不需要再进行操作了

break;

}

}

cout << ans << endl;

for (int i = 1; i <= ans; i++)

cout << b[i] << ' ';

cout << endl;

}

return 0;

}

总了个结

这题非常水,建议评绿。简单构造,建议尝试。

\tiny\color{white}{\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum_{\sum_{\sum}^{\sum}\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in\in}}

∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑​∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈∈​



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。