首页 > 代码库 > 1654 方程的解 - Wikioi

1654 方程的解 - Wikioi

题目描述 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