RE求助
查看原帖
RE求助
310142
Ihave4oranges楼主2023/4/9 15:29

USACO和本地都能跑,但是到洛谷上就RE了?

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1000000007;
int sgn(int x){return x?(x>0ll)<<1ll:1ll;}
int n,A[20],a[305],q,Ll,Rr,ans[305][305],dp[305][20][20][3],tmp[305][305];
int Calc(int x){
	int len=0;
	for(int i=0;i<18;++i) A[i]=0;
	for(;x;++len){
		A[len]=x%10ll;
		x/=10ll;
	}
	for(int s=1;s<=n;++s){
		memset(dp,0,sizeof(dp));
		for(int i=0;i<len;++i) dp[s][i][i][sgn(a[s]-A[i])]=1ll;
		for(int i=s+1;i<=n;++i)
			for(int l=0;l<len;++l)
				for(int r=l;r<len;++r){
					dp[i][l][r][0]=dp[i-1][l][r][0];
					if(a[i]<A[r]) dp[i][l][r][0]+=dp[i-1][l][r-1][0]+dp[i-1][l][r-1][1]+dp[i-1][l][r-1][2];
					else if(a[i]==A[r]) dp[i][l][r][0]+=dp[i-1][l][r-1][0];
					if(a[i]<A[l]) dp[i][l][r][0]+=dp[i-1][l+1][r][0]+dp[i-1][l+1][r][1];
					else dp[i][l][r][0]+=dp[i-1][l+1][r][0];
					dp[i][l][r][0]%=mod;
					dp[i][l][r][1]=dp[i-1][l][r][1];
					if(a[i]==A[r]) dp[i][l][r][1]+=dp[i-1][l][r-1][1];
					if(a[i]==A[l]) dp[i][l][r][1]+=dp[i-1][l+1][r][1];
					dp[i][l][r][1]%=mod;
					dp[i][l][r][2]=dp[i-1][l][r][2];
					if(a[i]==A[r]) dp[i][l][r][2]+=dp[i-1][l][r-1][2];
					else if(a[i]>A[r]) dp[i][l][r][2]+=dp[i-1][l][r-1][0]+dp[i-1][l][r-1][1]+dp[i-1][l][r-1][2];
					if(a[i]<=A[l]) dp[i][l][r][2]+=dp[i-1][l+1][r][2];
					else dp[i][l][r][2]+=dp[i-1][l+1][r][1]+dp[i-1][l+1][r][2];
					dp[i][l][r][2]%=mod;
				}
		for(int i=s;i<=n;++i){
			for(int j=0;j<len-1;++j) (ans[s][i]+=dp[i][0][j][0]+dp[i][0][j][1]+dp[i][0][j][2])%=mod;
			(ans[s][i]+=dp[i][0][len-1][0]+dp[i][0][len-1][1])%=mod;
		}
	}
	for(int r=1;r<=n;++r)
		for(int l=r-1;l;--l) (ans[l][r]+=ans[l+1][r])%=mod;
}
signed main(){
	scanf("%lld%lld%lld",&n,&Ll,&Rr);
	for(int i=1;i<=n;++i) scanf("%lld",&a[i]);
	Calc(Rr);
	for(int i=1;i<=n;++i)
		for(int j=i;j<=n;++j) tmp[i][j]=ans[i][j];
	memset(ans,0,sizeof(ans));
	Calc(Ll-1ll);
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j) ans[i][j]=(tmp[i][j]-ans[i][j]+mod)%mod;
	scanf("%lld",&q);
	while(q--){
		int l,r;
		scanf("%lld%lld",&l,&r);
		printf("%lld\n",ans[l][r]*2%mod);
	}
	return 0;
}
2023/4/9 15:29
加载中...