UVA11361 TLE求助
查看原帖
UVA11361 TLE求助
106738
_Felix楼主2020/5/18 19:51

错误代码

思路与蓝书(是这么叫吗?)相同吧

我感觉它的公式打错了一点点,所以我就写的不一样

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int t,a,b,k,dp[15][105][105][5],c[15],f[15];
int dfs(int d,int m1,int m2,bool fl){
	if(d==0) return m1==0&&m2==0;
	if(dp[d][m1][m2][fl]) return dp[d][m1][m2][fl];
	int num=9,ret=0;
	if(fl) num=c[d];
	for(int i=0;i<=num;i++)
		ret+=dfs(d-1,((m1-i)%k+k)%k,((m2-i*f[d-1])%k+k)%k,i==num&&fl);
	dp[d][m1][m2][fl]=ret;
	return ret;
}
int solve(int x){
	memset(dp,0,sizeof(dp));
	int len=0;
	for(len=1;x;len++){
		c[len]=x%10;
		x/=10;
	}//倒序的 
	return dfs(len,0,0,1);
}
int main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d%d%d",&a,&b,&k);
		f[0]=1;
		for(int i=1;i<=10;i++)
			f[i]=(f[i-1]*10%k+k)%k;
		if(k>=100) printf("0\n");
		else printf("%d\n",solve(b)-solve(a-1));
	}
	return 0;
}

我是不是复杂度假掉了/dk

2020/5/18 19:51
加载中...