Codeforces Round #315 (Div. 2)

来源:互联网 发布:下载邪恶漫画软件 编辑:程序博客网 时间:2024/05/16 08:16

B. Inventory

题意是这样的:有些物品不是按序列编号,甚至有些物品有相同的编号。你需要从1开始对这些物品进行编号,尽可能使用原来的编号,也就是说你做的修改越少越好,使得所有的物品编号在1~n的范围内并且任何两个物品的编号不同。

代码如下:

#include<iostream>using namespace std;const int maxn = 100002;int a[maxn], f[maxn], t[maxn];int main(){int n, i, k;cin >> n;for (i = 1; i <= n; ++i){cin >> a[i];f[a[i]]++;//标记某个数出现的次数if (a[i]>n)//若某个标号大于最大编号将其出现次数设为0表示该标号不合法 f[a[i]] = 0;}if (n == 1){cout << 1 << endl;return 0;}for (i = 1, k = 0; i <= n; ++i)if (!f[i])t[k++] = i;//t按照从小到大的顺序标记未出现过的编号for (i = 1, k = 0; i <= n; ++i){if (!f[a[i]])cout << t[k++] << " ";else{cout << a[i] << " ";f[a[i]] = 0;}}cout << endl;return 0;}


0 0