USACOコンビネーションロック

羅区P2693

https://www.luogu.org/problemnew/show/P2693

JDOJ 2375

https://neooj.com:8082/oldoj/problem.php?id=2375

タイトル説明

ファーマージョンの牛が被害の多くにつながった、過去に彼の農場から脱出し続けました。再び彼らの脱出を防ぐために、彼は牛がドアを開け放牧防ぐために、多数のロックを買いました。

ファーマージョンは彼の牛は非常にスマート知っているので、彼は、彼らは単に、簡単にロック解除できる数値の多くの異なる組み合わせを試していないことを確認したかったのです。ホイールは、円形であるN 1と隣接しているので、3つの回転ロックは、デジタル1..N(1 <= N <= 100)は、上記のそれぞれに存在します。鍵屋を設定されている「デフォルト」の数の組み合わせがあり、ファーマージョンのロックを解除することができる2つの数字の組み合わせが設定されているがあります。しかし、各ターンテーブル番号に特定のフォールトトレランスロックの程度、その結果は、それぞれのデジタル数字との有効な組み合わせは、2つの位置の距離の範囲内であるが、ロックが開きます。

番号の組み合わせファーマージョンは(1,2,3)である場合、例えば、予め設定された数の組み合わせが(4,5,6)、(1,4,5)に設定されている(このターンテーブルとファーマージョンとしてこれは十分に近いので)十分な数の組み合わせ)または(2,4,8)(及びプリセット番号の組み合わせを閉じます。それは十分に閉じていない任意の数の組み合わせであるため、ロックを開くことはありませんが、(1,5,6)に注意してください。

数値の組み合わせは、組み合わせのプリセット番号を与えられ、ファーマージョンは、異なる数の組み合わせの数をロック解除することができる計算します。数が発注され、(1,2,3)と(3,2,1)が異なっています。

入出力フォーマット

入力フォーマット:

 

最初の行:整数N.

2列目:スペースで区切られた3つの整数、ファーマージョン番号の組み合わせ。

第三行:スペースで区切られた3つの整数、予め設定された番号の組み合わせ(ファーマージョンとおそらく同じ番号の組み合わせ)。

 

出力フォーマット:

 

最初のライン:異なる数の組み合わせの総数は、ロックを解除することができます。

 

サンプル入力と出力

入力サンプル#1:  コピー
50 
1 2 3 
5 6 7
出力サンプル#1:  コピー
249 

暴力の問題。
なぜ暴力を考えますか?3サイクルの総数は、データの量が100を超えない、時間は空間がないので、爆発しないであろう。
アイデアは、始動ロックをシミュレートダブルディスクをシミュレートするために、配列を開くことです。そして、+列挙付した数字に従ってください。
しかし、波をデバッグなしA、。
醜いコードが出て作られていない、問題の解決策を参照してくださいここでは皆のために何を解決することをお勧めがあり、
この問題の難しさは、処理ディスク以外の何ものでもありません、私の考えは一緒に連続した一連の数を乗算することで、しかし、数学的な思考の方法の人々の使用は、最初に非常に巧妙な方法で処理されたディスクにして、A-2、A + 2列挙からの3次元配列を(簡単に列挙するために)開かれた:i + nはnが再び繰り返しが開いた場合1-nから弾性率、従って確保数は、つまり、任意の対応する配列の添字を有しており、この位置はANS ++で開かれていない場合、その後、列挙を開始し、マークを埋め込みます、最後に簡単な交流。
兄はないに対して、兄です。
コード:
書式#include <cstdioを> 
する#include <アルゴリズム>
 使用して 名前空間はstdを、
int型nは、ANS;
INT 、B、C、X、Y、Z。
INTの ロック [ 110 ] [ 110 ] [ 110 ]。
INT メイン()
{ 
    scanf関数(" %のD "、&N)
    scanf関数(" %D%D%D%D%D%D "、&​​、&B、&C、およびX&Y、およびZ)。
    INT I = A- 2、iは<= A + 2 ; I ++ のためのINT J = B-2 ; J <= B + 2、J ++ のためのINT K = C- 2 ; K <=のC + 2 ; ++ k個場合ロック [(iはN +)%のN] [(J + N)%のN] [( K + N)%のN] == 0 
                { 
                    ANS ++ ロック [(iがn + 1)%のN] [(J + N)%のN] [(K + N)%のN] = 1 
                } 
    のためのint型 I = X- 2 ; iが= X + < 2 ; iが++ のためにINT J = Y- 2 ; J <= Y +2 ; J ++ のためのINT K = Z- 2、K <= Z + 2 k個++; 場合ロック [(J + N)%のN] [(K + N)%のN [%のN(iはN +)] ] == 0 
                { 
                    ANS ++ ロック [(iがn + 1)%のN] [(J + N)%のN] [(K + N)%のN] = 1 
                } 
    のprintf(" %dの" 、ANS)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/fusiwei/p/11183296.html