救救!不知道哪错了!
查看原帖
救救!不知道哪错了!
735235
hmwzd1314楼主2023/11/26 09:52
#include<bits/stdc++.h>

using namespace std;
int A,B;
int a[1009],cnt,dp[13][2][2][11];
void f(int x)
{
	memset(dp,-1,sizeof(dp));
	memset(a,0,sizeof(a));
	cnt=0;
	while(x>0)
	{
		++cnt;
		a[cnt]=x%10;
		x/=10;
	}
	return;
}
struct node
{
	int d[11]={0,0,0,0,0,0,0,0,0,0,0};
};
node dfs(int k,bool limit,node w,bool b)
{
	if(!k)return w;
	if(~dp[k][limit][b][0])
	{
		node ans;
		for(int i=0;i<10;i++)ans.d[i]=dp[k][limit][b][i];
		return ans;
	}
	int r=9;
	if(limit)r=a[k];
	node sum;
	for(int i=0;i<=r;++i)
	{
		if(i==a[k]&&limit)
		{
			bool cb=b;
			if(i)cb=0;
			node cc=w;
			if(i||!b)cc.d[i]++;
			node o=dfs(k-1,1,cc,cb);
			for(int i=0;i<10;i++)sum.d[i]+=o.d[i];
		}
		else
		{
			bool cb=b;
			if(i)cb=0;
			node cc=w;
			if(i||!b)cc.d[i]++;
			node o=dfs(k-1,0,cc,cb);
			for(int i=0;i<10;i++)sum.d[i]+=o.d[i];
		}
	}
	for(int i=0;i<10;i++)dp[k][limit][b][i]=sum.d[i];
	return sum;
}
int main()
{
	scanf("%d%d",&A,&B);
	node x;
	f(A-1);
	node p=dfs(cnt,1,x,1);
	f(B);
	node q=dfs(cnt,1,x,1);
	for(int i=0;i<10;i++)cout<<q.d[i]-p.d[i]<<" ";
	return 0;
}
2023/11/26 09:52
加载中...