1. 程式人生 > >【NOIP提高組2014】解方程

【NOIP提高組2014】解方程

@解方程@


@題目描述@

已知多項式方程:

a 0 + a 1 x + a 2 x 2
+ . . . + a n x n = 0

求這個方程在

[ 1 , m ] 內的整數解(n 和 m 均為正整數)。

輸入
輸入共 n + 2 行。
第一行包含 2 個整數 n , m , 每兩個整數之間用一個空格隔開。
接下來的 n+1 行每行包含一個整數,依次為 a 0 , a 1 , a 2 . . . a n

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

輸入樣例#1:
2 10
1
-2
1
輸出樣例#1:
1
1

輸入樣例#2:
2 10
2
-3
1
輸出樣例#2:
2
1
2

輸入樣例#3:
2 10
1
3
2
輸出樣例#3:
0

資料說明
對於 30 % 的資料: 0 < n 2 , | a i | 100 , a n 0 , m < 100
對於 50 % 的資料: 0 < n 100 , | a i | 10 100 , a n 0 , m < 100
對於 70 % 的資料: 0 < n 100 , | a i | 10 10000 , a n 0 , m < 10000
對於 100 % 的資料: 0 < n 100 , | a i | 10 10000 , a n 0 , m < 1000000

@分析1 - 30%資料@

因為根的範圍不是很大,我們可以逐個列舉根的值,代入多項式中判斷是否合法。

@分析2 - 50%資料@

寫高精度。注意多項式求值可以用秦九韶演算法(霍納演算法):

a 0 + a 1 x + . . . + a n x n = ( a 0 + x ( a 1 + x ( a 2... ( a n 1 + a n x )

從內往外算,可以只做O(n)次的高精度加法與O(n)次的高精度乘低精度

@分析3 - 70%資料@

【我太弱了只能想到50%……高精度最後還寫WA了……QAQ】
可以使用雜湊將值域範圍縮小。
具體來說,將整個多項式對某個質數p取模,得到

a 0 + a 1 x + a 2 x 2 + . . . + a n x n = 0 mod p

a i = a i mod p ,則有:

a 0 + a 1 x + a 2 x 2 + . . . + a n x n = 0 mod p

我們就省去了作高精度乘法的時間複雜度。然而因為雜湊是不確定性演算法,所以我們需要多選幾個模數。

為什麼這樣正確性高?考慮這樣一個事實:

相關推薦

NOIP提高2014方程

@解方程@ @解方程@ @題目描述@ @分析1 - 30%資料@ @分析2 - 50%資料@ @分析3 - 70%資料@ @分析4 - 100%資料@ @程

題解luogup1351 NOIp提高2014 聯合權值

define 題意 一個點 clu show truct lib ace can 題目鏈接 題意:給定一個無根樹,每個點有一個權值。若兩個點 \(i,j\) 之間距離為\(2\),則有聯合權值 \(w_i \times w_j\)。求所有的聯合權值的和與最大值 分析:

[noip]2014提高複賽day2 方程

#include <iostream> #include <cstdio> using namespace std; const long long u1=1000000007;//設為常量,不然70 long long n,m,a[5000],x,a

NOIP 2014方程 hash+秦九韶

3732 解方程 CODEVS 題目描述 Description 輸入描述 Input Description 輸入檔名為equation.in。 輸入共n+2行。 第一行包含2個整數n、m,每兩個整數之間用一個空格隔開。 接下來的n+1行每行包含

2017.07.10NOIP提高模擬賽B

font mic 集合點 之間 現在 problem 決定 family 打破 Summary   今天題目總體不是難,但是分數很低,只有100+10+30,其中第二題還是以前做過的,第一題設計數論,而且以前做過同一個類型的題目,比賽推了很長時間。第三題時以前做過的原題,

2017.07.11NOIP提高模擬賽B

span 結果 數組 運算 重要 eight 一點 對數 理解 Summary   今天的比賽打得還不錯,第一題被同桌灌輸的貪心,純模擬洗腦了,然後steal的看了一下,發現怎麽也對不了,一直在檢查。最後10分鐘才找出反例,推出動態規劃方程,沒有想到怎麽轉移,比賽就結束了

2017.07.14NOIP提高模擬賽B

noi net 處理 contest 比賽 size 很大的 pan 每天 Summary   這次比賽因為遲到了,少了很多時間,也受到了相應的懲罰,這是好的,是個標記牌,警醒著我。這次比賽的題目很難,也就是說,大家的得分都很低,總的來說,收獲還是很大的,因為有非常多的技

2017.08.05NOIP提高模擬賽B

第一題 mar pan soft 提高 題目 mil font cal Summary   這次比賽打得非常差,第一題我以為是個難題,於是推了一下就沒再去想了,然而考場上一堆人AC。第二題狀態設錯了,導致結果有後效性。結束後pascal卡常卡了36次。第三題別人n&sup

2017.11.25NOIP提高模擬賽A

mes turn 我們 一個 線段樹 getc stdout 線段樹+離散化 提高 2017.11.25【NOIP提高組】模擬賽A組 T1 3467. 【NOIP2013模擬聯考7】最長上升子序列(lis) T2 3468. 【NOIP2013模擬聯考7】OSU!(osu)

[jzoj]2018.08.09NOIP提高模擬賽C:解題報告

目錄: 1.種類分配(Breed Assignment) 2.資訊傳遞(Message Relay) 3.計算周長(Perimeter) 4.找奶牛(Find the Cow!) 1.種類分配(Breed Assignment) 題目:

2018.12.08NOIP提高模擬B 總結

與紀中的一群大佬比賽,竟然水到了 R a k 1

2018.12.08NOIP提高模擬B JZOJ 100042 保留道路

描述 很久很久以前有一個國家,這個國家有N個城市,城市由1,2,3,…, N N N標號,城市間有M

2018.12.15NOIP提高模擬B JZOJ 100047 基因變異

題目 JZOJ 100047 基因變異 思路 設 x   x

2018.12.15NOIP提高模擬B JZOJ 100046 收集卡片

題目 JZOJ 100046 收集卡片 思路 維護一個區間,列舉結束訂閱的時間判斷能否晚點訂閱,開一個變數模擬指標維護即可。 ——鳴謝 w

2018.12.15NOIP提高模擬B 題目

T1 收集卡片 一個長度為 n n n的字串,每次可以刪除一段連續的子串,求最小刪除子串長度和使得刪

2018.12.15NOIP提高模擬B

解題報告 JZOJ 100046 收集卡片 題目 分析 程式碼 JZOJ 100047 基因變異 題目 分析 程式碼 JZOJ 100044 abcd 題目

2018.12.08NOIP提高模擬B

遲到的解題報告 JZOJ 5123 diyiti 分析 程式碼 JZOJ 100042 保留道路 題目大意 分析 程式碼 JZOJ 3518 進化序列 題目大意