【NOIP2014]方程式の解(夏ACM1 H)

問題の意味

式Aの0 + A 1 X + 2 X 2 +⋯A N- X N- 0 = [M、1]溶液中で。

以下のための1。0 0 データの%:0 <N < - = 100、| I | <= 10 10000N- ≠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])を 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/sto324/p/11222754.html