⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ac1145.pas

📁 某牛人写的acm.tongji.edu.cn上大部分ac的代码,仅供学习研究,请不要用来作弊
💻 PAS
字号:
program tju1145;
const
  maxn=300;
  count:array[0..6]of byte=(1,2,2,1,1,1,1);
  base=100000;
type
  bignum=array[-1..60]of longint;
var
  ans:array[1..maxn]of bignum;
  rem:array[boolean,0..6]of bignum;
  n,i,j,k:longint;
  c:bignum;
procedure add(var a,b:bignum);
  var
    i:longint;
  begin
    if b[-1]>a[-1] then a[-1]:=b[-1];
    for i:=0 to a[-1] do begin
      inc(a[i+1],(a[i]+b[i]) div base);
      a[i]:=(a[i]+b[i]) mod base;
    end;
    if a[a[-1]+1]>0 then inc(a[-1]);
  end;
procedure mul(var a:bignum;b:longint);
  var
    i:longint;
  begin
    for i:=0 to a[-1] do
      a[i]:=a[i]*b;
    for i:=0 to a[-1] do begin
      inc(a[i+1],a[i] div base);
      a[i]:=a[i] mod base;
    end;
    if a[a[-1]+1]>0 then inc(a[-1]);
  end;
procedure divide(var a:bignum;b:longint);
  var
    i:longint;
  begin
    for i:=a[-1] downto 0 do begin
      inc(a[i-1],a[i] mod b*base);
      a[i]:=a[i] div b;
    end;
    while a[a[-1]]=0 do dec(a[-1]);
  end;
procedure out(a:bignum);
  var
    i:longint;
  begin
    write(a[a[-1]]);
    for i:=a[-1]-1 downto 0 do
      write(a[i] div 10000,a[i] div 1000 mod 10,a[i] div 100 mod 10,a[i] div 10 mod 10,a[i] mod 10);
    writeln;
  end;
begin
  rem[false,0,0]:=1;
  for n:=1 to maxn do begin
    //Multiples of 7 not containing the digit 7
    fillchar(rem[odd(n)],sizeof(rem[odd(n)]),0);
    for i:=0 to 6 do
      for j:=0 to 6 do
        for k:=1 to count[j] do
          add(rem[odd(n),(i*10+j) mod 7],rem[not odd(n),i]);
    ans[n]:=rem[odd(n),0];

    //Numbers containing the digit 7
    fillchar(c,sizeof(c),0);c[0]:=1;
    for i:=1 to n do begin
      add(ans[n],c);//N-digit numbers containing (n+1-i) 7s
      if i<n then begin
        mul(c,(n+1-i)*9);
        divide(c,i);
      end;
    end;
  end;

  repeat
    read(n);
    out(ans[n]);
  until seekeof;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -