列表

详情


NC50519. 数字游戏

描述

由于科协里最近真的很流行数字游戏,某人又命名了一种取模数,这种数字必须满足各位数字之和为0。现在大家又要玩游戏了,指定一个整数闭区间[a,b],问这个区间内有多少个取模数。

输入描述

题目有多组测试数据。每组只含三个数字a,b,N。

输出描述

对于每个测试数据输出一行,表示各位数字和为0的数的个数。

示例1

输入:

1 19 9

输出:

2

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 384K, 提交时间: 2020-06-01 09:42:01

#include<bits/stdc++.h>
using namespace std;
const int Max=12;
int n,m,l,r,f[Max][110][2];
char ch[Max];
inline int dfs(int pos,int sum,int limit)
{
	if(pos==n+1) return !sum?1:0;
	if(~f[pos][sum][limit]) return f[pos][sum][limit];
	int mx=limit?ch[pos]-'0':9,ans=0;
	for(int i=0;i<=mx;i++)
	ans+=dfs(pos+1,(sum+i)%m,limit&(i==mx));
	return f[pos][sum][limit]=ans;
}
inline int solve(int num)
{
	memset(f,-1,sizeof(f));
	sprintf(ch+1,"%d",num),n=strlen(ch+1);
	return dfs(1,0,1);
}
int main()
{
	while(cin>>l>>r>>m)
	cout<<solve(r)-solve(l-1)<<"\n";
	return 0;
}

上一题