解题思路:
类似于并查集的思想进行路径压缩
注意事项:
参考代码:
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二级辅导-计负均正 (C语言代码)浏览:508 |
九宫重排 (C++代码)浏览:1326 |
【回文数(二)】 (C语言代码)浏览:728 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:590 |
C语言训练-求PI* (C语言代码)浏览:613 |
WU-蓝桥杯算法提高VIP-企业奖金发放 (C++代码)浏览:1162 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:504 |
【金明的预算方案】 (C++代码)浏览:838 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:500 |
1197求助浏览:627 |