CF991Eバス番号

問題の意味の翻訳

あなたのデジタルシーケンス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 ; 
}

 

おすすめ

転載: www.cnblogs.com/Larry-Zero/p/11801902.html