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 ...
随机推荐
- 解决html视频播放只有声音没有图像的办法
HTML5中并没有指定视频解码器,它留给了浏览器来决定. MP4有四种编码格式(MPEG4(DivX),MPEG4(Xvid),AVC(H264),HEVC(H265)): 只有使用AVC(H264) ...
- Android媒体扫描详细解析之一(MediaScanner & MediaProvider)
用过Android手机的同学都知道,每次开机的时候系统会先扫描sdcard,sdcard重新插拔(挂载)也会扫描一次sdcard. 为什么要扫描sdcard,其实是为了给系统的其他应用提供便利,比如, ...
- tomcat在ubuntu中设置开机启动
#!/bin/bash export JAVA_HOME=/usr/lib/jdk/jdk1.7.0_72 WEBROOT_PATH=/home/zhengze/workspace WEBSERVER ...
- 关于configure和Makefile
http://blog.csdn.net/lltaoyy/article/details/7615833 转篇文章,讲的不是很清楚,再附上几个资料连接,来自http://www.linuxdw.com ...
- Android TabHost控件 右侧留空并增加按钮
涉及公司内部程序,部分地方进行模糊处理. 公司Android程序的一个子程序UI要进行改版,最初的UI添加按钮是在内容区,而且TabHost空间是正常的标题平均分布.如下图(其实这是改版的第一版,没有 ...
- 各种字符编码方式详解及由来(ANSI,UNICODE,UTF-8,GB2312,GBK)
一直对字符的各种编码方式懵懵懂懂,什么ANSI UNICODE UTF-8 GB2312 GBK DBCS UCS……是不是看的很晕,假如您细细的阅读本文你一定可以清晰的理解他们.Let's go! ...
- .Net Framework 之 框架图
.Net Framework框架图,如下图: 它表明了这么一种编写软件的方式或者说表明了.Net平台下开发软件的思想和规范. .Net Framework框架实际只包含两部分: 1.公共语言运行时( ...
- python的__init__和__new__
本文所有实例代码在python3.7下 一.__new__和__init__区别 1.__new__先于__init__执行;__new__是相当于其他OOP语言的构造方法,负责创建实例:之后,__i ...
- Java中Object转化为int类型
转自:http://blog.sina.com.cn/s/blog_5f8421fb010162kb.html Java中由Object类型转化为int类型时,不能直接转化,先是将Object类型转化 ...
- 【BIEE】服务启动失败,查看错误日志
Weblogic服务日志文件:------------------------------BI Managed Server:OBIEE_HOME\user_projects\domains\bifo ...