注意,易超时。
以下是参考别人代码,改进后的代码。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int n;
int *position;
int findchange(int start)
{
for(int i = start; i < n; i++)
{
if(position[i] != i)
return i;
}
return 0;
}
int main()
{
int x;
int start;
int steps = 0;
scanf("%d",&n);
position = (int *)malloc(sizeof(int)*n);
for(int i = 0; i < n; i++)
{
scanf("%d", &x);
position[x] = i;
}
start = findchange(1);
while(start)
{
if(position[0] == 0)
{
position[0] = position[start];
position[start] = 0;
steps++;
}
while(position[0] != 0)
{
x = position[0];
position[0] = position[x];
position[x] = x;
steps++;
}
start = findchange(start);
}
printf("%d", steps);
return 0;
}