QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#846856#619. 多项式求逆CHD0 0ms0kbC++141.7kb2025-01-07 15:16:292025-01-07 15:16:30

Judging History

你现在查看的是最新测评结果

  • [2025-01-07 15:16:30]
  • 评测
  • 测评结果:0
  • 用时:0ms
  • 内存:0kb
  • [2025-01-07 15:16:29]
  • 提交

answer

#include<cstdio>
using namespace std;
const long long mod=998244353;
long long n,a[2100000],b[2100000],aa[2100000],bb[2100000],q[2100000],i;
long long power(long long a,long long b)
{
	long long k=a,ans=1;
	while(b)
	{
		if(b&1)
		ans=ans*k%mod;
		k=k*k%mod;
		b=b>>1;
	}
	return ans;
}
void ntt(long long *a,long long rr,long long ty)
{
	long long i,j,k,s,r,g[25];
	for(i=0;i<=21;i++)
	if(1<<i==rr)
	{
		r=i;
		break;
	}
	if(ty==0)
	g[r]=power(3,(mod-1)>>r);
	else
	g[r]=power(3,mod-1-((mod-1)>>r));
	for(i=r-1;i>=1;i--)
	g[i]=g[i+1]*g[i+1]%mod;
	for(i=0;i<rr;i++)
	{
		s=0;
		for(j=0;j<r;j++)
		s=s|(i>>j&1)<<r-1-j;
		q[s]=a[i];
	}
	for(i=1;1<<i<=rr;i++)
	{
		for(j=0;j<rr;j=j+(1<<i))
		{
			s=1;
			for(k=0;k<1<<i-1;k++)
			{
				a[j+k]=(q[j+k]+s*q[j+(1<<i-1)+k])%mod;
				a[j+(1<<i-1)+k]=(q[j+k]-s*q[j+(1<<i-1)+k]%mod+mod)%mod;
				s=s*g[i]%mod;
			}
		}
		for(j=0;j<rr;j++)
		q[j]=a[j];
	}
	if(ty==1)
	{
		s=power(rr,mod-2);
		for(i=0;i<rr;i++)
		a[i]=a[i]*s%mod;
	}
}
void get(long long rr)
{
	long long i;
	if(rr==1)
	{
		b[0]=power(a[0],mod-2);
		return;
	}
	get(rr>>1);
	for(i=0;i<rr;i++)
	aa[i]=a[i];
	for(i=rr;i<rr<<1;i++)
	aa[i]=0;
	for(i=0;i<rr>>1;i++)
	bb[i]=b[i];
	for(i=rr>>1;i<rr<<1;i++)
	bb[i]=0;
	ntt(aa,rr<<1,0);
	ntt(bb,rr<<1,0);
	for(i=0;i<rr<<1;i++)
	aa[i]=aa[i]*bb[i]%mod;
	ntt(aa,rr<<1,1);
	for(i=0;i<rr>>1;i++)
	aa[i]=0;
	for(i=rr;i<rr<<1;i++)
	aa[i]=0;
	ntt(aa,rr<<1,0);
	for(i=0;i<rr<<1;i++)
	bb[i]=(mod-bb[i])%mod;
	for(i=0;i<rr<<1;i++)
	aa[i]=aa[i]*bb[i]%mod;
	ntt(aa,rr<<1,1);
	for(i=rr>>1;i<rr;i++)
	b[i]=aa[i];
}
main()
{
	scanf("%lld",&n);
	for(i=0;i<n;i++)
	scanf("%lld",&a[i]);
	get(1048576);
	for(i=0;i<n;i++)
	printf("%lld ",b[i]);
}

Details

Tip: Click on the bar to expand more detailed information

Pretests


Final Tests

Test #1:

score: 0
Time Limit Exceeded

input:

100
321704272 732147873 495950455 607498198 139258053 834073875 837326587 9642661 903437916 207412353 359180940 720085797 719290810 723076036 984279000 503225771 350175866 162829281 512559053 225874248 808881115 775602122 556705696 16814894 894905093 985867138 253650922 979472539 59109787 205995179 ...

output:


result:


Test #2:

score: 0
Time Limit Exceeded

input:

5000
895174753 48640370 621768187 544696442 266653647 800854366 993400253 180889611 259138834 922465819 237366500 134204023 882884556 962623362 906378209 783980105 385064692 526608265 306798389 492937123 600567928 363960265 499995507 901802313 322681104 915889147 191761221 168327309 250045818 379937...

output:


result:


Test #3:

score: 0
Time Limit Exceeded

input:

30000
433849057 26933151 94119735 348782922 994201565 286266085 253836562 391505281 561460922 76317536 151770395 626212470 835627785 278418333 560388198 586773695 43090005 450934659 716357773 746228248 47588293 745422420 131896260 923566007 275614901 981279191 966289868 111837778 850083076 346727100...

output:


result:


Test #4:

score: 0
Time Limit Exceeded

input:

100000
299085935 896290047 664961463 798136437 284888760 805376081 754380153 982440654 523416648 618138054 639229548 946675552 216492659 801950754 591895463 409803161 734598818 262678735 505505080 132772037 241184558 549895828 778274609 60046418 766879997 555641192 925835147 535599922 727361907 2850...

output:


result:


Test #5:

score: 0
Time Limit Exceeded

input:

1000000
737044976 941398691 939287417 273413335 175365852 377721127 3862986 176449650 791765055 129385383 433663518 447033570 279210233 157228851 130509370 963480863 130226624 349605390 600289609 890766355 577960206 537162643 776878360 951933771 688851169 624945579 212339598 106077966 426859950 6284...

output:


result: