QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#44072#4543. SumireCferWA 361ms3976kbC++171.9kb2022-08-12 17:28:542022-08-12 17:28:54

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-08-12 17:28:54]
  • 评测
  • 测评结果:WA
  • 用时:361ms
  • 内存:3976kb
  • [2022-08-12 17:28:54]
  • 提交

answer

#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<cmath>
#include<bitset>
#include<cmath>

#define int long long 
#define x first
#define y second
#define ps push_back
#define endl '\n'

#define kd ios::sync_with_stdio(false);cin.tie();cout.tie(0);
using namespace std;
typedef pair<int,int>pi;
const int N=100,mod=1e9+7;
int lowbit(int x){return x&-x;}
int gcd(int a,int b){return a%b==0?b:gcd(b,a%b);}

int a[N];
int d[N][N][2][2];
int D,k,B,l,r;

int qmi(int x,int b)
{
	int res=1;
	while(b)
	{
		if(b&1)res=res*x%mod;
		b>>=1;
		x=x*x%mod;
	}
	return res;
}

int dfs(int len,int sum,int lead,int limit)
{
	if(!len)return qmi(sum,k);	
	int &v=d[len][sum][lead][limit];
	if(~v)return v;

	int up=limit?a[len]:B-1;
	int res=0;
	
	
	if(D==0)
	{
		if(up==0)res=(res+dfs(len-1,sum+!lead,lead,limit))%mod;
		else 
		{
			res=(res+dfs(len-1,sum+!lead,lead,0))%mod;//填入 D
			
			res=(res+(up-2+1)*dfs(len-1,sum,0,0))%mod; // 非D也非 U
			
			res=(res+dfs(len-1,sum,0,limit))%mod;   //U
		}
	}
	else 
	{
		if(up>D)
		{
			res=(res+dfs(len-1,sum+1,0,0))%mod;//填入D
			res=(res+dfs(len-1,sum,0,0)*(up+1-2))%mod;// 不填D 和Lim
			res=(res+dfs(len-1,sum,0,limit))%mod;// 填Lim
		}
		else if(up==D)
		{
			res=(res+dfs(len-1,sum+1,0,limit))%mod;//填入D
			res=(res+dfs(len-1,sum,0,0)*up)%mod;// 不填D
		}
		else 
		{
			res=(res+up*dfs(len-1,sum,0,0))%mod;//不填Lim
			res=(res+dfs(len-1,sum,0,limit))%mod;// 填Lim
		}
	}


	
	return v=res%mod;
}

int get(int x)
{
	memset(d,-1,sizeof d);
	int len=0;
	while(x)a[++len]=x%B,x/=B;	
	return dfs(len,0,1,1);
}


void solve()
{
	
	cin>>k>>B>>D>>l>>r;
	cout<<get(r)-get(l-1)<<endl;
}

signed main()
{
	kd;
	int _;_=1;
	cin>>_;
	while(_--)solve();	
	return 0;
}	

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 361ms
memory: 3976kb

input:

10000
3 207891369 69789899 964252340141144201 993463302889356041
3 747663427 196567324 607861784354966835 737019014793415965
7 4 1 75021281026163040 281275352760223247
159801714 6 4 57793681483331990 719907284728404544
760336565 3 2 640278753805042190 790056554571568287
3 3 0 370833904610234656 7289...

output:

348402080
-79588749
-340282720
-605622518
330035010
-4691366
312874977
375991223
465046227
263340736
-295042558
599053093
345964631
-453133606
355527840
-93113636
165223493
-75036891
97531004
174290409
257548623
-147218560
29936714
204554940
-73596027
-559672319
351876140
-175890563
-183885186
74542...

result:

wrong answer 2nd lines differ - expected: '920411258', found: '-79588749'