洛谷 P1037 產生數


題目描述

給出一個整數 n(n<10^30) 和 k 個變換規則(k<=15)。

規則:

一位數可變換成另一個一位數:

規則的右部不能為零。

例如:n=234。有規則(k=2):

2->5

3->6

上面的整數 234 經過變換后可能產生出的整數為(包括原數):

234 534 264 564 共 4 種不同的產生數

問題:

給出一個整數 n 和 k 個規則。

求出:

經過任意次的變換(0次或多次),能產生出多少個不同整數。

僅要求輸出個數。

輸入輸出格式

輸入格式:
鍵盤輸人,格式為:

n k x1 y1 x2 y2 … …

xn yn

輸出格式:
屏幕輸出,格式為:

一個整數(滿足條件的個數):

輸入輸出樣例

輸入樣例#1:
234 2
2 5
3 6
輸出樣例#1:
4

分析:
先用floyd求出每個數字能變成的其他數字求出,再用乘法原理求解,要用高精度。

代碼:

var
v,u,x,y:array[0..9]of longint;
a:array[0..9,0..9]of longint;
b:array[1..1000]of longint;
sum:array[1..10000]of longint;
i,t1,k,t,result,j,h:longint;
c:char;
w:array[0..9,0..9]of boolean;
procedure cz;
var
i,j,k1:longint;
begin
for i:=0 to 9 do
w[i,i]:=true;
for k1:=0 to 9 do
for i:=0 to 9 do
for j:=0 to 9 do
begin
if (k1=i)or(i=j)or(i=k1)then
h:=1
else
if (w[i,j]=false)and(w[i,k1]=true)and(w[k1,j]=true)and(a[i,j]<a[i,k1]+a[k1,j])then
begin
w[i,j]:=true;
a[i,j]:=a[i,k1]+a[k1,j];
end;
end;
for i:=0 to 9 do
for j:=0 to 9 do
if w[i,j] then
inc(v[i]);
end;
procedure fj;
var
c:array[1..1000]of longint;
x:longint;
begin
fillchar(b,sizeof(b),0);
fillchar(c,sizeof(c),0);
x:=v[i];
t:=0;
while x<>0 do
begin
inc(t);
c[t]:=x mod 10;
x:=x div 10;
end;
for j:=1 to t do
b[j]:=c[j];
end;
procedure gj;
var
j,k:longint;
su:array[1..10000]of longint;
begin
fillchar(su,sizeof(su),0);
for j:=1 to t1 do
su[j]:=sum[j];
fillchar(sum,sizeof(sum),0);
for j:=1 to t1 do
for k:=1 to t do
begin
sum[j+k-1]:=su[j]*b[k]+sum[j+k-1];
if sum[j+k-1]>9 then
begin
sum[j+k]:=sum[j+k-1]div 10;
sum[j+k-1]:=sum[j+k-1]mod 10;
if t1<j+k then
t1:=j+k;
end;
if t1<j+k-1 then
t1:=j+k-1;
end;
end;
begin
read(c);
fillchar(w,sizeof(w),false);
while c<>' 'do
begin
val(c,i,result);
inc(u[i]);
read(c);
end;
read(k);
readln;
for i:=1 to k do
begin
readln(x[i],y[i]);
a[x[i],y[i]]:=1;
w[x[i],y[i]]:=true;
end;
cz;
sum[1]:=1;
t1:=1;
h:=0;
for i:=0 to 9 do
begin
if (u[i]<>0)and(v[i]<>0) then begin
fj;
for j:=1 to u[i] do
gj;
end; end;
for i:=t1 downto 1 do
write(sum[i]);
end.

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com