NOI 2001 第二試 方程的解數

2021-08-16 04:28:52 字數 2244 閱讀 7086

看不清的看下面↓

已知乙個n

nn元高次方程

其中,x

ix_i

xi​是未知數,k

ik_i

ki​是係數,p

ip_i

pi​是指數。方程中的所有書均為整數。

假設1 ≤x

i≤m≤

150,1≤

i≤

n1\leq x_i\leq m\leq 150,1\leq i\leq n

1≤xi​≤

m≤15

0,1≤

i≤n,求這個方程的解的個數

第1行包含乙個整數n。第2行包含乙個整數m。第3行到第n+2行,每行包含兩個整數,分別表示ki和pi。兩個整數之間用乙個空格隔開。第3行的資料對應i=1,第n+2行的資料對應i=n。

僅一行,包含乙個整數,表示方程的整數解的個數。

3150

1 2-1 2

1 2可能一看到這個題想到的就是直接暴力列舉

則時間複雜度為o(m

6)

o(m^6)

o(m6)但m

<

=150

m<=150

m<=1

50計算得出時間複雜度為o

(1.1390625×1

013

)o(1.1390625\times 10^)

o(1.13

9062

5×10

13)暴力列舉鐵定超時,但是我們可以把未知數折半,將一半的未知數移到右邊,只要左邊的結果等於右邊的結果的相反數,則這一組解是合法的。那麼這樣的時間複雜度就降為了

o (2

m3

)o(2m^3)

o(2m3)

可以通過此題。

對於當中方案的儲存,可以採用以下三種方法(我目前知道的)

1.開乙個hash表(本文採用的是這種方法)2.將左邊得到的所有結果存入乙個陣列中,再排序+二分查詢,查詢右邊所有答案在左邊出現的總次數

3.與第二種類似,不過統計方案數的時候採用雙指標。

至於時間複雜度,我不會算,都是dalao講的。。。

#include

#define p 4000037

//要開乙個很大的質數

#define hash(a) (a)%p

//hash函式

#define r(i,a,b) for(int i=a;i<=b;i++)

//從a到b

using

namespace std;

int h[p][2

],a[7]

,b[7

],n,m,mid;

//h[i][0]是這個格仔對應的數字,h[i][1]是這個數出現的次數,a是係數,b是指數,mid是n的一半

long

long ans;

//最終答案

intabs

(int x)

//因為中間計算可能有負數,所以用到abs函式

intksm

(int x,

int y)

//ksm函式,用於求x的y次方。也可以開乙個二維陣列來存也行,效率還是快速冪快一點。當然如果你懶,你也可以直接用pow函式。

return ans;

}void

init()

voidtp(

)//特判,如果只有乙個未知數,且係數為0,則方程正好有m組解(x=1..m),否則無解

intfind

(int x)

//查詢x在hash表的位置

intin

(int x)

//將x元素加進hash表

boolpd(

int x)

//判斷x這個元素是否在hash表內

void

dfs1

(int dep,

int sum)

//搜前半段

void

dfs2

(int dep,

int sum)

//後半段

else

r(i,

1,m)

dfs2

(dep+

1,sum+a[dep]

*ksm

(i,b[dep]))

;//繼續搜

}int

main()

}

NOI 2001 方程的解數

已知乙個 n 元高次方程 k 1x 1 k 2x 2 k nx n 0 要求所有的 x i 取值範圍為 1,m 且為整數,求方程的解數。發現 150 6 複雜度 自然能想到折半搜。先搜前一半的所有可能的答案,存進雜湊表裡,然後搜後一半的答案,在雜湊表裡查相反數,如果存在就累加上個數。然後 map 就...

方程的解 NOI導刊2010提高

題目描述description佳佳碰到了乙個難題,請你來幫忙解決。對於不定方程a1 a2 ak 1 ak g x 其中k 2且k n,x是正整數,g x x x mod 1000 即x x除以1000的餘數 x,k是給定的數。我們要求的是這個不定方程的正整數解組數。舉例來說,當k 3,x 2時,分別...

二次同餘方程的解

本文 今天要討論的問題是解方程 引理 證明 由費馬小定理,引理 方程有解當且僅當 定理 設 剩餘方程 證明 由 號用了費馬小定理和 在演算法實現的時候,對 題目 include include include include include include include include inclu...