poj 1186 方程的解數

2021-06-21 06:34:02 字數 1817 閱讀 3484

方程的解數

time limit:15000ms

memory limit:128000k

total submissions:6393

accepted:2198

case time limit:5000ms

description

已知乙個n元高次方程: 

其中:x1, x2,...,xn是未知數,k1,k2,...,kn是係數,p1,p2,...pn是指數。且方程中的所有數均為整數。 

假設未知數1 <= xi <= m, i=1,,,n,求這個方程的整數解的個數。 

1 <= n <= 6;1 <= m <= 150。 

方程的整數解的個數小於2

31。 

★本題中,指數pi(i=1,2,...,n)均為正整數。 

input

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

output

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

sample input

3

1501 2

-1 2

1 2

sample output

178
source

noi 01

初學hash做的第一道題,基本是照搬別人的程式。。。。。。看了一遍,自己敲了一遍,發現這是最普通的那種開放定址加線性探查,然後期間用官方的pow函式死活不過,於是最後妥協了自己寫的。。。。。

就是把算式剖開兩半,然後對前面三個的結果做hash,之後對後面三個的結果的取反找hash,然後如果加起來是0那就是解。。感覺這個方法比較好,所以也記錄一下。

#include #include#include #include #include #define max 4444444

using namespace std;

void left_ser(int d, int s);

void right_ser(int d, int s);

void insert_hash(int s);

int hash(int s);

int getpow(int x, int p);

struct hashhash_t[max];

int use[max] = ;

int mid, n, m, ans;

int k[11], p[11];

int main()

ans = 0;

mid = n >> 1;

left_ser(0, 0);

right_ser(mid, 0);

printf("%d\n", ans);

return 0;

}void left_ser(int d, int s)

for (i = 1;i <= m;i ++)

}void right_ser(int d, int s)

return;

}for (i = 1;i <= m;i ++)

}void insert_hash(int s)

int hash(int s)

}return temp;

}int getpow(int x, int p)

return tmp;

}

poj 1186 方程的解數

題目描述如下 總時間限制 15000ms 記憶體限制 128000kb 描述 已知乙個n元高次方程 其中 x1,x2,xn是未知數,k1,k2,kn是係數,p1,p2,pn是指數。且方程中的所有數均為整數。假設未知數1 xi m,i 1,n,求這個方程的整數解的個數。1 n 6 1 m 150。方程...

POJ 1186 方程的解數

一道資料結構的水題。題意為給予乙個最多含六個未知數的方程k1 x1 p1 k2 x2 p2 k3 x3 p3 k4 x4 p4 k5 x5 p5 k6 x6 p6 0 求其整數解的個數。其中x1,x2.x6均大於等於1小於等於m m為輸入的乙個正數,最大150最小1 而且保證過程計算小於2 31。到...

poj1186 方程的解數

題目鏈結 已知乙個n元高次方程 其中 x1,x2,xn是未知數,k1,k2,kn是係數,p1,p2,pn是指數。且方程中的所有數均為整數。假設未知數1 xi m,i 1,n,求這個方程的整數解的個數。meet in the middle。移項,分兩部分搜尋,hash判斷兩次dfs的結果是否相同,統計...