求助SP玄学CE
  • 板块学术版
  • 楼主HMP_Haoge
  • 当前回复4
  • 已保存回复4
  • 发布时间2020/11/30 18:51
  • 上次更新2023/11/5 07:01:42
查看原帖
求助SP玄学CE
254036
HMP_Haoge楼主2020/11/30 18:51

一个数位DP原题

本地和在线IDE都没有问题,为什么交上SP就CE了

远端OJ尚未返回编译信息。

本地开了四个警告的编译命令只有快读快写的警告。

#include<bits/stdc++.h>
using namespace std;
#define ri register int
#define ll long long
#define p 10000000070000007
#define MAXN 51
#define int long long

ll pow10[MAXN],dp[MAXN],a[MAXN],cnt[MAXN],tc[MAXN],ans1;

template< typename T >inline void read(T &x)
{
	char c=getchar();
	x=0;
	int f=0;
	for(; !isdigit(c); c=getchar()) f|=(c=='-');
	for(; isdigit(c); c=getchar()) x=((x<<3)+(x<<1)+(c^48));
	x=f?-x:x;
}
template< typename T >inline void write(T x)
{
	if(x<0) putchar('-'),x=-x;
	if(x>9) write(x/10);
	putchar(x%10^48);
}
inline void pre()
{
	pow10[0]=1;
	for(ri i=1;i<30;i++) dp[i]=(dp[i-1]*10%p+pow10[i-1])%p,pow10[i]=10*pow10[i-1]%p;
}
inline void sol(ll x)
{
	int len=0;
	while(x)
	{
		a[++len]=x%10;
		x/=10;
	}
	for(ri i=len;i>=1;i--)
	{
		for(ri j=0;j<10;j++)
		{
			cnt[j]+=dp[i-1]*a[i];
			cnt[j]%=p;
		}
		for(ri j=0;j<a[i];j++)
		{
			cnt[j]+=pow10[i-1];
			cnt[j]%=p;
		}
		ll last=0;
		for(ri j=i-1;j>=1;j--)
		{
			last=last*10+a[j];
			last%=p;
		}
		cnt[a[i]]+=last+1;
		cnt[a[i]]%=p;
		cnt[0]-=pow10[i-1];
		cnt[0]=(cnt[0]+p)%p;
	}
}

signed main()
{
	pre();
	int T,l,r;
	read(T);
	while(T--)
	{
		ans1=0;
		read(l);read(r);
		sol(r);
		for(ri i=0;i<10;i++) tc[i]=cnt[i],cnt[i]=0;
		sol(l-1);
		for(ri i=0;i<10;i++) ans1=(ans1+i*(tc[i]-cnt[i]+p)%p)%p,cnt[i]=0;
		write(ans1);
		putchar('\n');
	}
}
2020/11/30 18:51
加载中...