求助,WA on #2,本地正确,不知道为什么。
查看原帖
求助,WA on #2,本地正确,不知道为什么。
448185
EntrophyDecreaser楼主2023/7/11 18:31

rt,P4512调炸了。#2#3WA,#5#6#10RE。可能有未定义行为,但我找不到。

#include<bits/stdc++.h>
#define G 3
#define int long long
using namespace std;
const int md=998244353;
const int N=1050000;
inline int ksm(int x,int d){
	int res=1;
	while(d){
		if(d&1)res=1ll*res*x%md;
		x=1ll*x*x%md;
		d>>=1;
	}
	return res;
}
const int invG=ksm(G,md-2);
int tr[N];
void gett(int n){
	tr[0]=0;
	for(int i=1;i<n;++i)
		tr[i]=(tr[i>>1]>>1)|((i&1)?n>>1:0); 
}
inline int ad(int x,int y){
	int res=x+y;
	if(res>=md)return res-md;
	if(res<0)return res+md;
	return res;
}
void NTT(int *f,int n,bool fl){
	for(int i=0;i<n;++i)
		if(i<tr[i])swap(f[i],f[tr[i]]);
	for(int p=2;p<=n;p<<=1){
		int len=p>>1,tg=ksm(fl?G:invG,(md-1)/p);
		for(int l=0;l<n;l+=p){
			int bf=1;
			for(int i=l;i<l+len;++i){
				int tp=1ll*bf*f[i+len]%md;
				f[i+len]=ad(f[i],-tp);
				f[i]=ad(f[i],tp);
				bf=1ll*bf*tg%md;
			}
		}
	}	
	if(!fl){
		int invn=ksm(n,md-2);
		for(int i=0;i<n;++i)f[i]=1ll*invn*f[i]%md;
	}
}
int inv[N],tp[N];
void getinv(int *f,int m){
	int n;
	inv[0]=ksm(f[0],md-2);
	for(n=1;n<=m;n<<=1);
	for(int len=2;len<=n;len<<=1){
		gett(len<<1);
		for(int i=0;i<len;++i)tp[i]=f[i];
		NTT(inv,len<<1,1);NTT(tp,len<<1,1);
		for(int i=0;i<(len<<1);++i)
			inv[i]=1ll*ad(2ll,-1ll*inv[i]*tp[i]%md)*inv[i]%md;
		NTT(inv,len<<1,0);
		for(int i=len;i<(len<<1);++i)inv[i]=0;
	}
	for(int i=0;i<n;++i)f[i]=inv[i];
}
int q[N],tmp[N];
void mod(int *f,int *g,int n,int m){
	int tot=n+n-m,tq=n-m,len,l,L;
	for(len=1;len<=tq;len<<=1);
	for(l=1;l<=tot;l<<=1);
	for(L=1;L<=n;L<<=1);
	for(int i=0;i<=tq;++i)q[i]=g[m-i];
	getinv(q,len-1);
	for(int i=tq+1;i<=len;++i)q[i]=0;
	gett(l);
	for(int i=0;i<=n;++i)tmp[i]=f[n-i];
	NTT(q,l,1);
	NTT(tmp,l,1);
	for(int i=0;i<l;++i)q[i]=1ll*q[i]*tmp[i]%md;
	NTT(q,l,0);
	
	for(int i=tq;i>=0;--i)tmp[i]=q[tq-i];
	for(int i=0;i<=tq;++i)q[i]=tmp[i];
	for(int i=tq+1;i<l;++i)tmp[i]=q[i]=0;
	gett(L);
	NTT(tmp,L,1);NTT(g,L,1);
	for(int i=0;i<L;++i)tmp[i]=1ll*tmp[i]*g[i]%md;
	NTT(tmp,L,0);
	for(int i=0;i<m;++i)tmp[i]=ad(f[i],-tmp[i]);
	for(int i=m;i<=n;++i)tmp[i]=0; 
}
int n,m,f[N],g[N];
signed main(){
	cin>>n>>m;
	for(int i=0;i<=n;++i)scanf("%lld",&f[i]);
	for(int i=0;i<=m;++i)scanf("%lld",&g[i]);
	mod(f,g,n,m);
	for(int i=0;i<=n-m;++i)printf("%lld ",q[i]);
	cout<<endl;
	for(int i=0;i<m;++i)printf("%lld ",tmp[i]);
	return 0;
}
输入
100 6
775318471 955959706 221750680 89804995 980867276 504898124 151547480 643005940 120856843 230295511 964503381 281402730 104406940 253291058 738931648 467399899 143654408 756200316 645050730 263175778 666009774 593762123 291939423 763407763 320186288 541969026 259260172 959628951 235491896 442457771 316058307 107390050 764388198 462342965 893210819 83593576 492825879 195561855 167185181 114588835 831775911 219902573 301495773 362149108 468220941 177302338 156286079 225509029 569114522 713192498 549443294 408308685 560297486 929950374 807177757 374852946 891946519 323823925 969508804 518021426 631866764 796333831 480472170 219602334 21897487 905204644 405846045 305227973 467434566 928243078 608932655 491238106 259491261 509692090 335512926 106527283 932169714 868585178 958488723 696762075 534973378 973592447 887134539 21320877 354433076 76511405 764732416 902837823 150614801 763085181 605420507 651496007 28531089 868609268 944151723 991975428 217593431 736788840 275284989 885276643 905159804
599425050 714060736 376330454 464150387 204482287 675040169 73720482
输出
316393063 783922427 147046809 78255490 360280312 794158407 290870797 432131528 387945952 90799713 732698434 543248474 641464411 436273798 441514855 585948318 330974882 462404553 233110365 255944000 904730345 744172765 20959389 406857479 902371261 557662233 159333701 24143397 808843068 721856769 283803 942728119 181660890 223038622 693962307 815696965 526511889 390232584 408974573 53239691 380362721 721770456 490833857 907353387 852676169 651833336 190004492 394640687 966885144 54435472 158798446 721933088 539464489 931842805 71801830 842414162 5431163 436553392 772658922 669479514 958654593 386291276 104571779 516128949 238618634 635488030 197443067 430709846 765452288 809598138 689989058 647896107 878242154 508469990 202732213 441125838 376529862 931623113 17589308 24509703 407004624 730902424 750083996 695670909 897329069 584603959 222259833 755843419 398351731 921365643 109699053 412177003 700297354 887950050 184722920 
221102055 121060069 603308534 589252467 775540374 470073495 
2023/7/11 18:31
加载中...