Tは、理由の制約のために、それは$暴力的なDPの$ O(T ^ 3)から抜け出すことは困難ではありません
しかし、私は30分を持っていると言われてみませんでしたか?
正の解決策は明らかに数学的な友人との組み合わせである場合
まず$ n個の、M $は負でもよいが、それは影響を与えませんでした、
正の混乱が右に行くためにすべてとして私たちは、それを扱うことができます
あなたは正しい方向に真に効果的なステップまたは他の2つは逆に上がるためにされていると考えることができます
Uは、歩行を設定数、D、Lの左、及び右R&LTであります
彼らは関係を満たします:
$ RL = M、UD = N、T = U + D + L + R $
$のM + N個の$のための手順の有効数ので、偶数$ $ TMNでなければなりません
残りのステップは、確実にするため、平均約上下平均、
$ 1つUDLR列挙$は、最終的な答えを得ることができます。
$ ANS = \和の\ limits_ {I = N、2 |(中)} ^ {TM} \ binom {T} {I} \ binom {I} {\ FRAC {} {2}} \ binom {TI} {\ FRAC {ティム} {2}} $
(皇帝の上に、そこからコピーします)
論理的にこの質問を言えば、終了する必要があります
しかし、熱狂的な人々のトピックはまだあなたについての病気:モジュラスが素数ではないかもしれません
しかし、それはexLucasのクラッチから私たちを救う、製品の品質の数が異なる数を指定する必要があります
ライン上の中国の剰余定理後
モジュラス$ pの素因数分解は、[i]は要素の各側に$は、$ ANSと呼ば答え、[i]は$であると考えられます
そして、当然の最終的な答えは、解決に相当します
$ \開始{ケース} X \当ans_1(MOD \ P_1)\\ X \当ans_2(MOD \ P_2)\\ X \当ans_3(MOD \ P_3)\\ ... \\ X \当ans_n(MOD \ P_N)\\ \端{ケース} $
これは、CRT、それを裸ではないでしょうか?取締役会は、逃げるために再びそれを打ちます。
EUの拡大は、あなたが合同式で設定フェルマーのほとんど理解のCRTと組み合わせた高速電力フロントを使用することができ、戦うために必要はありません。
// の#define R の#include <cstdioを> する#include <iostreamの> する#include <CStringの> する#include <ベクトル> の#include <cmath> の#define再登録 用いて 名前空間STDを、 const int型 N = 100005 ; typedefの長い 長いLL。 INT T、MOD、N、M。 LLのFAC [N]、ANS [ 1005 ]。 ベクトル < int型 > 事実。 int型のABS(INT X) { 戻り X < 0? - ; X:X } ボイドディビ(INT X) { int型 SQ = SQRT(X)+ 1 。 以下のために(int型 I = 2 ; iは= SQを<; iは++ ) { 場合(Xの%I == 0 ) { fact.push_back(I)。 一方、(X%のI == 0)は、x / = I。 } もし(x == 1)ブレーク。 } もし(!X = 1 )fact.push_back(X)。 } LL qpow(LLのB、LLのP LL) { LL RES = 1; =%のP。 一方、(b)は、 { もし、(B&1)RES =のRES *%のP。= A *%のP; B >> = 1 。 } 戻りRESと、 } LL C(LLのX、LLのY、LLのP) { 場合(X <Y)戻り 0 ; 戻り FAC [X] * qpow(FAC [Y]、P 2、P)%のP *はqpow(FAC [XY]、P 2、P)%のP。 } LLルーカス(LL X、LLのY、LLのP) { 場合(!y)のリターン 1 。 リターン C(X%以下のP、Yの%のP、P)*ルーカス(X / P Y / P、P)%をP; } ボイドgetfac(LLのP) { FAC [ 0 ] = 1 。 以下のために(int型 iは= 1 ; I <= T iが++ ) FAC [i]は = 1LL * iは[I-FAC * 1 ]%のP。 } int型のmain() { scanf関数(" %D%D%D%D "、&T、&MOD、&N、&M)。 N = ABS面(N)、M = ABS面(M)。 ディビ(MOD)。 INT SZ = fact.size()。 用(RE INT今= 0今++;今<SZ ) { INT P = 事実[今]; getfac(P)。 ため(再int型 I = N; iは= Tmの<; iは++ ) { もし、((中)および1 ||(TIM)&1)続けます。 LLのRES = 1 。 RESの =のRES *ルーカス(T、I、P)%のP *はルーカス(I、(中)/ 2、P)%のP *はルーカスチタン(Ti(TIM)/ 2、P)%のP。 ANS [今] =(ANS [今] + RES)%のP。 } } LL ANSS = 0 。 以下のための(再int型 I = 0; iはSZを<; iは++ ) { LL時間 = MOD / 事実を[I]。 LL RESS = qpow(回、事実[I] - 2 、事実[I])。 RESS =(RESS%の事実[I] +事実[I])%の事実[I]。 ANSS =(ANSS +倍* RESS * ANS [I])%MOD。 } COUT <<(ANSS + MOD)%のMOD << ENDL。 リターン 0 ; }