做了下这道题,感觉自己基本的算法是准确的,10个官方测试中的数据1~9也能顺利通过,但最后一个测试数据会超时。。。应该是我的算法太繁琐了吧~请各位指教!!
程序:
Program huoxingren;
Var a:array[1..99999]of integer;
var n,m,t,s:integer;
Procedure Init;
Var i:integer;
Begin
Assign(input,'martian.in');
Reset(input);
Readln(n,m);
For i:=1 to n do
Read(a);
End;
Function Check(i,t:integer):boolean;
Var j:integer;
Begin
For j:=1 to i-1 do
If a[j]=t then
Begin
check:=false;
Exit;
End;
check:=true;
End;
Procedure Main(k:integer);
Var i,t:integer;
Begin
If k=n then
Begin
t:=1;
While not (check(k,t))do
inc(t);
a[k]:=t;
Main(k+1);
End
Else If k<n then
Begin
If a[k]=n then Begin
a[k]:=0;
Main(k-1);
End
else
Begin
t:=a[k]+1;
While (t<=n)and(not(check(k,t))) do
inc(t);
If t<=n then
Begin
a[k]:=t;
Main(k+1);
End
Else
Begin
a[k]:=0;
Main(k-1);
End;
End;
End
Else
Begin
inc(s);
If s=m then
Begin
For i:=1 to n do
Begin
Write(a);
If i<n then write(' ');
End;
Exit;
End;
a[n]:=0;
Main(k-2);
End;
End;
Begin
Init;
Main(n-1);
End.