zoukankan      html  css  js  c++  java
  • 1654 方程的解

    题目描述 Description
    佳佳碰到了一个难题,请你来帮忙解决。对于不定方程a1+a2+… +ak-1 +ak=g(x),其中k≥2且k ∈ N*,x是正整数,g(x) =xx mod 1000(即xx除以1000的余数),x,k是给定的数。我们要求的是这个不定方程的正整数解组数。举例来说,当k=3, x=2时,分别为(a1,a2,a3)=(2,1,1),(1,2,1),(1,1,2)。
    输入描述 Input Description
    输人只有一行,为用空格隔开的两个正整数,依次为k,x。
    输出描述 Output Description
    输出只有一行,为方程的正整数解组数。
    样例输入 Sample Input
    3 2
    样例输出 Sample Output
    3
    数据范围及提示 Data Size & Hint
    【数据范围】
    对于40%的数据,ans ≤ 1016;
    对于100%的数据,k≤ 100,x≤231一1,k ≤g (x)。

    傻逼dp题,只是要高精度(因为内存,我高精度压了十多位)

     1 const
     2     maxn=1010;
     3     h=100000000000000000;
     4 type
     5     big=array[0..10]of int64;
     6 var
     7     f,s:array[0..maxn,0..maxn]of big;
     8     n,k:int64;
     9 
    10 function q(x,y:int64):int64;
    11 begin
    12     if y=0 then exit(1);
    13     q:=q(x,y>>1);
    14     q:=q*q mod 1000;
    15     if y and 1=1 then q:=q*x mod 1000;
    16 end;
    17 
    18 operator +(a,b:big)c:big;
    19 var
    20     i:longint;
    21 begin
    22     c:=a;
    23     for i:=1 to b[0] do
    24       inc(c[i],b[i]);
    25     if c[0]<b[0] then c[0]:=b[0];
    26     for i:=1 to c[0]-1 do
    27       begin
    28         inc(c[i+1],c[i]div h);
    29         c[i]:=c[i]mod h;
    30       end;
    31     i:=c[0];
    32     while c[i]>=h do
    33       begin
    34         c[i+1]:=c[i]div h;
    35         c[i]:=c[i]mod h;
    36         inc(c[0]);
    37       end;
    38 end;
    39 
    40 procedure print(a:big);
    41 var
    42     i:longint;
    43     k:int64;
    44 begin
    45     write(a[a[0]]);
    46     for i:=a[0]-1 downto 1 do
    47       begin
    48         k:=h;
    49         while k>10 do
    50           begin
    51             k:=k div 10;
    52             if a[i]<k then write(0);
    53           end;
    54         write(a[i]);
    55       end;
    56 end;
    57 
    58 procedure main;
    59 var
    60     i,j:longint;
    61 begin
    62     read(n,k);
    63     k:=q(k,k);
    64     for i:=0 to k do
    65       begin
    66         s[0,i][0]:=1;
    67         s[0,i][1]:=1;
    68       end;
    69     for i:=1 to n do
    70       begin
    71         for j:=k downto i do
    72           f[i,j]:=s[i-1,j-1];
    73         for j:=i to k do
    74           s[i,j]:=f[i,j]+s[i,j-1];
    75       end;
    76     print(f[n,k]);
    77 end;
    78 
    79 begin
    80     main;
    81 end.
    View Code
  • 相关阅读:
    centos安装pip
    centos修改国内镜像源
    centos配置snmp服务
    django使用ModelForm上传文件
    Vue slot
    umi3.2+ targets ie不生效的问题
    mongo环境快速搭建工具 mlaunch
    mac上常用软件
    磁盘性能测试工具 iozone
    磁盘性能测试工具 bonnie++
  • 原文地址:https://www.cnblogs.com/Randolph87/p/3746349.html
Copyright © 2011-2022 走看看