HDU - 1427スーパー24ポイント(DFS、暴力)

スピード24ポイント

制限時間:1000分の2000 MS(Javaの/その他)メモリの制限:32768分の65536 K(Javaの/その他)
の合計提出(S):7037受理提出(S):1857

 

問題の説明

私はほとんどの人が演じてきたと信じて24ポイントを高速化。これは、A(1)、2,3,4,5,6,7,8,9,10、J(11)、Q(12)、K(13)を含む、あなたのランダムな4枚のカードを与えることです。「 - 」、「*」、「/」オペレータ、及び最終的な演算結果が24になるように丸括弧は、(それぞれの数は一度だけ使用されなければならない)、動作の順序を変更するだけ「+」を必要とします。ゲームは簡単ですが、状況は何の解決策は、多くの場合、非常に落ち込ん人ではありませんが発生しました。あなたの仕事は解決できるかどうかを判断するために、ランダムに生成された4枚のカードの各グループのためです。我々は特に指定し、計算の全体のプロセスは、小数点以下を表示することはできません。

 
入力
ライン当たりの入力データの各セットは、4枚のカードを与えられます。
 
出力
出力の一つの行に対応する入力データの各セット。もし出力の可解性は「はい」、そして解無し出力「いいえ」。
 
サンプル入力
2 3 6
3 3 8 8
 
サンプル出力
はい
ノー
 
考え
操作の無い一連以来、私たちは、演算のための任意の2つの数値を選択することができます。
 
#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、

int型 [ 4 ]。
BOOL VIS [ 4 ]、OKフラグ。
ボイド DFS(int型CUR)
{ 
    / *  
    COUT << CUR << 'の\ n'; 
    {(;私は4 <++ iが0 = INT)のための
        COUT << [I] <<」「。
    } 
    COUT << 'の\ n'; * / 
    場合(OK)
         のリターン;
    場合(CURの== 3 
    { 
        ためint型 i = 0 ; iが< 4 ; iは++ 場合(VIS [I] && [I] == 24 
                OK = 
                
        返します
    } 
    のためのint型 I = 0 ; iが< 4を私は++; 場合(VIS [I])
             のためのint型 J = I + 1、J < 4 ; J ++ 場合(VIS [J])
                { 
                    VIS [j]は = ;
                    INT X = A [i]は、Yは、= [j]を。
                    もし(Y!=0 && X%のYの== 0 
                        [I] = X / Y、DFS(CUR + 1 )。
                    もし(X!= 0 && Y%のXの== 0 
                        [I] = Y / X、DFS(CUR + 1 )。
                    [I] = X - Y、DFS(CUR + 1 )。
                    [I] = Y - X、DFS(CUR + 1 )。
                    [I] = X + Y、DFS(CUR + 1 )。
                    [I] = X * Y、DFS(CUR + 1 )。
                    [I] =バツ; 
                    VIS [j]は = ; 
                } 
} 

int型のREAD()
{ 
    チャー C [ 4 ] [ 4 ]。
    INT RES = scanf関数(" %S%S%S%S "、C [ 0 ]、C [ 1 ]、C [ 2 ]、C [ 3 ])。
    以下のためにint型 i = 0 ; iは< 4 ; iは++ 
    { 
        もし、(C [i]が[ 0 ] == ' A ' 
            [I]= 1 ;
        他の 場合([i]は[C 0 ] == ' J ' 
            [I] = 11 そう であれば(C [i]が[ 0 ] == ' Q ' 
            [I] = 12 そう であれば(C [i]が[ 0 ] == ' K ' 
            [I] = 13 それ以外の 場合(C [i]が[ 0 ] == ' 1 '
            [I] = 10 
            [I] = Cを[I] [ 0 ] - ' 0 ' 
    } 
    のmemset(VIS、はsizeof (VIS))。
    OK = ;
    返すRESを。
} 

int型のmain()
{ 
#ifndefのONLINE_JUDGE 
   // freopenは( "in.txt"、 "R"、STDIN)。
   // freopenは( "out.txtを"、 "W"、STDOUT)。
#endifの
    一方(READ())
    { 
        / * (I = 0 int型、私は4 <; I ++は)のために
            COUT << [I] <<
        coutの<<てendl; * / 
        DFS(0 )。
        プット(OK" はい"" ノー" ); 
    } 
}

 

 
 

おすすめ

転載: www.cnblogs.com/YY666/p/11276561.html