国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

洛谷 P1037 產生數

2019-11-08 20:16:13
字體:
來源:轉載
供稿:網友

題目描述

給出一個整數 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.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广西| 大同市| 嘉祥县| 福鼎市| 保靖县| 宁明县| 咸丰县| 琼海市| 报价| 溧阳市| 新源县| 光山县| 定西市| 固安县| 镇赉县| 松江区| 方山县| 全州县| 封丘县| 兴义市| 昌宁县| 松潘县| 县级市| 墨脱县| 奉贤区| 赤壁市| 灌南县| 大同市| 北宁市| 长葛市| 木里| 湄潭县| 宕昌县| 客服| 榆林市| 台东市| 兴国县| 西峡县| 潼关县| 汶上县| 梁河县|