兩個多項式的卷積
思路:對詢問分塊,當湊夠一定數量的修改時進行一次ntt,然後每次查詢就直接暴力求還沒有進行ntt的那一部分的貢獻,塊大小為sqrt(n*log(n))最合適,注意坑點:輸入的a[i]和b[i]是有可能小於0的!
#include
#include
#include
#include
using
namespace std;
const
int max_n=
100100
;const
long
long mod=
998244353
;const
long
long g=3;
const
long
long gi=
332748118
;long
long a[max_n]
,b[max_n]
;int lim;
int st_p[max_n]
,st_q[max_n]
,cnt=0;
long
long a[
2*max_n]
,b[2
*max_n]
;long
long sum[
2*max_n]
,sum[max_n]
;long
long
ask(
int l,
int r)
long
long
ask(
int l,
int r)
int limit=
1,l,r[max_n]
;inline
long
long
pow_mod
(long
long a,
long
long n,
long
long m)
a=(a*a)
%m; n>>=1;
}return ans;
}inline
void
ntt(
long
long
*a,int type)
for(
int mid=
1;mid
}}}void
solve
(int n,
int m)
for(
int i=
0;i) r[i]
=(r[i>>1]
>>1)
|((i&1
)<<
(l-1))
;for
(int i=n+
1;i) a[i]=0
;for
(int i=m+
1;i) b[i]=0
;ntt
(a,1);
ntt(b,1)
;for
(int i=
0;i) a[i]
=(a[i]
*b[i]
)%mod;
ntt(a,-1
);long
long inv=
pow_mod
(limit,mod-
2,mod)
;for
(int i=
0;i<=n+m;i++
) a[i]
=a[i]
*inv%mod;
}int n;
void
build()
intmain
(void
)for
(i=0
;i<=n;i++
)scanf
("%d"
,&m)
; lim=
sqrt
(m*log2
(n))
; sum[0]
=b[0];
for(i=
1;i<=n;i++
) sum[i]
=(sum[i-1]
+b[i]
)%mod;
build()
;//cout
(i=1
;i<=m;i++
)printf
("%lld\n"
,ans);}
else
if(op==2)
if(cnt==lim)
}return0;
}
兩個多項式相加!
以下是本人用單鏈表所編寫的兩個多項式相加的程式,不知為何在turboc2.0上執行總有兩個errors,而且都是 declaration syntax error 還請業內高手指導!謝謝!include math.h include stdio.h typedef struct node polyn...
兩個多項式求和
提到多項式想必定會想到其係數和指數,定義資料結構typedef struct polynomialpolynomial,linklist 之所以運用單鏈表實現該功能是因為會涉及資料的插入與刪除等操作,單鏈錶比順序表靈活 方便。當在進行相加功能操作時,要比較當前指標所指結點的指數大小,如果不相等,就將...
兩個多項式相加
每組有兩行,每行由若干空格隔開的整數構成,以回車標誌結束。每行第乙個數表示本行有幾項,每一項由兩個整數表示,第1個整數表示係數,第2個整數表示次數。include includetypedef struct node node struct node creatnode int coe,int ex...