QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#859842#6522. Digit Mode2018ljw#AC ✓1675ms1792kbC++142.1kb2025-01-18 02:30:242025-01-18 02:30:32

Judging History

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

  • [2025-01-18 02:30:32]
  • 评测
  • 测评结果:AC
  • 用时:1675ms
  • 内存:1792kb
  • [2025-01-18 02:30:24]
  • 提交

answer

#include<cstdio>
#include<cstring>
#include<algorithm>
const int mod=1e9+7;
using namespace std;
int a[52],l;
char s[51];
long long c[52][52];
long long dp[52],tmp[52];
long long calc(int hd,int mxp,int tms,int len){
	if(!mxp)return 0;
	int i,j,k;
	for(i=0;i<=len;i++)dp[i]=tmp[i]=0;
	dp[len]=1;
	for(i=0;i<=9;i++){
		if(i==mxp){
			int rs=tms-(i==hd);
			if(rs<0)return 0;
			for(j=0;j+rs<=len;j++)tmp[j]=dp[j+rs]*c[j+rs][rs]%mod;
		}
		else{
			int tp=tms-(i>mxp)-(i==hd);
			if(tp<0)return 0;
			for(j=0;j<=tp;j++){
				for(k=0;j+k<=len;k++)tmp[k]+=dp[j+k]*c[j+k][j]%mod,tmp[k]%=mod;
			}
		}
		for(j=0;j<=len;j++)dp[j]=tmp[j],tmp[j]=0;
	}
	return dp[0];
}
int t[10];
long long solve(int mxp,int tms){
	if(mxp==0)return 0;
	int i,j,k,rl=l;
	for(i=0;i<=9;i++)rl-=t[i];
	for(i=0;i<=rl;i++)dp[i]=tmp[i]=0;
	dp[rl]=1;
	for(i=0;i<=9;i++){
		if(i==mxp){
			int rs=tms-t[i];
			if(rs<0)return 0;
			for(j=0;j+rs<=rl;j++)tmp[j]=dp[j+rs]*c[j+rs][rs]%mod;
		}
		else{
			int tp=tms-(i>mxp)-t[i];
			for(j=0;j<=tp;j++){
				for(k=0;k+j<=rl;k++)tmp[k]+=dp[j+k]*c[j+k][j]%mod,tmp[k]%=mod;
			}
		}
		for(j=0;j<=rl;j++)dp[j]=tmp[j],tmp[j]=0;
	}
	return dp[0];
}
void solve(){
	int i,j,k,r;
	scanf("%s",s+1);
	l=strlen(s+1);
	for(i=1;i<=l;i++)a[i]=s[i]-'0';
	for(i=0;i<=9;i++)t[i]=0;
	c[0][0]=1;
	for(i=1;i<=l;i++){
		c[i][0]=c[i][i]=1;
		for(j=1;j<i;j++)c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
	}
	long long res=0;
	for(i=1;i<l;i++){
		for(j=1;j<=9;j++){
			for(k=1;k<=i;k++){
				if(j!=1){
					long long lrh=calc(1,j,k,i-1);
					res+=lrh*(j-1)*j;res%=mod;
				}
				if(j!=9){
					long long grh=calc(9,j,k,i-1);
					res+=grh*(9-j)*j,res%=mod;
				}
				res+=calc(j,j,k,i-1)*j;res%=mod;
			}
		}
	}
	for(i=1;i<=l;i++){
		for(j=1;j<=9;j++){
			if(!a[i])break;
			for(k=1;k<=l;k++){
				for(r=0;r<a[i];r++){
					if(i==1&&!r)continue;
					t[r]++;
					res+=j*solve(j,k);
					res%=mod;
					t[r]--;
				}
			}
		}
		t[a[i]]++;
	}
	int mx=0,ct=0;
	for(i=9;i>=0;i--)if(t[i]>ct)mx=i,ct=t[i];
	res+=mx;res%=mod;
	printf("%lld\n",res);
}
int main(){
	int t;
	scanf("%d",&t);
	while(t--)solve();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 1664kb

input:

5
9
99
999
99999
999999

output:

45
615
6570
597600
5689830

result:

ok 5 number(s): "45 615 6570 597600 5689830"

Test #2:

score: 0
Accepted
time: 0ms
memory: 1664kb

input:

34
7
48
8
76
1
97
7
5
7
7
2
89
9
4
84
46
6
73
86
78
5
3
8
9
31
24
78
7
11
45
2
65
88
6

output:

28
236
36
420
1
597
28
15
28
28
3
525
45
10
484
221
21
399
500
435
15
6
36
45
145
104
435
28
47
215
3
341
516
21

result:

ok 34 numbers

Test #3:

score: 0
Accepted
time: 1ms
memory: 1664kb

input:

16
935
888
429
370
499
881
285
162
178
948
205
858
573
249
773
615

output:

6009
5618
2456
2078
2905
5562
1603
887
993
6121
1174
5378
3333
1374
4724
3631

result:

ok 16 numbers

Test #4:

score: 0
Accepted
time: 2ms
memory: 1664kb

input:

12
1242
9985
6469
9310
4191
9497
3166
3495
9711
9698
4137
2257

output:

7292
63531
37910
58047
23987
59479
18076
19675
61184
61086
23672
12913

result:

ok 12 numbers

Test #5:

score: 0
Accepted
time: 2ms
memory: 1664kb

input:

10
61195
72739
10164
79164
57851
12326
29132
55992
67377
13873

output:

337575
408170
63792
450686
316513
70493
157773
305011
374163
77954

result:

ok 10 numbers

Test #6:

score: 0
Accepted
time: 3ms
memory: 1664kb

input:

8
529983
127270
421121
291729
461233
695056
365028
271160

output:

2744573
687141
2160067
1500426
2359204
3705475
1851172
1381981

result:

ok 8 numbers

Test #7:

score: 0
Accepted
time: 6ms
memory: 1664kb

input:

7
7934351
8474057
1287369
5845624
7796773
5805755
7349121

output:

42465725
45668947
6716401
30094426
41554096
29861098
38756757

result:

ok 7 numbers

Test #8:

score: 0
Accepted
time: 38ms
memory: 1664kb

input:

3
5014252832385738
8762796162648653
919997886706385

output:

892033338
297722019
462512414

result:

ok 3 number(s): "892033338 297722019 462512414"

Test #9:

score: 0
Accepted
time: 131ms
memory: 1664kb

input:

2
775701797726112292362823101
75927988177061355614

output:

371275551
566830847

result:

ok 2 number(s): "371275551 566830847"

Test #10:

score: 0
Accepted
time: 1034ms
memory: 1664kb

input:

1
65760982925996012426370962570581226245366145016666

output:

661063035

result:

ok 1 number(s): "661063035"

Test #11:

score: 0
Accepted
time: 1088ms
memory: 1664kb

input:

1
62597468169905757754175023836706426691470692832490

output:

9983261

result:

ok 1 number(s): "9983261"

Test #12:

score: 0
Accepted
time: 1102ms
memory: 1664kb

input:

1
78912847369504885593964702297317051208901751786824

output:

817123221

result:

ok 1 number(s): "817123221"

Test #13:

score: 0
Accepted
time: 1675ms
memory: 1792kb

input:

1
99999999999999999999999999999999999999999999999999

output:

25251932

result:

ok 1 number(s): "25251932"

Test #14:

score: 0
Accepted
time: 1112ms
memory: 1664kb

input:

1
999999999999999999999999999999999999999999999

output:

439421821

result:

ok 1 number(s): "439421821"

Test #15:

score: 0
Accepted
time: 704ms
memory: 1664kb

input:

1
9999999999999999999999999999999999999999

output:

387537647

result:

ok 1 number(s): "387537647"

Test #16:

score: 0
Accepted
time: 1661ms
memory: 1664kb

input:

1
99999999999999999999999998889999898988888889998888

output:

909431898

result:

ok 1 number(s): "909431898"

Test #17:

score: 0
Accepted
time: 1662ms
memory: 1664kb

input:

1
99999999999999999999999998989899988889989889999888

output:

289727470

result:

ok 1 number(s): "289727470"

Test #18:

score: 0
Accepted
time: 1665ms
memory: 1664kb

input:

1
99999999999999999999999998998988898888898889898999

output:

962896416

result:

ok 1 number(s): "962896416"

Test #19:

score: 0
Accepted
time: 696ms
memory: 1792kb

input:

1
9999999999999999999989988898888989888899

output:

995903330

result:

ok 1 number(s): "995903330"

Test #20:

score: 0
Accepted
time: 699ms
memory: 1664kb

input:

1
9999999999999999999989999889889998998898

output:

385460258

result:

ok 1 number(s): "385460258"

Test #21:

score: 0
Accepted
time: 1675ms
memory: 1664kb

input:

1
99999999999999999999999999999999999999999999999999

output:

25251932

result:

ok 1 number(s): "25251932"