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輸入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。但是反...