解题思路:
类似于并查集的思想进行路径压缩
注意事项:
参考代码:
AC代码
#include
using namespace std;
int used[1000005], n, num;
int findnext(int x) {
if (!used[x]) return x;
if (used[x] == 1) {
used[x] = findnext(x + 1);
}
else
{
used[x] = findnext(used[x]);
}
return used[x];
}
int main() {
scanf("%d", &n);
for (int i = 1; i <=n ; i++)
{
scanf("%d", &num);
num = findnext(num);
used[num] = 1;
printf("%d ", num);
}
return 0;
}
被卡cin的代码,超时18%
#include
using namespace std;
int used[1000005], n, num;
int findnext(int x) {
if (!used[x]) return x;
if (used[x] == 1) {
used[x] = findnext(x + 1);
}
else
{
used[x] = findnext(used[x]);
}
return used[x];
}
int main() {
cin >> n;
for (int i = 1; i <=n ; i++)
{
cin >> num;
num = findnext(num);
used[num] = 1;
cout << num << " ";
}
return 0;
}
如果改变输出方式又能AC了
#include
using namespace std;
int used[1000005], n, num, ornums[100005];
int findnext(int x) {
if (!used[x]) return x;
if (used[x] == 1) {
used[x] = findnext(x + 1);
}
else
{
used[x] = findnext(used[x]);
}
return used[x];
}
int main() {
cin >> n;
for (int i = 1; i <=n ; i++)
{
cin >> num;
num = findnext(num);
used[num] = 1;
ornums[i] = num;
}
for (int i = 1; i <= n; i++)
{
cout << ornums[i] << " ";
}
return 0;
}
为什么最后同样用cin,第二种输出方式能ac,我也很迷
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题12.5 (C语言代码)浏览:762 |
最好的,浏览:563 |
生日日数 (C语言代码)浏览:1498 |
C语言程序设计教程(第三版)课后习题9.1 (C语言代码)浏览:555 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1181 |
明明的随机数 (C语言代码)浏览:953 |
C语言程序设计教程(第三版)课后习题1.5 (C++代码)浏览:403 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:556 |
求圆的面积 (C++代码)浮点数有误差!!!浏览:671 |
1063题 初学者,求帮忙看下,不知道哪错了浏览:232 |