我們可以把這個方程一半的加數移到右邊去,例k1x1p1+k2x2p2+k3x3p3=0移項變成k1x1p1+k2x2p2=-k3x3p3可以減少我們列舉x的次數,用雜湊表存左邊求出的情況有哪些,在右邊列舉的時候我們就可以判斷是否和左邊相等,然後加上次數就可以了。
#include#define maxn 4000003
using namespace std;
int z,a[maxn][2],n,k[7],p[7],m,ans;
int ksm(int x,int y)//快速冪
return s;
}int hash(int x)
int locate(int x)
void insert(int x)
void dfs(int x,int sum)
void bfs(int x,int sum)
else
for (int i=1;i<=m;i++)
bfs(x+1,sum+k[x]*ksm(i,p[x]));//列舉x
return;
}int main()
dfs(1,0);//求左邊的
bfs(n/2+1,0);//把這個方程分成兩段求,這裡求右邊
printf("%d",ans);
}
SSL1127 方程的解數
第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列...
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...