社区讨论

全排,有一个点蜜汁不输出,求求大佬解答

P1088[NOIP 2004 普及组] 火星人参与者 5已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@mi6h845p
此快照首次捕获于
2025/11/20 04:50
4 个月前
此快照最后确认于
2025/11/20 04:50
4 个月前
查看原帖
RT 90分,其中一个点就是 too many or too few lines。。。
我快疯了。。还有pascal 3.0.0的bug。。调试和和正常运行,同一个程序输出的东西居然不一样。。
跪求神犇解答
CPP
var i,total,n,m,p,j:longint;
    f:array[1..10010] of boolean;
    a,b:array[1..10010] of longint;
procedure dfs(dep,sign:longint);
  var i:longint;
  begin
    if dep=0 then dfs(dep+1,sign);
if dep>n
CPP
      then
        begin
          inc(total);
          if total>m then
            begin
              for i:=1 to n-1 do write(a[i],' ');
              writeln(a[n]);
              halt;
            end;
        end
      else
       if sign=1
         then
           begin
             for i:=b[dep] to n do
               if f[i]=false then
                begin
                  a[dep]:=i;
                  f[i]:=true;
                  if i=b[dep] then dfs(dep+1,1)
                  else dfs(dep+1,2);
                  f[i]:=false;
                end;
           end
         else
        for i:=1 to n do
          if f[i]=false then
            begin
              a[dep]:=i;
              f[i]:=true;
              dfs(dep+1,2);
              f[i]:=false;
            end;
  end;
begin
  readln(n);
  readln(m);
  for i:=1 to n do begin read(a[i]);b[i]:=a[i];end;
  total:=0;
  p:=1;
  for i:=2 to n do
    begin
      if p*i>m then break;
      p:=p*i;
    end;
  fillchar(f,sizeof(f),false);
  for j:=1 to n-i-2 do f[a[j]]:=true;
  dfs(n-i-1,1);
end.

回复

4 条回复,欢迎继续交流。

正在加载回复...