問題の意味
式Aの0 + A 1 X + 2 X 2 +⋯A N- X N- 0 = [M、1]溶液中で。
以下のための1。0 0 データの%:0 <N < - = 100、| I | <= 10 10000、N- ≠0、M <10 。6 0
問題の解決策
トピックは、ヒントを暗示しているためsxk兄は、私には彼の考えを言われた:需要(MOD 10007)は、すべてのソリューション10007パーセントをxはモード方程式であったならば、私はそれをします。
彼は[0,10006]溶液最初モジュロ係数、および取得を、前記溶液がXであれば0、次いで、(X 0、場合拡大様々な電力ので、10007)も溶液でありますそれは元の方程式となり、10007係数が出て死ぬがあります。
だから私はA、データを見て、私は死にますか?プレシジョン???私たちは、高速側エッジ剰余を読んで読んで、問題が発生したしたことを使用することができ、この愚かな質問を、私は[鶏料理]を忘れてしまいました
しかし、私はモード方程式が爆発する可能性係数を計算していない左は、イベントが最後の0を取得し、複数のモジュロ10007であるが、これは適切なソリューションではないということであったとしても、当初から懸念を生成します。
幸いなことに、これが正しいものであるか、あるいは自分の顔を作ります。
列挙するために困難、そして最終的に人生をノックしていなかったので、後に、私は、番号[M、1]、複数のモジュラスを取って考えると、ホーナー法を使用するように思ったが、それは横に大きく逸れてしまいました。
今私は、実際には、非常に簡単だと思うこと。
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 #defineっ長い長い のconst int型 MOD1 = 10007 ; const int型 MOD2 = 十億七。 const int型 MAXM = 1000005 ; INTのN、M。 LL [ 105 ]、B [ 105 ]。 int型ANS [MAXM]。 ブール CX [ 10010 ]。 インラインボイド読み取る(int型I){ LL X = 0、Yが= 0 ; int型 F =0 ; チャー CH = GETCHAR()。 一方、 {F | =(CH ==(isdigit(CH)!)' - '); CH = GETCHAR();} ながら(isdigit(CH)){X = X * 10%のMOD1 + CH- ' 0 '。 Y = Y * 10%のMOD2 + CH- ' 0 ' ; CH = GETCHAR();} 場合(F)X = -x、yは= - yは、 [I] = xと; B [I] = yと、 } BOOL {(LLのX)いい LL RET = 0 。 以下のための(int型 ;〜私i-- I = N ) RET=(RET * X + [I])%MOD1。 返します!RET; } ブールsto324(LLのX){ LL RET = 0 。 以下のために(int型 I = N;〜I; i-- ) RET =(RET * X + B [i])と%のMOD2。 返します!RET; } int型のmain(){ scanf関数(" %D%dの"、&N、&M)。 以下のために(int型 i = 0 ; iが<= N; iは++ )(I)を読み出します。 // (I = 0 int型、iが<= N; iが++)のためのprintf( "%D%D \ n"は、[I]、B [I])。 以下のための(int型I = 0 ; I <MOD1; iは++ ) 場合(ニース(I)) CX [I] = 真。 以下のために(int型 I = 1 ; I <= M; iは++ ) 場合(CX [I%MOD1] && sto324(I)) ANS [ ++のANS [ 0 ] = I。 以下のために(int型 i = 0 ; iが=のANS [< 0 iは++;] ) のprintf(" %Dを\ n " 、ANS [I])を }