help all W
查看原帖
help all W
758623
_Waldeinsamkeit_楼主2024/6/10 22:33
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
long long a[15];
long long ans1[15];
long long ans2[15];
long long mp1[15]={0,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000,10000000000,100000000000,1000000000000};
long long mp2[15][15][15];
long long mp3[15];
long long dp (long long n,long long k)
{
	long long i,j;
	long long ans=0;
	for (i=1;i<=n;i++)
	{
		if(a[i]==k)
		{
			ans++;
		}
	}
	for (i=1;i<=n;i++)
	{
		if (a[i]==k)
		{
			ans+=mp3[i-1];
		}
		for (j=(i!=n?0:1);j<a[i];j++)
		{
			ans+=mp2[i][j][k];
		}
	}
	for (i=1;i<=n-1;i++)
	{
		for (j=1;j<=9;j++)
		{
			ans+=mp2[i][j][k];
		}
	}
	return ans;
}
int main()
{
	for (long long i_1=1;i_1<=12;i_1++)
	{
		for (long long i_2=0;i_2<=9;i_2++)
		{
			if (i_1==1)
			{
				mp2[i_1][i_2][i_2]=1;
			}
			else
			{
				for (long long i_3=0;i_3<=9;i_3++)
				{
					if (i_2==0&&i_3==0)
					{
						mp2[i_1][i_2][i_3]+=mp2[i_1-1][i_2][i_3];
					}
					else
					{
						if (i_2==i_3)
						{
							mp2[i_1][i_2][i_3]+=mp1[i_1-1];
						}
						for (long long i_4=0;i_4<=9;i_4++)
						{
							mp2[i_1][i_2][i_3]+=mp2[i_1-1][i_4][i_3];
						}
					}
				} 
			}
		}
	}
	long long i,j;
	long long n,e;
	cin>>e;
	n=0,e--;
	while (e)
	{
		a[++n]=e%10;
		e/=10;
	}
	for (i=1;i<=n;i++)
	{
		mp3[i]=a[i]*mp1[i-1]+mp3[i-1];
	}
	for (i=0;i<=9;i++)
	{
		ans1[i]=dp(n,i);
	}
	for (i=1;i<=n;i++)
	{
		a[i]=0;
	}
	for (i=1;i<=n;i++)
	{
		mp3[i]=0;
	}
	cin>>e;
	n=0;
	while (e)
	{
		a[++n]=e%10;
		e/=10;
	}
	for (i=1;i<=n;i++)
	{
		mp3[i]=10*mp3[i-1]+a[i];
	}
	for (i=0;i<=9;i++)
	{
		ans2[i]=dp(n,i);
	}
	for (i=0;i<=9;i++)
	{
		cout<<ans2[i]-ans1[i]<<" ";
	}
	return 0; 
 } 
2024/6/10 22:33
加载中...