洛谷P1037產生數(高精 搜尋)

2021-09-26 08:21:05 字數 1285 閱讀 5380

給出乙個整數n(n<

規則:一位數可變換成另乙個一位數:

規則的右部不能為零。

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

2->5

3->6

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

234534

264564

共4 種不同的產生數

問題:給出乙個整數 n 和k 個規則。

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

僅要求輸出個數。

鍵盤輸入,格式為:

n kx1 y1

x2 y2

... ...

xn yn

螢幕輸出,格式為:

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

輸入 #1

234 2

2 53 6

輸出 #1

4
上來二話不說直接爆搜,成功地mle了4個點,剩下的乙個點也成功地wa掉了,震驚之餘看了看資料範圍,算了一下最多有切換思路,仔細想了一下,因為沒有變成0的可能,所以數的位數不會改變,所以所有位上的可能出現的數的個數的乘積就是答案(好繞)

首先遍歷邊,把所有數可能改變的數的個數記錄下來. 然後直接遍歷原字串把每一位可能出現的數的個數乘起來就行了。要用到高精度乘法。。。

accode

#include #include using namespace std;

struct node

edge[20];

int head[20];

int vis[20];

int k[20]; //記錄每種數字可能變成的數字的個數

int cnt=0;

int ans[101];

int len=0;

void addedge(int from,int to)

; head[from]=cnt++;

}void dfs(int p)

}void mul(int t)

while(j)

} //高精乘(寫的好醜。。。)

void getk()

}void getans(string a)

getk();

getans(a);

return 0;

}

洛谷 P1037 產生數

description 給出乙個整數 n n 10 30 和 k 個變換規則 k 15 規則 一位數可變換成另乙個一位數 規則的右部不能為零。例如 n 234。有規則 k 2 2 5 3 6 上面的整數 234 經過變換後可能產生出的整數為 包括原數 234 534 264 564 共 4 種不同的...

洛谷P1037產生數

給出乙個整數n n 2000 和k個變換規則 k 15 規則 1個數字可以變換成另1個數字 規則中,右邊的數字不能為零。例如 n 234,k 2規則為 2 5 3 6 上面的整數234經過變換後可能產生出的整數為 包括原數 234,534,264,564共4種不同的產生數。求經過任意次的變換 0次或...

洛谷P1037 產生數

題目鏈結 本著 水題不可大做 的原則,我直接字串hash 爆搜,成功爆棧。我們發現,依次搜尋每一位能取到的數字個數,最後乘起來即可 乘法原理 然後又爆了乙個點。long long存不下!於是我面向資料程式設計,看到輸出的數後面有很多0 就產生了這個神奇的騙分做法 include include in...