組合せ論--cf991E

/ * 
1がある場合、この1つが存在しなければならない
すべてのケースを列挙するために、それぞれの場合の計算は、別のオペレータエクストラ
* / 
の#include <ビット/ STDC ++ H.>
 使用して 名前空間STDと、
 の#define LLロングロング
LL ANS 【、N-、CNT 。11 ]、F. [ 20は、] [ 11 ]; 

LL Calcの(){ 
    LL RES = 1。においてlen = 0 ;
     のためのINT I = 1 ; I <= 9 ; I ++)LEN + = A [ I]; 
    RES = F. [LEN];
     のためのINT I = 1 ; I <= 9 ; I ++は
        RES/ = F [I]]。
    以下のためにint型 I = 1 ; I <= [ 0 ]; iは++ 
        RES * =(I-+ lenの1 )。
    RES / = F [ 0 ]]。
    リターンのres; 
} 

int型のmain(){ 
    F [ 0 ] = 1 (LL i = 1 ; iは= < 18 ; iが++)F [I] =私は[I-Fを* 1 ]。
     
    cinを >> N;
    一方、(N){ 
        CNT [N 10 ] ++ 
        N / = 10; 
    } 
            
    のための([ 0 ] =(CNT [ 0 ]!= 0); [ 0 ] <= CNT [ 0 ] [ 0 ] ++ のための([ 1 ] =(CNT [ 1!] = 0)[ 1 ] <= CNT [ 1 ] [ 1 ] ++ のための([ 2 ] =(CNT [ 2 ] =!0); [ 2 ] <= CNT [ 2 ]。 [ 2 ] ++ のための([ 3 ]!=] =(CNT [ 3 0); [ 3 ] <= CNT [ 3 ] [ 3 ] ++ のための([ 4 ] =(CNT [ 4 ] =!0); [ 4 ] <= CNT [ 4 ] [ 4 ] ++ のための([ 5 ] =(CNT [ 5 ] =!0); [ 5 ] <= CNT [ 5 ]、[ 5 ] ++ のための(A [ 6 ] =(CNT [ 6 ] =!0); [ 6 ] <= CNT [ 6 ]、[6  ] ++のための([ 7 ] =(CNT [ 7 ] =!0); [ 7 ] <= CNT [ 7 ]、[ 7 ] ++ のための([ 8 ] =(CNT [ 8 ]! = 0); [ 8 ] <= CNT [ 8 ]、[ 8 ] ++ のための([ 9 ] =(CNT [ 9 ] =!0); [ 9 ] <= CNT [ 9 ]。 [ 9 ] ++ 
        ANS + = CALC()。
    coutの << ANS <<'\ nを" ;    
}

 

おすすめ

転載: www.cnblogs.com/zsben991126/p/11110123.html