蒟蒻求助,为什么数组开成1e7就能过,1e6过不了
查看原帖
蒟蒻求助,为什么数组开成1e7就能过,1e6过不了
202402
20160161simon楼主2021/1/15 21:13

100pts 代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll read(){
	ll x=0;char c=getchar();bool flag=1;
	while(c<'0' || c>'9'){if(c=='-')flag=0;c=getchar();}
	while('0'<=c && c<='9'){x=x*10+c-'0';c=getchar();}
	return flag?x:-x;
}
const ll N=1e7+1000,p=1e9+7;
ll fac[N];
ll fpow(ll a,ll x){
	ll ans=1;
	while(x){
		if(x&1) ans=ans*a%p;
		a=a*a%p,x/=2;
	}
	return ans;
}
ll inv(ll x){return fpow(x,p-2);}
ll comb(ll n,ll m){
	return fac[m]*inv(fac[n]*fac[m-n]%p)%p;
}
ll sum(ll n,ll m){
	n--;
	ll ans=0;
	for(ll i=1;i<=m;i++) ans+=comb(i,i+n),ans%=p;
//	printf("%lld %lld %lld\n",n,m,ans);
	return ans;
}
int main(){
	ll r1=read()+1,c1=read()+1,r2=read()+1,c2=read()+1;
	fac[0]=1;
	for(ll i=1;i<=1e7+100;i++) fac[i]=fac[i-1]*i%p;
//	sum(r1-1,c1-1),sum(r1-1,c2),sum(r2,c1-1),sum(r2,c2); 
//	for(ll i=1;i<=10;i++){
//		for(ll j=i;j<=10;j++) printf("%lld %lld %lld\n",i,j,comb(i,j));
//	} 
	printf("%lld\n",(sum(r2,c2)-((sum(r1-1,c2)+sum(r2,c1-1))%p+p-sum(r1-1,c1-1))%p+p)%p);
}

50pts 代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll read(){
	ll x=0;char c=getchar();bool flag=1;
	while(c<'0' || c>'9'){if(c=='-')flag=0;c=getchar();}
	while('0'<=c && c<='9'){x=x*10+c-'0';c=getchar();}
	return flag?x:-x;
}
const ll N=1e6+1000,p=1e9+7;
ll fac[N];
ll fpow(ll a,ll x){
	ll ans=1;
	while(x){
		if(x&1) ans=ans*a%p;
		a=a*a%p,x/=2;
	}
	return ans;
}
ll inv(ll x){return fpow(x,p-2);}
ll comb(ll n,ll m){
	return fac[m]*inv(fac[n]*fac[m-n]%p)%p;
}
ll sum(ll n,ll m){
	n--;
	ll ans=0;
	for(ll i=1;i<=m;i++) ans+=comb(i,i+n),ans%=p;
//	printf("%lld %lld %lld\n",n,m,ans);
	return ans;
}
int main(){
	ll r1=read()+1,c1=read()+1,r2=read()+1,c2=read()+1;
	fac[0]=1;
	for(ll i=1;i<=1e6+100;i++) fac[i]=fac[i-1]*i%p;
//	sum(r1-1,c1-1),sum(r1-1,c2),sum(r2,c1-1),sum(r2,c2); 
//	for(ll i=1;i<=10;i++){
//		for(ll j=i;j<=10;j++) printf("%lld %lld %lld\n",i,j,comb(i,j));
//	} 
	printf("%lld\n",(sum(r2,c2)-((sum(r1-1,c2)+sum(r2,c1-1))%p+p-sum(r1-1,c1-1))%p+p)%p);
}

迷惑...求助大佬解答

2021/1/15 21:13
加载中...