タイトル翻訳:
個体数N 1-Nの数がありますが、それらはすべてが彼らの報告書によると、「自分の左をキューイング者の数と、自分のラインの右側との差の絶対値を」覚えて、「あなた自身は、私は数や配置を左に「愛の差の絶対値の彼の右配置の数。彼らの報告書によると、いくつかの方法があり、元の配列を取得してください。しかし、10 ^ 9 + 7を法にしてください、答えは、時には非常に大きくなるので。また、そのレポートは間違っている可能性があり、何の可能な配置方法はありませんし、出力0をしてください。
範囲:
1≦N≦10 ^ 5。0≦あい≦N-1です。
実際には、問題の意味は、このような方法で変換することができ、シーケンス障害があり、ポストは増加の法則かどうかを特定のソート裁判官を満たすためにあなたを必要とし -
〜を理解していませんか?
私たちは、すべての人の位置が不明である、と考えることができますが、それらは例えば、相対的な位置を持っています:
1 1 1 1 1 1 1 1 1 1 1
私が見た曲がった「1」それは、我々がここで質問の意味を知ることができます(あなたが右を見ている必要があります)愛= | 2-8 | = 6
これは、この処理を行います。
1 1 1 1 1 1 1 1 1 1 1
ここに愛= | 8-2 | = 6
各ポイント愛が与えられているので、我々は知ることができます -
1 1 1 1 1 1 1 1 1 1 1
二つの等しい点に配置されたときAiが交換可能である、プログラム全体は2 ^(N / 2)でなければなりません。nが奇数の場合、すなわち、最も個人の途中で、その愛に0であるので、交換可能ではない位置を行い、N / 2、それはそれをあきらめます。
私たちは、サンプルのセットを見てみましょう。
5
24402
答えは、4であり、わずか2 ^(N / 2)個です。しかし、なぜでしょうサンプル出力0それの次のセット?それは愛に右であるとは限らないので、あなたは判断する必要があります。判断は、慎重にあなたは、あなたが見つける愛の真ん中に小さく、より多くの人々は、ほとんどの半ばまで、唯一の0または1であり得ることを発見し、それを少しプッシュします、非常に単純なポイントです。
0 2 2 4 4 8 8 ......
1 1 3 3 5 7 7 ......
はい、それは増加シーケンスの始めに言われています!私達はちょうどライン上で11と入力愛行に正しい配列比較でシーケンスを与えます
Taccaコードを提供して弱い弱いです:
書式#include <stdio.hに> する#include <アルゴリズム> 使用して 名前空間はstdを、 const int型 MOD = 1E9 + 7 。 int型 NUM [ 100005 ]、[ 100005 ]。 無効 INITを(INT X) { 場合(Xの%2 == 0 ) のための(int型 i = 1 ; iが= xを<; I + = 2 ) { [I] = I。 [I + 1 ] = [I]を、 } 他 用(int型 I = 2 ; iが= xを<I + = 2 ) { [I] = I。 [I + 1 ] = [I]を、 } } int型のmain() { int型 N、K = 1 。 scanf関数(" %のD "、&N) INIT(N) 以下のために(int型 i = 1 ; iが<= N; iは++ ) scanf関数を(" %のD "、&NUM [I])。 ソート(NUM + 1、NUM + 1個の + N)。 以下のために(int型私= 1 ; iが<= N; iが++ ) 場合([I] =!NUM [I]) { のprintf(" 0 " )。 リターン 0 ; } 長い 長い ANS = 1 。 N / = 2 。 一方、(N-- ) ANS = ANS * 2%のMOD。 printf(" %のLLD " 、ANS)。 リターン 0; }
私はロス・バレーをお勧めします。https://www.luogu.org/space/show?uid=88557