解题思路:
类似于并查集的思想进行路径压缩
注意事项:
参考代码:
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语言代码)浏览:746 |
C二级辅导-统计字符 (C语言代码)浏览:541 |
C二级辅导-同因查找 (C语言代码)浏览:663 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1884 |
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:495 |
C语言考试练习题_排列 (C语言代码)浏览:1326 |
【金明的预算方案】 (C++代码)浏览:843 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:597 |
上车人数 (C语言代码)浏览:713 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:840 |