解题思路:
类似于并查集的思想进行路径压缩
注意事项:
参考代码:
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语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:334 |
【简单计算】 (C语言代码)浏览:622 |
简单的a+b (C语言代码)浏览:816 |
【蟠桃记】 (C语言代码)浏览:1026 |
IP判断 (C语言描述,蓝桥杯)浏览:1095 |
简单的a+b (C语言代码)浏览:575 |
1071题解浏览:492 |
A+B for Input-Output Practice (I) (C语言代码)浏览:574 |
1202题解浏览:623 |
整数分类问题 为什么输出总是数字8啊浏览:442 |