L2 018 多項式A除以B 25 分

2021-10-21 14:51:38 字數 2045 閱讀 1715

這仍然是一道關於a/b的題,只不過a和b都換成了多項式。你需要計算兩個多項式相除的商q和餘r,其中r的階數必須小於b的階數。

輸入分兩行,每行給出乙個非零多項式,先給出a,再給出b。每行的格式如下:

n e[1] c[1] ... e[n] c[n]
其中n是該多項式非零項的個數,e[i]是第i個非零項的指數,c[i]是第i個非零項的係數。各項按照指數遞減的順序給出,保證所有指數是各不相同的非負整數,所有係數是非零整數,所有整數在整型範圍內。

分兩行先後輸出商和餘,輸出格式與輸入格式相同,輸出的係數保留小數點後1位。同行數字間以1個空格分隔,行首尾不得有多餘空格。注意:零多項式是乙個特殊多項式,對應輸出為0 0 0.0。但非零多項式不能輸出零係數(包括捨入後為0.0)的項。在樣例中,餘多項式其實有常數項-1/27,但因其捨入後為0.0,故不輸出。

4 4 1 2 -3 1 -1 0 -1

3 2 3 1 -2 0 1

3 2 0.3 1 0.2 0 -1.0

1 1 -3.1

開始以為是沒學過的知識,在oi wiki上研究了很久多項式求逆和多項式除法,開始懷疑人生覺得自己是不是完全沒學會數論。。。

後來看了l2-018 多項式a除以b (25分)的解法才明白這其實就是道模擬,,,就直接模擬豎式除法的運算過程就可以。注意特判零多項式的情況。

#include

#define inf 0x3f3f3f3f

#define pi acos(-1)

#define pb push_back

using

namespace std;

typedef pair<

int,

int> p;

typedef

long

long ll;

const

int n =

5e3+19;

const ll mod =

1e9+7;

const

double eps =

1e-12

;double a[n]

, b[n]

, c[n]

;int

main()

scanf

("%d"

,&m)

;for

(int i =

0; i < m; i++

)int len = maxn - maxm;

while

(maxn >= maxm)

while

(abs

(a[maxn]

)< eps)

}int cnt =0;

for(

int i =

0; i <= len; i++)if

(abs

(c[i])+

0.05

>=

0.1)

cnt++

;printf

("%d"

, cnt);if

(cnt ==0)

for(

int i = len; i >=

0; i--)}

puts(""

);cnt =0;

for(

int i =

0; i < maxm; i++)if

(abs

(a[i])+

0.05

>=

0.1)

cnt++

;printf

("%d"

, cnt);if

(cnt ==0)

for(

int i = maxm -

1; i >=

0; i--)}

puts(""

);return0;

}

L2 018 多項式A除以B (25 分)

l2 018 多項式a除以b 25 分 這仍然是一道關於a b的題,只不過a和b都換成了多項式。你需要計算兩個多項式相除的商q和餘r,其中r的階數必須小於b的階數。輸入分兩行,每行給出乙個非零多項式,先給出a,再給出b。每行的格式如下 n e 1 c 1 e n c n 其中n是該多項式非零項的個數...

L2 018 多項式A除以B (25 分)(細節)

l2 018 多項式a除以b 25 分 思路 測試點比較多,這種需要分步驟考慮,1 首先搞清楚什麼是多項式除法,就是b d c a,在a b中,d表示商,c表示餘數,所以從a的最高項開始比較,每次消掉a中的最高項,逐步降低多項式a的最高項數,每次降低都是利用a b x k c,每個 x k 和c都是...

7 10 多項式A除以B(25 分)

7 10 多項式a除以b 25 分 這仍然是一道關於a b的題,只不過a和b都換成了多項式。你需要計算兩個多項式相除的商q和餘r,其中r的階數必須小於b的階數。輸入分兩行,每行給出乙個非零多項式,先給出a,再給出b。每行的格式如下 n e 1 c 1 e n c n 其中n是該多項式非零項的個數,e...