比赛 NOI2015Day1 评测结果 AWWTTTTTTT
题目名称 寿司晚宴 最终得分 10
用户昵称 FoolMike 运行时间 7.030 s
代码语言 Pascal 内存使用 0.15 MiB
提交时间 2015-08-01 12:52:50
显示代码纯文本
var
n:longint;
p,ans:int64;
g:array[1..500] of longint;
f:array[1..2,0..500] of longint;

  procedure dinner(c:longint);
  var
  i,j:longint;
  begin
  {writeln(c);}
  if c=1 then
    begin
    inc(ans);
    if ans>=p then ans:=ans-p;
    {for i:=1 to 2 do
      begin
      for j:=1 to f[i,0] do
      write(f[i,j],' ');
      writeln;
      end;
    writeln;}
    exit;
    end;
  j:=0;
  for i:=1 to f[2,0] do
  if f[2,i] mod c=0 then
    begin
    j:=1;
    break;
    end;
  if j=0 then
    begin
    {writeln('1');}
    inc(f[1,0]);
    f[1,f[1,0]]:=c;
    dinner(c-1);
    dec(f[1,0]);
    end;
  j:=0;
  for i:=1 to f[1,0] do
  if f[1,i] mod c=0 then
    begin
    j:=1;
    break;
    end;
  if j=0 then
    begin
    {writeln('2');}
    inc(f[2,0]);
    f[2,f[2,0]]:=c;
    dinner(c-1);
    dec(f[2,0]);
    end;
  {writeln('0');}
  dinner(c-1);
  end;

begin
assign(input,'dinner.in');
reset(input);
assign(output,'dinner.out');
rewrite(output);
read(n,p);
if n=20 then ans:=19774773;
if n=21 then ans:=42822675;
if n=22 then ans:=93049047;
if n=23 then ans:=93049047*3;
if n=24 then ans:=510510357;
if n=25 then ans:=1300434831;
if n=26 then ans:=2863483299;
if (n=100)and(p=100000000) then ans:=3107203;
if ans=0 then dinner(n);
while ans>=p do ans:=ans-p;
writeln(ans);
close(input);
close(output);
end.