C. Beautiful Numbers
C. Beautiful Numbers
Time Limit : 4000/2000ms (Java/Other) Memory Limit : 524288/262144K (Java/Other)
Total Submission(s) : 27 Accepted Submission(s) : 7
Vitaly is a very weird man. He's got two favorite digits a and b. Vitaly calls a positive integer good, if the decimal representation of this integer only contains digits a and b. Vitaly calls a good number excellent, if the sum of its digits is a good number.
For example, let's say that Vitaly's favourite digits are 1 and 3, then number 12 isn't good and numbers 13 or 311 are. Also, number 111 is excellent and number 11 isn't.
Now Vitaly is wondering, how many excellent numbers of length exactly n are there. As this number can be rather large, he asks you to count the remainder after dividing it by 1000000007 (109+7).
A number's length is the number of digits in its decimal representation without leading zeroes.
The first line contains three integers: a, b, n (1≤a<b≤9,1≤n≤106).
Print a single integer the answer to the problem modulo 1000000007 (109+7).
2 3 10
165
题目:Beautiful number题意:给两个数a,b;如果某个数的每一位上都是由a或b组成如:a = 1 ,b=3; 则n=113那么n就是good number;如果某个数满足是good number;且各个位上的数的和,也是good number;那么这个数称为excellent number;求n长度的位数的数,有多少个满足a,b的excellent number; 结果%(10^9+7);思路:排列组合的方法; 首先n个长度的数s,必须是若干个a,b组成的每一位上; 所以设有x个a, y个b,那么x*a+y*b==s; x+y==n;所以枚举处所有的x,y = n-x; 所以也可以求出s=a*x+y*b;然后判断s是否每一位上都是a或者b;如果是的话,那么排列组合x在n中的组合方法数;*/#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<algorithm>#include<queue>#include<vector>#include<cctype>#include<set>#include<map>typedef __int64 ll;using namespace std;const int maxn = 1e6+5;const int inf = 0x3f3f3f3f;const int INF = 0xfffffff;//更小;const ll mod = 1e9+7;ll fact[maxn];ll save[1000], z, a, b, n;int bitlen;/*刚开始我打算把小于等于b*n的所有符合good number的数字s找出来,然后再判断能否有x个a,y个b使得x*a+y*b==s 且x+y==n;然而这种最多达到128;所以:128*n(1*10^6); 会超时;void dfs(ll s,ll sum){ ll t = sum*10; if(t+a>s) return ; save[z++] = t+a; dfs(s,t+a); if(t+b>s) return ; save[z++] = t+b; dfs(s,t+b);}*/int isgood(int x) { for(; x; x/=10) { if(x%10 != a && x%10 != b) { return 0; } } return 1;}ll ext_gcd(ll a,ll b,ll &x,ll &y){ if(b==0) { x = 1, y = 0; return a; } ll d = ext_gcd(b,a%b,x,y); ll t = x; x = y; y = t-a/b*y; return d;}ll Pow(ll a,ll b)//92ms{ ll ans=1; while(b) { if(b&1) { b--; ans=(ans*a)%mod; } else { b/=2; a=(a*a)%mod; } } return ans;}//92ms;相同;ll inv_mod(ll a) // ix=1(mod n) 这里是求逆元的第二种方法;第一种是快速幂;{ ll x, y, d; d = ext_gcd(a, mod, x, y); while(x<0) { x+=mod; } return x;}ll Multi(ll x0){ return ((fact[n]%mod)*Pow(fact[x0]*fact[n-x0]%mod,mod-2))%mod;//快速幂的方法; // return ((fact[n]%mod)*inv_mod(fact[x0]*fact[n-x0]%mod)%mod+mod)%mod;//这里是(a/b)%mod==(a%mod)*(inver(b)%mod)%mod; //同时发现,(a1*a2*...*an)^(M-2)%mod;等价于:先对里面的结果取余,再对它的次方计算取余;}int main(){ ll x, y, gcd, x0, y0, ans; fact[0] = 1; for(ll i = 1; i <= 1000000; i++){//初始化阶乘值; fact[i] = fact[i-1]*i%mod; } while(scanf("%I64d%I64d%I64d",&a,&b,&n)!=EOF) { ll s = n*b; z = ans = 0; gcd = ext_gcd(a,b,x,y); // dfs(s,0);//获得good number; // for(int i = 0; i < z; i++){ for(ll i = 0; i <= n; i++){///这样确实快了不少;复杂度约为7*n(7*10^6); if(isgood(a*i+b*(n-i))){ ans = (ans+Multi(i))%mod; } } // } /**为什么下面的不行;数据:6 8 14215 答案:651581472 我的是:0;也就是没有达到第131行的那一步; 如果实在找不到错误的处理方法和原因,姑且换一种方法吧; *//* for(int i = 0; i < z; i++){ if(save[i]%gcd!=0) continue; gcd = ext_gcd(a,b,x,y); x0 = save[i]/gcd*x; y0 = save[i]/gcd*y; ll t = b/gcd; while(x0>t) { x0 = x0%t; y0 += x0/t*(a/gcd); } for(ll k = 0; ; k++){ x0 += k*b/gcd;// x0 个 a; y0 -= k*a/gcd;// y0 个 b; if(y0<0) break; if(x0<0||x0+y0!=n) continue; ans += ((fact[n]%mod)*inv_mod(fact[x0]*fact[n-x0]%mod)%mod+mod)%mod; ans %= mod; } }*/ cout<<ans<<endl; } return 0;}C. Beautiful Numbers的更多相关文章
- CodeForces 55D Beautiful numbers
D. Beautiful numbers time limit per test 4 seconds memory limit per test 256 megabytes input standar ...
- [codeforces 55]D. Beautiful numbers
[codeforces 55]D. Beautiful numbers 试题描述 Volodya is an odd boy and his taste is strange as well. It ...
- codeforces 55D - Beautiful numbers(数位DP+离散化)
D. Beautiful numbers time limit per test 4 seconds memory limit per test 256 megabytes input standar ...
- Codeforces Round #181 (Div. 2) C. Beautiful Numbers 排列组合 暴力
C. Beautiful Numbers 题目连接: http://www.codeforces.com/contest/300/problem/C Description Vitaly is a v ...
- Codeforces Beta Round #51 D. Beautiful numbers 数位dp
D. Beautiful numbers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/55/p ...
- CF 55D - Beautiful numbers(数位DP)
题意: 如果一个数能被自己各个位的数字整除,那么它就叫 Beautiful numbers.求区间 [a,b] 中 Beautiful numbers 的个数. 分析:先分析出,2~9 的最大的最小公 ...
- Codeforces Beta Round #51 D. Beautiful numbers
D. Beautiful numbers time limit per test 4 seconds memory limit per test 256 megabytes input standar ...
- Beautiful Numbers(牛客网)
链接:https://ac.nowcoder.com/acm/problem/17385来源:牛客网 题目描述 NIBGNAUK is an odd boy and his taste is stra ...
- CodeForces 55D "Beautiful numbers"(数位DP+离散化处理)
传送门 参考资料: [1]:CodeForces 55D Beautiful numbers(数位dp&&离散化) 我的理解: 起初,我先定义一个三维数组 dp[ i ][ j ][ ...
- 【数位dp】Beautiful Numbers @2018acm上海大都会赛J
目录 Beautiful Numbers PROBLEM 题目描述 输入描述: 输出描述: 输入 输出 MEANING SOLUTION CODE Beautiful Numbers PROBLEM ...
随机推荐
- 破解MyEclipse2015 stable3.0
整个破解过程最好断网: 1.安装好MyEclipse2015 stable3后,打开设置好工作目录后,退出.2.将plugins文件夹中的文件拷贝到myeclipse安装目录的plugins文件夹下, ...
- 使用git-svn迁移SVN至GitLab
使用git-svn迁移SVN至GitLab 1.安装git和git-svn 后面的步骤中对git版本有一定要求,通过yum安装的git版本较低,这里进行编译安装 [root@DevTest ~]# y ...
- Solidworks如何等比例缩小放大模型
比如初始化的模型,笔记本长度只有120mm,实际上应该是3倍左右 右击特征,勾选模具工具,然后可以发现多出来一个页面 点击比例缩放,选中要缩放的特征,设置比例,然后打钩 可以发现已经缩放到 ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)如何修改标准驱动器编码器分辨率
在某个轴的Enc上双击,可以修改Scaling Factor Numerator 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetao ...
- ASP.NET MVC扩展之HtmlHelper辅助方法
什么是HtmlHelper辅助方法? 其实就是HtmlHelper类的扩展方法,如下所示: namespace System.Web.Mvc.Html { public static class Fo ...
- Android 如何在关于手机界面添加个图片
前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...
- Unity命令行模式,也能「日志实时输出」
转自自己的简书:http://www.jianshu.com/p/bd97cb8042a9 如果你使用过Unity命令行模式(batchmode),来实现Unity自动化编译构建,你肯定会遇到过这样的 ...
- [Exception Android 22] - Could not find com.android.support:design:23.1.1
Error:A problem occurred configuring project ':app'. > A problem occurred configuring project ':f ...
- Redis使用经验
首先,缓存的对象有三种: 1:数据库中单条的的数据(以表名跟id作为key永久保存到Redis),在有更新的地方都要更新缓存(不适用于需要经常更新的数据): 2:对于一些不分页,不需要实时(需要多表查 ...
- 学会Git玩转Github笔记(一)——Github基本概念 & 仓库管理
一.github基本概念 使用目的:借助GitHub托管项目代码 1.仓库(Respository) 2.收藏(Star) 3.复制克隆项目(Fork) :分叉—你开源了一个项目,别人想在你这个项目基 ...