問題の意味の翻訳
あなたのデジタルシーケンスA(なし以上18以下の長さ)を与える、すべての数字はBに登場するようにしてくださいどのように多くのシーケンスBの関係を満たす①A尋ねた。②Bすべての数字もAに登場しなければならない。③シーケンスB 0で開始することはできません
入力#1
97
出力#1
2
問題解決のためのアイデア
次いで、int型になることができ、入力文字列に表示されるシーケンス番号のそれぞれの数をカウントするために、(A「%の1D」、&)を直接scanf関数であってもよいです。
その後、各桁は、DFSの場合に表示されます
直接スリーブ式のすべての数字の数のANS + =階乗/ケースの最初の製品のそれぞれの桁数の階乗-0
ACコード
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 typedefの長い 長いLL。 int型 NUM [ 10 ]、TEMP [ 10 ]。 LL JC [ 20 ]、ANS = 0 。 ボイド DFS(INT X){ 場合(Xの== 10 ){ int型の CNT = 0 。 以下のために(int型私= 0 ; iが< 10 ; ++ i)は、CNT + = TEMP [I]。 LL P = JC [CNT]。 以下のための(int型私は=0 ; I < 10 ; ++ I)、P / = JC [TEMP [I]]。 もし(TEMP [ 0 ]> = 1)P - =(P *は温度[ 0 ] / CNT)。 ANS + = P; 返します。 } のために(int型 I = 1 ; I <= NUM [X]; ++ I){ TEMP [X] = I。 DFS(X + 1 )。 } もし(NUM [X] == 0)DFS(X + 1 )。 } int型のmain(){ int型。 同時に(scanf関数(" %の1D "、&A)=!EOF){ NUM [A] ++ ; } JC [ 0 ] = 1 。 以下のために(int型 i = 1 ; iは= < 19 ; I ++)JC [i]はJCを= [I- 1 ] * I。 DFS(0 )。 coutの << ANS << てendl; リターン 0 ; }