关于g++编译
  • 板块学术版
  • 楼主Liuxizai骇兔
  • 当前回复9
  • 已保存回复9
  • 发布时间2021/2/4 12:03
  • 上次更新2023/11/5 03:47:15
查看原帖
关于g++编译
371439
Liuxizai骇兔楼主2021/2/4 12:03

rt,这样一份代码

#include<bits/stdc++.h>
#define maxn 5000005
#define mo 998244353
using namespace std;
int n,k;
long long jc[maxn+5]={1},inv[maxn+5];
long long g[maxn+5]={1},erc[maxn+5]={1};
int read(){
	int s=0,fu=1;
	char a=getchar();
	while(!isdigit(a)){
		if(a=='-')fu=-1; 
		a=getchar();
	}
	while(isdigit(a)){
		s=(s<<1)+(s<<3);
		s+=a^48;
		a=getchar();
	}
	return s*fu;
}
long long ksm(long long s,int c){
	long long ans=1;
	while(c){
		if(c&1){
			ans*=s;
			ans%=mo;
		}
		s*=s;s%=mo;
		c=c>>1;
	}
	return ans;
}
int main(){
	int i,t,I;
	for(i=1;i<=maxn;i++){
		jc[i]=(i*jc[i-1])%mo;
	}
	inv[maxn]=ksm(jc[maxn],mo-2); 
	for(i=maxn-1;i>=0;i--){
		inv[i]=inv[i+1]*(i+1)%mo;
	}
	for(i=2;i<=maxn;i++){
		g[i]=(2*g[i-2]%mo*(i-1)%mo+g[i-1])%mo*4*i%mo*(i-1)%mo;
	}
	for(i=1;i<=maxn;i++){
		erc[i]=erc[i-1]*2%mo;
	}	 
	t=read();
	for(I=1;I<=t;I++){
		n=read();
		k=read();
		printf("%lld\n",jc[n]*inv[n-k]%mo*jc[n]%mo*inv[n-k]%mo*inv[k]%mo*erc[k]%mo*g[n-k]%mo);
	}
	return 0;
}
#include<bits/stdc++.h>
#define maxn 5000005
#define mo 998244353
using namespace std;
int n,k;
long long jc[maxn+5]={1},inv[maxn+5];
long long g[maxn+5]={1},erc[maxn+5]={1};
int read(){
	int s=0,fu=1;
	char a=getchar();
	while(!isdigit(a)){
		if(a=='-')fu=-1; 
		a=getchar();
	}
	while(isdigit(a)){
		s=(s<<1)+(s<<3);
		s+=a^48;
		a=getchar();
	}
	return s*fu;
}
long long ksm(long long s,int c){
	long long ans=1;
	while(c){
		if(c&1){
			ans*=s;
			ans%=mo;
		}
		s*=s;s%=mo;
		c=c>>1;
	}
	return ans;
}
int main(){
	int i,t,I;
	for(i=1;i<=maxn;i++){
		jc[i]=(i*jc[i-1])%mo;
	}
	inv[maxn]=ksm(jc[maxn],mo-2); 
	for(i=maxn-1;i>=0;i--){
		inv[i]=inv[i+1]*(i+1)%mo;
	}
	for(i=2;i<=maxn;i++){
		g[i]=(2*g[i-2]%mo*(i-1)%mo+g[i-1])%mo*4*i%mo*(i-1)%mo;
	}
	for(i=1;i<=maxn;i++){
		erc[i]=erc[i-1]*2%mo;
	}	 
	t=read();
	for(I=1;I<=t;I++){
		n=read();
		k=read();
		printf("%lld\n",jc[n]*inv[n-k]%mo*jc[n]%mo*inv[n-k]%mo*inv[k]%mo*erc[k]%mo*g[n-k]%mo);
	}
	return 0;
}

其编译需要10s+,交到洛谷直接CECE,然后试着把全局变量的初始化放到了主函数内,

#include<bits/stdc++.h>
#define maxn 5000005
#define mo 998244353
using namespace std;
long long n,k;
long long jc[maxn+5],iinv[maxn+5];
long long g[maxn+5],erc[maxn+5];
long long read(){
	long long s=0,fu=1;
	char a=getchar();
	while(!isdigit(a)){
		if(a=='-')fu=-1; 
		a=getchar();
	}
	while(isdigit(a)){
		s=(s<<1)+(s<<3);
		s+=a^48;
		a=getchar();
	}
	return s*fu;
}
long long ksm(long long s,int c){
	long long ans=1;
	while(c){
		if(c&1){
			ans*=s;
			ans%=mo;
		}
		s*=s;s%=mo;
		c=c>>1;
	}
	return ans;
}
int main(){
	int i,t,I;
	jc[0]=1;g[0]=1;erc[0]=1;
	for(i=1;i<=maxn;i++){
		jc[i]=(i*jc[i-1])%mo;
	}
	iinv[maxn]=ksm(jc[maxn],mo-2); 
	for(i=maxn;i>=1;i--){
		iinv[i-1]=iinv[i]*i%mo;
	}
	for(i=2;i<=maxn;i++){
		g[i]=(g[i-1]+2*g[i-2]*(i-1))%mo*4*i%mo*(i-1)%mo;
	}
	for(i=1;i<=maxn;i++){
		erc[i]=erc[i-1]*2%mo;
	}	 
	t=read();
	for(I=1;I<=t;I++){
		n=read();
		k=read();
		printf("%lld\n",jc[n]*iinv[n-k]%mo*jc[n]%mo*iinv[n-k]%mo*iinv[k]%mo*erc[k]%mo*g[n-k]%mo);
	}
	return 0;
}

编译时间就正常了,并且顺利的ACAC了P4931。

灵异事件

为什么会这样?

2021/2/4 12:03
加载中...