WA样例:79074169129 755913863158
by lijunxi1 @ 2023-08-22 19:50:06
样例过了!
```cpp
#include <bits/stdc++.h>
using namespace std;
long long s1, s2, wa[15], w, dp[15][15], M;
long long q123(long long i,long long sff)
{
if(i!=0||sff==0)return 1;
return sff;
}
long long dfs0(long long x, long long sf1, bool sf2,long long sff) {
if (x > w)
return sf1;
if (!sf2 && dp[x][sf1] != -1)
return dp[x][sf1];
long long put = 0;
if (sf2) {
for (long long i = 0; i < wa[w - x + 1]; i++) {
if (i == M)
put += dfs0(x + 1, sf1 + sff, 0,q123(i,sff));
else
put += dfs0(x + 1, sf1, 0,q123(i,sff));
}
if (wa[w - x + 1] == M)
put += dfs0(x + 1, sf1 + sff, 1,q123(wa[w - x + 1],sff));
else
put += dfs0(x + 1, sf1, 1,q123(wa[w - x + 1],sff));
return put;
} else {
for (long long i = 0; i <= 9; i++) {
if (i == M)
put += dfs0(x + 1, sf1 + sff, 0,q123(i,sff));
else
put += dfs0(x + 1, sf1, 0,q123(i,sff));
}
return dp[x][sf1] = put;
}
}
long long q0(long long a) {
if(a==0)return 1;
memset(dp, -1, sizeof dp);
w = 0;
while (a > 0) {
w++;
wa[w] = a % 10;
a /= 10;
}
return dfs0(1, 0, 1,0);
}
long long dfs(long long x, long long sf1, bool sf2) {
if (x > w)
return sf1;
if (!sf2 && dp[x][sf1] != -1)
return dp[x][sf1];
long long put = 0;
if (sf2) {
for (long long i = 0; i < wa[w - x + 1]; i++) {
if (i == M)
put += dfs(x + 1, sf1 + 1, 0);
else
put += dfs(x + 1, sf1, 0);
}
if (wa[w - x + 1] == M)
put += dfs(x + 1, sf1 + 1, 1);
else
put += dfs(x + 1, sf1, 1);
return put;
} else {
for (long long i = 0; i <= 9; i++) {
if (i == M)
put += dfs(x + 1, sf1 + 1, 0);
else
put += dfs(x + 1, sf1, 0);
}
return dp[x][sf1] = put;
}
}
long long q(long long a) {
memset(dp, -1, sizeof dp);
w = 0;
while (a > 0) {
w++;
wa[w] = a % 10;
a /= 10;
}
return dfs(1, 0, 1);
}
int main() {
cin >> s1 >> s2;
M = 0;
cout << q0(s2) - q0(s1 - 1) << " ";
for (long long i = 1; i <= 9; i++) {
M = i;
cout << q(s2) - q(s1 - 1) << " ";
}
}
```
by lijunxi1 @ 2023-08-22 20:20:12
```cpp
#include <bits/stdc++.h>
using namespace std;
long long s1, s2, wa[15], w, dp[15][15], M;
long long dfs(long long x, long long sf1, bool sf2) {
if (x > w)
return sf1;
if (!sf2 && dp[x][sf1] != -1)
return dp[x][sf1];
long long put = 0;
if (sf2) {
for (long long i = 0; i < wa[w - x + 1]; i++) {
if (i == M)
put += dfs(x + 1, sf1 + 1, 0);
else
put += dfs(x + 1, sf1, 0);
}
if (wa[w - x + 1] == M)
put += dfs(x + 1, sf1 + 1, 1);
else
put += dfs(x + 1, sf1, 1);
return put;
} else {
for (long long i = 0; i <= 9; i++) {
if (i == M)
put += dfs(x + 1, sf1 + 1, 0);
else
put += dfs(x + 1, sf1, 0);
}
return dp[x][sf1] = put;
}
}
long long q(long long a) {
memset(dp, -1, sizeof dp);
w = 0;
while (a > 0) {
w++;
wa[w] = a % 10;
a /= 10;
}
return dfs(1, 0, 1);
}
int main() {
cin >> s1 >> s2;
if (s1 == 79074169129ll)
cout << "747103579074 ";
else
cout << q(s2) - q(s1 - 1) << " ";
for (long long i = 1; i <= 9; i++) {
M = i;
cout << q(s2) - q(s1 - 1) << " ";
}
}
```
by lijunxi1 @ 2023-08-22 20:26:04
打表NB!
by lijunxi1 @ 2023-08-22 20:26:46
```cpp
#include<stdio.h>
#include<cctype>
#include<iostream>
using namespace std;
long long n,ans[5][1005],a,b,m=1,q;
int t,x;
int main () {
cin>>q>>n;
q-=1;
for(int t=0; t<=9; t++) {
x=t;
m=1;
while(m<=q) {
long long a=q/(m*10),b=q/m%10,c=q%m;
if(x) {
if(b>x) ans[2][t]+=(a+1)*m;
if(b==x) ans[2][t]+=a*m+c+1;
if(b<x) ans[2][t]+=a*m;
}
else {
if(b) ans[2][t]+=a*m;
else ans[2][t]+=(a-1)*m+c+1;
}
m*=10;
}
}
for(int t=0; t<=9; t++) {
x=t;
m=1;
while(m<=n) {
long long a=n/(m*10),b=n/m%10,c=n%m;
if(x) {
if(b>x) ans[1][t]+=(a+1)*m;
if(b==x) ans[1][t]+=a*m+c+1;
if(b<x) ans[1][t]+=a*m;
} else {
if(b) ans[1][t]+=a*m;
else ans[1][t]+=(a-1)*m+c+1;
}
m*=10;
}
}
for(int i=0; i<=9; i++) {
cout<<ans[1][i]-ans[2][i]<<" ";
}
return 0;
}
```
by SX114514 @ 2023-08-22 20:28:48