灵异事件还是C++特性?
查看原帖
灵异事件还是C++特性?
379261
wawa123楼主2024/8/22 16:05
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=4e6+5;
const int mod=998244353,g=3,invg = 332748118;
ll rev[N];
inline ll qsm(ll a,ll b){
	ll t=1;while(b){
		if(b&1)t=t*a%mod;a=a*a%mod;b>>=1; 
	}return t;
}
inline void init(ll cnt,ll len){
	for(int i=0;i<len;i++){
		rev[i]=(rev[i>>1]>>1)|((i&1)<<(cnt-1));
	}
}
inline void ntt(vector<ll>&x,ll len,ll flag){
	for(int i=0;i<len;i++){
		if(i<rev[i])swap(x[i],x[rev[i]]);
	}
	for(int h=2;h<=len;h<<=1){
		ll wn=qsm(flag==1?g:invg,(mod-1)/h);
		for(int j=0;j<len;j+=h){
			ll w=1;
			for(int k=j;k<j+h/2;k++){
				ll u=x[k],v=w*x[k+h/2];
				x[k]=(u+v)%mod;x[k+h/2]=(u-v)%mod;
				w=w*wn%mod;
			}
		}
	}
	if(flag==-1){
		int tmp=qsm(len,mod-2);
		for(int i=0;i<len;i++){x[i]=x[i]*tmp%mod;}
	}
}
inline vector<ll> read(int n){
	vector<ll>a;for(int i=0;i<n;i++){ll x;cin>>x;a.push_back(x);}return a;
}
inline void print(vector<ll>a){
	for(int i=0;i<a.size();i++){
		cout<<(a[i]%mod+mod)%mod<<' ';
	}cout<<endl;
}
inline vector<ll>operator *(vector<ll>a,vector<ll>b){
	//cout<<"**";print(a);print(b);
	vector<ll>c;int tmp=a.size()+b.size()-1,len=1,cnt=0;
	while(len<tmp)len<<=1,cnt++;init(cnt,len);
	a.resize(len);b.resize(len);c.resize(len);
	ntt(a,len,1);ntt(b,len,1);
	for(int i=0;i<len;i++)c[i]=a[i]*b[i]%mod;
	ntt(c,len,-1);c.resize(tmp);
	return c;
}
inline vector<ll>operator -(vector<ll>a,vector<ll>b){
	vector<ll>c;int len=max(a.size(),b.size());
	a.resize(len);b.resize(len);c.resize(len);
	for(int i=0;i<len;i++)c[i]=(a[i]-b[i])%mod;
	return c;
}
inline vector<ll>operator *(vector<ll>a,ll b){
	int len=a.size();
	for(int i=0;i<len;i++)a[i]=a[i]*b%mod;
	return a;
}
inline vector<ll>operator +(vector<ll>a,vector<ll>b){
	vector<ll>c;int len=max(a.size(),b.size());
	a.resize(len);b.resize(len);c.resize(len);
	for(int i=0;i<len;i++)c[i]=(a[i]+b[i])%mod;
	return c;
}
inline vector<ll>trunc(vector<ll>a,int m){
	a.resize(m);return a;
}
inline vector<ll>qsm(vector<ll>a,int b){
	vector<ll>t;t.push_back(1);while(b){
		if(b&1)t=a*t;a=a*a;b>>=1; 
	}return t;
}
int main(){
//	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	ll n,m;cin>>n>>m;n++,m++;
	
//	vector<ll>a=read(n),b=read(m);
//	print(a*b);
	print(read(m)*read(n));
	return 0;
}

这是本题的代码,mainmain 函数里面的输入是反的。但是能 AA 本题,为什么?(

2024/8/22 16:05
加载中...