P2312の解決の方程式
実際には、この質問は1元N式の区間[1、M]の整数解を求めています。
我々は、結果がゼロではない見ることができるの多項式に、[1、M]のすべての整数を列挙する。
あるスキルがあるホーナー法は、読者が自分自身を見て学んでいます。
時間Oの複雑さ(N * M)。
そして、あなたは30ポイントを得ることができる必要があります。
私たちは、これらの数字は、オープン精度に大きすぎることがわかりました。そして、あなたは喜んで50分を要した - Oの複雑さ(N * M *長さ)が爆発します。
ここでは、ハッシュのアイデアを検討し、その結果の剰余(好ましくは、大きな素数P)が、結果はこれが解決することをゼロ手段である場合。
これはどちらかのソリューションであるか、結果がpの倍数であるので、結果は、ゼロであるべき場合(これの確率は、検討する必要がないように、非常に小さな、小さな十分です)。
あなたの運が本当に悪い場合には、いくつかの異なる素数を試してみてください。これがない作業を行う場合は、宝くじを買うことができるの#include <iostrea A使って 名前空間はstdを、
CONST 長い 長 P = 1E9 + 7 。 長い 長 N、M、[ 110 ]年[ 1000010 ] CNT。 長い 長いリード(){ // モジュロに読み取る 長い 長い RET = 0、F = 1。; CHAR CH = GETCHAR(); ながら(!isdigit(CH)){ IF(CH == ' - ')F = - 1。 。 CH = GETCHAR()。 } 一方、(isdigit(CH)){ 右 =(右* 10 + CH - ' 0 ')%のP。 CH = GETCHAR()。 } 戻り右* F; } INT メイン(){ CIN >> N >> M。 以下のために(長い 長い私は= 0 ; iが<= N; iが++ ){ A [I] = リード(); //これは直接読み取ることができません(これは、高速読み取りではありません) } 以下のために(長い 長い私= 1 ; iが<= M; I ++ ){ 長い 長 X = I、FX = 0 。 // 秦九韶算法 ための(長い 長い J = N; J> = 0 ; j-- ){ FX =(([J] + FX)* X)%のP。 } もし(FX == 0 ){ 年[ ++ CNT] = X; } } coutの << CNT << てendl; 以下のための(長い 長 iは= 1 ; iが<= CNT; I ++ ){ COUT << ANS [I] << ENDL。 } リターン 0 ; }