QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#643106 | #6522. Digit Mode | Crying | AC ✓ | 325ms | 3812kb | C++14 | 2.2kb | 2024-10-15 18:54:18 | 2024-10-15 18:54:20 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 60,M = 10,mod = 1e9+7;
int addv(int x,int y){return (x+y>=mod)?(x+y-mod):(x+y);}
int subv(int x,int y){return (x>=y)?(x-y):(x-y+mod);}
void add(int& x,int y){x = addv(x,y);}
void sub(int& x,int y){x = subv(x,y);}
int qpow(int a,int n){
int res = 1; a%=mod;
while(n){
if(n&1)res = 1ll*res*a%mod;
n>>=1; a = 1ll*a*a%mod;
}
return res;
}
int qinv(int a){return qpow(a,mod-2);}
//
int T,n,buc[M],lim[M],ans;
string s; int a[N];
int fac[N],rfac[N];
int f[N],g[N];
int calc(int N,int x,int c){
int flag = 1;
for(int y=0;y<M;y++){
lim[y] = c-buc[y]-(y>x);
flag &= lim[y] >= 0;
}
if(!flag)return 0;
memset(f,0,sizeof f);
f[c-buc[x]] = rfac[c-buc[x]];
for(int y=0;y<M;y++)if(x != y){
memset(g,0,sizeof g);
for(int a=0;a<=N;a++)if(f[a]){
for(int b=0;a+b<=N && b<=lim[y];b++){
add(g[a+b],1ll*f[a]*rfac[b]%mod);
}
}
memcpy(f,g,sizeof f);
}
return 1ll*fac[N]*f[N]%mod;
}
void solve(){
cin>>s; n=s.length(); s=" "+s; ans = 0; for(int i=1;i<=n;i++)a[i] = s[i]-'0';
memset(buc,0,sizeof buc);
for(int i=1;i<=n;i++)buc[a[i]]++;
for(int i=1;i<M;i++)if(buc[ans] <= buc[i])ans = i;
for(int i=1;i<=n;i++){
int s = i==1;
for(int j=s;j<a[i];j++){
memset(buc,0,sizeof buc);
for(int k=1;k<i;k++)buc[a[k]]++; buc[j]++;
for(int x=1;x<M;x++)for(int k=buc[x];k<=n;k++){
int w = calc(n-i,x,k);
add(ans,1ll*w*x%mod);
}
}
}
for(int len=1;len<n;len++){
for(int j=1;j<M;j++){
memset(buc,0,sizeof buc);
buc[j] = 1;
for(int x=1;x<M;x++)for(int k=buc[x];k<=len;k++){
int w = calc(len-1,x,k);
add(ans,1ll*w*x%mod);
}
}
}
cout<<ans<<"\n";
}
int main(){
fac[0] = 1; for(int i=1;i<=50;i++)fac[i] = 1ll*fac[i-1]*i%mod;
for(int i=0;i<=50;i++)rfac[i] = qinv(fac[i]);
cin>>T;
while(T--)solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3472kb
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: 1ms
memory: 3600kb
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: 2ms
memory: 3592kb
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: 3564kb
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: 3ms
memory: 3580kb
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: 3808kb
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: 5ms
memory: 3512kb
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: 18ms
memory: 3608kb
input:
3 5014252832385738 8762796162648653 919997886706385
output:
892033338 297722019 462512414
result:
ok 3 number(s): "892033338 297722019 462512414"
Test #9:
score: 0
Accepted
time: 44ms
memory: 3812kb
input:
2 775701797726112292362823101 75927988177061355614
output:
371275551 566830847
result:
ok 2 number(s): "371275551 566830847"
Test #10:
score: 0
Accepted
time: 279ms
memory: 3764kb
input:
1 65760982925996012426370962570581226245366145016666
output:
661063035
result:
ok 1 number(s): "661063035"
Test #11:
score: 0
Accepted
time: 282ms
memory: 3468kb
input:
1 62597468169905757754175023836706426691470692832490
output:
9983261
result:
ok 1 number(s): "9983261"
Test #12:
score: 0
Accepted
time: 288ms
memory: 3600kb
input:
1 78912847369504885593964702297317051208901751786824
output:
817123221
result:
ok 1 number(s): "817123221"
Test #13:
score: 0
Accepted
time: 314ms
memory: 3584kb
input:
1 99999999999999999999999999999999999999999999999999
output:
25251932
result:
ok 1 number(s): "25251932"
Test #14:
score: 0
Accepted
time: 213ms
memory: 3600kb
input:
1 999999999999999999999999999999999999999999999
output:
439421821
result:
ok 1 number(s): "439421821"
Test #15:
score: 0
Accepted
time: 139ms
memory: 3812kb
input:
1 9999999999999999999999999999999999999999
output:
387537647
result:
ok 1 number(s): "387537647"
Test #16:
score: 0
Accepted
time: 314ms
memory: 3512kb
input:
1 99999999999999999999999998889999898988888889998888
output:
909431898
result:
ok 1 number(s): "909431898"
Test #17:
score: 0
Accepted
time: 325ms
memory: 3800kb
input:
1 99999999999999999999999998989899988889989889999888
output:
289727470
result:
ok 1 number(s): "289727470"
Test #18:
score: 0
Accepted
time: 313ms
memory: 3512kb
input:
1 99999999999999999999999998998988898888898889898999
output:
962896416
result:
ok 1 number(s): "962896416"
Test #19:
score: 0
Accepted
time: 140ms
memory: 3580kb
input:
1 9999999999999999999989988898888989888899
output:
995903330
result:
ok 1 number(s): "995903330"
Test #20:
score: 0
Accepted
time: 139ms
memory: 3580kb
input:
1 9999999999999999999989999889889998998898
output:
385460258
result:
ok 1 number(s): "385460258"
Test #21:
score: 0
Accepted
time: 313ms
memory: 3512kb
input:
1 99999999999999999999999999999999999999999999999999
output:
25251932
result:
ok 1 number(s): "25251932"