スピード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?" はい":" ノー" ); } }