灵异事件
查看原帖
灵异事件
43144
jwkljwkl楼主2022/11/12 12:04

我和题解对拍了380000组数据,结果交上去爆零了

#include<bits/stdc++.h>
#define int long long
using namespace std;
long long a,b,m[15],d[15],dp[15][10];
int dig(long long w)
{
	int s=1;
	while(w/=10)s++;
	return s;
}
void solve(int ws,long long sh,bool qdl,int w,bool free)
{
	if(ws==0)return;
	int lim=(free?9:sh/m[ws-1]%10);
	if(ws==1)
	{
		lim++;
	}
	for(int i=1;i<lim;i++)
	{
		d[i]+=w*m[ws-1];
		for(int j=0;j<=9;j++)
		{
			d[j]+=dp[ws-1][j]*w;
		}
	}
	if(qdl)
	{
		solve(ws-1,sh,1,w,1);
	}
	else if(lim)
	{
		d[0]+=w*m[ws-1];
		for(int j=0;j<=9;j++)
		{
			d[j]+=dp[ws-1][j]*w;
		}
	}
	if(ws>1)
	{
		if(!free)d[lim]+=(sh%m[ws-1]+1)*w;
		else d[lim]+=m[ws-1]*w;
		solve(ws-1,sh,0,w,free);
	}
}
signed main()
{
	cin>>a>>b;
	m[0]=1;
	for(int i=1;i<=15;i++)m[i]=m[i-1]*10;
	for(int i=1;i<=12;i++)
	{
		for(int j=0;j<10;j++)
		{
			dp[i][j]+=10*dp[i-1][j]+m[i-1];
		}
	}
	solve(dig(b),b,1,1,0);
	solve(dig(a-1),a-1,1,-1,0);
	for(int i=0;i<10;i++)cout<<d[i]<<' ';
	cout<<endl;
	return 0;
}
2022/11/12 12:04
加载中...