SSL1127 方程的解數

2021-10-08 07:16:42 字數 1393 閱讀 3432

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

15012-

1212

178
它的x

xx需要從1−m

1-m1−

m列舉,所以我們可以想到dfs

dfsdf

s思路:

由於o (m

n)o(m^n)

o(mn

)次方會爆,所以我們考慮折半

第一半求出來的值存進hash表裡,並且統計出現個數(x1=1,x2=2,x3=3和x1=3,x2=2,x3=1是不相同的解)

第二半求出來的值需要取相反數(等式的性質),然後在hash表裡判斷是否出現過,出現過就加上之前統計出現的數

#include

#include

#include

#include

using

namespace std;

long

long p=

4000037

;long

long m,n,a[11]

,c[11

],mid,h[

4000037][

2],k;long

long

pow1

(long

long x,

long

long y)

long

long

fin(

long

long x)

void

inh(

long

long x)

bool

finh

(long

long x)

void

dfs1

(long

long dep,

long

long sum)

else

}void

dfs2

(long

long dep,

long

long sum)

}else

}int

main()

return0;

}

SSL 1127 方程的解數

我們可以把這個方程一半的加數移到右邊去,例k1x1p1 k2x2p2 k3x3p3 0移項變成k1x1p1 k2x2p2 k3x3p3可以減少我們列舉x的次數,用雜湊表存左邊求出的情況有哪些,在右邊列舉的時候我們就可以判斷是否和左邊相等,然後加上次數就可以了。include define maxn ...

ssl1127 方程的解數 HASH,dfs

我只是湊數的。第1行包含乙個整數n。第2行包含乙個整數m。第3行到第n 2行,每行包含兩個整數,分別表示ki和pi。兩個整數之間用乙個空格隔開。第3行的資料對應i 1,第n 2行的資料對應i n。僅一行,包含乙個整數,表示方程的整數解的個數。3 150 1 2 1 2 1 2聽真正的dalao講的 ...

方程的解數 SSL 1127 並查集

第1 11行包含乙個整數n nn。第2 22行包含乙個整數m mm。第3 33行到第n 2 n 2n 2行,每行包含兩個整數,分別表示kiki ki和p ipi pi。兩個整數之間用乙個空格隔開。第3行的資料對應i 1 i 1i 1,第n 2 n 2n 2行的資料對應i n i ni n。outpu...