NOIP2014提高組 解方程

2021-08-28 04:01:54 字數 1343 閱讀 2547

noip2014 提高組 day2 試題。

已知多項式方程:

a0+a1^x+a2^x2+…+an^xn=0

求這個方程在[1,m]內的整數解(n 和 m 均為正整數)。

輸入共 n+2 行。 

第一行包含 2 個整數 n、m,每兩個整數之間用乙個空格隔開。 

接下來的 n+1 行每行包含乙個整數,依次為 a0,a1,a2, … ,an 。 

第一行輸出方程在[1,m]內的整數解的個數。 

接下來每行乙個整數,按照從小到大的順序依次輸出方程在[1,m]內的乙個整數解。

輸入

2 10  1 

-2 1

輸出

1

輸入

2 10  2 

-3 1

輸出

2  1 

2

輸入

2 10  1 3 2

輸出

0
【資料範圍】 

對於 30% 的資料,0解析:

剛看到題著實被嚇到了。。。

後來向dalao請教後發現又是一道用非正常思路解的題。。。

首先對於30%的資料暴力帶進去模擬。

對於50%的資料用高精度。

對於70%的資料。做法就是對整個方程取模幾個值,如果取模後等於0就認為方程等於0,直接列舉方程的解判斷即可由於使用了取模所以避開了高精度。

對於100%的資料。70%的資料就已經提示了我們。

首先令:

由於當所以當時,可能有

為了保證正確性,我們多取幾個質數分別進行驗證。

又由於:

所以對於每個質數,我們只用驗證

**:

#include using namespace std;

const int p[7]=;

const int max=1000010;

int n,m,ans;

int num[105][7],vis[max],f[1005][7];

inline void get_int(int id)

inline bool check(int x,int y)

int main()

if(tag) ans++,vis[i]=1;

} cout<

for(int i=1;i<=m;i++) if(vis[i]) cout<

return 0;

}

NOIP2014提高組 解方程

題目傳送門 習慣性放洛谷的鏈結 這一題看起來資料範圍巨大無比,需要使用各種玄學方法,看了題解後整個人懵逼了.對於30 的資料,0 該資料範圍直接高精度,在 1,m 的範圍內暴力列舉即可。時間複雜度為 o n m len 其中 len 表示高精度計算過程中數字的位數。對於50 的資料 0 我們考慮用秦...

NOIp2014提高組 解方程

思路 係數的範圍有 10 但是用高精度做顯然不現實,因此可以考慮乙個類似於 雜湊 的做法,對方程兩邊同時取模,如果取的模數足夠多,正確率就很高了。中間對多項式的計算可以使用 o n 的秦九韶演算法。然而,我的模數試了很多種都不能a,看了題解發現只要對 1000000007 乙個數取模就ac了?1 i...

NOIP2014提高組 解方程

對於30 的資料,n 2,暴力帶入試解。對於50 的資料,ai很大,結合高精乘法和霍納演算法暴力代入試解。高精乘法,時間複雜度是很恐怖的而且我不懂寫。注意到雖然ai很大,但是m還是在int範圍內的。繼續考慮暴力試解。考慮到0 mod k 0 k n 那麼當f x 0時,f x mod k 0。但是反...