(高精度 思維)P1037 產生數

2021-09-16 13:07:01 字數 1968 閱讀 1595

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

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

規則的右部不能為零。

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

2->5

3->6

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

234534

264564

共4種不同的產生數

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

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

僅要求輸出個數。

輸入格式:

鍵盤輸入,格式為:

n kx_1 y_1

x_2 y_2

... ...

x_n y_n​

輸出格式:

螢幕輸出,格式為:

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

輸入樣例#1:複製

234 2

2 53 6

輸出樣例#1:複製

4
題解:這道題有點排列組合的意思,統計每一位可以變換到其他數字的個數,使其連乘

wa**(沒有用高精度)

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define eps (1e-8)

#define max 0x3f3f3f3f

#define u_max 1844674407370955161

#define l_max 9223372036854775807

#define i_max 2147483647

#define re register

#define pushup() tree[rt]=tree[rt<<1]+tree[rt<<1|1]

#define nth(k,n) nth_element(a,a+k,a+n); // 將 第k大的放在k位

#define ko() for(int i=2;i<=n;i++) s=(s+k)%i // 約瑟夫

#define ok() v.erase(unique(v.begin(),v.end()),v.end()) // 排序,離散化

#define catalan c(2n,n)-c(2n,n-1) (1,2,5,14,42,132,429...) // 卡特蘭數

using namespace std;

inline int read()

while(c >= '0' & c <= '9') x = x * 10 + c - '0', c = getchar();

return x * f;

}typedef long long ll;

const double pi = atan(1.)*4.;

const int inf = 0x3f3f3f3f;

const ll inf = 0x3f3f3f3f3f3f3f3fll;

const int m=63;

const int n=1e5+5;

setss;

string s;

vectorvect[10];

int n,v[20]; ll cut=0;

void dfs(char c)

} biginteger ans=biginteger.one;

for(int i=0;ians=ans.multiply(cut);

} system.out.println(ans); }

static void dfs(int u)

} }}

洛谷 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...