第1行包含乙個整數n。第2行包含乙個整數m。第3行到第n+2行,每行包含兩個整數,分別表示ki和pi。兩個整數之間用乙個空格隔開。第3行的資料對應i=1,第n+2行的資料對應i=n。
僅一行,包含乙個整數,表示方程的整數解的個數。
3
15012-
1212
178
它的xxx需要從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...