【ZJOJ2010】数字计数(数字计数)

设f[i][j][p]表示长度为i 最高位为j p出现的个数

显然 f[i][j][p]=sigma{f[i-1][k][p]} 其中k是次高位 但是最高位出现的那么多次都没有被我们算进去

但是很显然只需要加上(i-2)^10就阔以了

然后常规的分[1,b],[1,a-1]解决

常规的分成两部分 一部分最高位小于最高位(似乎有点怪怪的??) 另一部分就是剩下的

在这里只说下另一部分

算了懒得说了 反正就那样 注意特判

#include
#define ll long long
using namespace std;
ll a,b,num[20];
ll bin[20],f[20][10][10],res[20];
void solve(ll x,int flag)  
{
    int cnt=0; ll x2=x;
    memset(num,0,sizeof(num));
    while(x)    num[++cnt]=x%10,x/=10;
    for(register int i=1;i>a>>b;
    if(a>b) swap(a,b); 
    solve(b,1); solve(a-1,-1);
    for(int i=0;i<=9;i++)   cout<

转载于:https://www.cnblogs.com/Patrickpwq/articles/9914484.html

你可能感兴趣的:(【ZJOJ2010】数字计数(数字计数))