給出乙個整數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...