[CodeForces 300C Beautiful Numbers]组合计数
题意:十进制的每一位仅由a和b组成的数是“X数”,求长度为n,各数位上的数的和是X数的X数的个数
思路:由于总的位数为n,每一位只能是a或b,令a有p个,则b有(n-p)个,如果 a*p+b*(n-p) 为X数,则这种情况的答案就是C(n,p),将所有情况累加起来即可。
- #include <map>
- #include <set>
- #include <cmath>
- #include <ctime>
- #include <deque>
- #include <queue>
- #include <stack>
- #include <vector>
- #include <cstdio>
- #include <string>
- #include <cstdlib>
- #include <cstring>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- #define X first
- #define Y second
- #define pb push_back
- #define mp make_pair
- #define all(a) (a).begin(), (a).end()
- #define fillchar(a, x) memset(a, x, sizeof(a))
- #define copy(a, b) memcpy(a, b, sizeof(a))
- typedef long long ll;
- typedef pair<int, int> pii;
- typedef unsigned long long ull;
- //#ifndef ONLINE_JUDGE
- void RI(vector<int>&a,int n){a.resize(n);for(int i=;i<n;i++)scanf("%d",&a[i]);}
- void RI(){}void RI(int&X){scanf("%d",&X);}template<typename...R>
- void RI(int&f,R&...r){RI(f);RI(r...);}void RI(int*p,int*q){int d=p<q?:-;
- while(p!=q){scanf("%d",p);p+=d;}}void print(){cout<<endl;}template<typename T>
- void print(const T t){cout<<t<<endl;}template<typename F,typename...R>
- void print(const F f,const R...r){cout<<f<<", ";print(r...);}template<typename T>
- void print(T*p, T*q){int d=p<q?:-;while(p!=q){cout<<*p<<", ";p+=d;}cout<<endl;}
- //#endif
- template<typename T>bool umax(T&a, const T&b){return b<=a?false:(a=b,true);}
- template<typename T>bool umin(T&a, const T&b){return b>=a?false:(a=b,true);}
- template<typename T>
- void V2A(T a[],const vector<T>&b){for(int i=;i<b.size();i++)a[i]=b[i];}
- template<typename T>
- void A2V(vector<T>&a,const T b[]){for(int i=;i<a.size();i++)a[i]=b[i];}
- const double PI = acos(-1.0);
- const int INF = 1e9 + ;
- const double EPS = 1e-8;
- /* -------------------------------------------------------------------------------- */
- template<int mod>
- struct ModInt {
- const static int MD = mod;
- int x;
- ModInt(ll x = ): x(x % MD) {}
- int get() { return x; }
- ModInt operator + (const ModInt &that) const { int x0 = x + that.x; return ModInt(x0 < MD? x0 : x0 - MD); }
- ModInt operator - (const ModInt &that) const { int x0 = x - that.x; return ModInt(x0 < MD? x0 + MD : x0); }
- ModInt operator * (const ModInt &that) const { return ModInt((long long)x * that.x % MD); }
- ModInt operator / (const ModInt &that) const { return *this * that.inverse(); }
- ModInt operator += (const ModInt &that) { x += that.x; if (x >= MD) x -= MD; }
- ModInt operator -= (const ModInt &that) { x -= that.x; if (x < ) x += MD; }
- ModInt operator *= (const ModInt &that) { x = (long long)x * that.x % MD; }
- ModInt operator /= (const ModInt &that) { *this = *this / that; }
- ModInt inverse() const {
- int a = x, b = MD, u = , v = ;
- while(b) {
- int t = a / b;
- a -= t * b; std::swap(a, b);
- u -= t * v; std::swap(u, v);
- }
- if(u < ) u += MD;
- return u;
- }
- };
- typedef ModInt<> mint;
- const int maxn = 1e6 + ;
- bool yes[ * maxn];
- int a, b, n;
- mint fac[maxn], facinv[maxn];
- void pre_init() {
- fillchar(yes, );
- for (int i = ; i < ( << ); i ++) {
- int buf = ;
- for (int j = ; j < ; j ++) {
- if (( << j) & i) buf = buf * + b;
- else buf = buf * + a;
- yes[buf] = true;
- }
- yes[buf] = true;
- }
- fac[] = facinv[] = ;
- for (int i = ; i <= n; i ++) {
- fac[i] = fac[i - ] * i;
- facinv[i] = facinv[i - ] / i;
- }
- }
- int main() {
- #ifndef ONLINE_JUDGE
- freopen("in.txt", "r", stdin);
- //freopen("out.txt", "w", stdout);
- #endif // ONLINE_JUDGE
- while (cin >> a >> b >> n) {
- pre_init();
- mint ans = ;
- for (int i = ; i <= n; i ++) {
- if (yes[b * n + (a - b) * i]) {
- ans += fac[n] * facinv[i] * facinv[n - i];
- }
- }
- cout << ans.get() << endl;
- }
- return ;
- }
[CodeForces 300C Beautiful Numbers]组合计数的更多相关文章
- CodeForces 300C Beautiful Numbers(乘法逆元/费马小定理+组合数公式+高速幂)
C. Beautiful Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- CodeForces 300C Beautiful Numbers
枚举,组合数,逆元. 枚举$a$用了$i$个,那么$b$就用了$n-i$个,这个时候和$sum=a*i+b*(n-i)$,判断$sum$是否满足条件,如果满足,那么答案加上$C(n,i)$. #inc ...
- Codeforces 300C Beautiful Numbers 【组合数】+【逆元】
<题目链接> 题目大意: 给出a和b,如果一个数每一位都是a或b,那么我们称这个数为good,在good的基础上,如果这个数的每一位之和也是good,那么这个数是excellent.求长度 ...
- CodeForces 55D "Beautiful numbers"(数位DP+离散化处理)
传送门 参考资料: [1]:CodeForces 55D Beautiful numbers(数位dp&&离散化) 我的理解: 起初,我先定义一个三维数组 dp[ i ][ j ][ ...
- Codeforces 55D. Beautiful numbers(数位DP,离散化)
Codeforces 55D. Beautiful numbers 题意 求[L,R]区间内有多少个数满足:该数能被其每一位数字都整除(如12,24,15等). 思路 一开始以为是数位DP的水题,觉得 ...
- CodeForces 55D Beautiful numbers
D. Beautiful numbers time limit per test 4 seconds memory limit per test 256 megabytes input standar ...
- codeforces 55D - Beautiful numbers(数位DP+离散化)
D. Beautiful numbers time limit per test 4 seconds memory limit per test 256 megabytes input standar ...
- CodeForces - 55D Beautiful numbers —— 数位DP
题目链接:https://vjudge.net/problem/CodeForces-55D D. Beautiful numbers time limit per test 4 seconds me ...
- CodeForces - 55D - Beautiful numbers(数位DP,离散化)
链接: https://vjudge.net/problem/CodeForces-55D 题意: Volodya is an odd boy and his taste is strange as ...
随机推荐
- Nightmare BFS
Ignatius had a nightmare last night. He found himself in a labyrinth with a time bomb on him. The la ...
- 15分钟从零开始搭建支持10w+用户的生产环境(二)
上一篇文章,把这个架构的起因,和操作系统的选择进行了详细说明. 原文地址:15分钟从零开始搭建支持10w+用户的生产环境(一) 二.数据库的选择 对于一个10W+用户的系统,数据库选择很重要. 一 ...
- Jmeter系列(2)- Jmeter工具介绍、Jmeter安装目录介绍、Jmeter面板介绍
如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html Jmeter支持哪些测试场景? Jme ...
- 聊一聊JSONP和图像Ping的区别
JSONP 在讲 JSONP 之前需要再来回顾一下在页面上使用 script 引入外部的 js 文件时到底引入了什么? 先建立一个 index.js 文件. console.log(123) 再建立一 ...
- keras数据集读取
from tensorflow.python import keras (x_train,y_train),(x_test,y_test) = keras.datasets.cifar100.load ...
- Python中实现按顺序遍历字典
第一种方法: import collections d = collections.OrderedDict([('a',1),('b',2),('c',3)]) ''' 或者把上面的那一行改成: d ...
- PHP 构造方法 __construct()
PHP 构造方法 __construct() PHP 构造方法 __construct() 允许在实例化一个类之前先执行构造方法. 构造方法 构造方法是类中的一个特殊方法.当使用 new 操作符创建一 ...
- beetl 模板语法
如何定义临时变量 @var tmp = false; 如何给临时变量赋值 @tmp = true; 如何在判断中使用临时变量 @if(tmp){ ... @} 如何使用条件语句 if else @if ...
- ip-端口-协议等基本概念
互联网上的计算机,都会有一个唯一的32位的地址——ip地址.我们访问服务器,就必须通过这个ip地址. 局域网里也有预留的ip地址:192/10/172开头.局域网里的ip地址也是唯一的. NA ...
- Spark 源码系列(六)Shuffle 的过程解析
Spark 大会上,所有的演讲嘉宾都认为 shuffle 是最影响性能的地方,但是又无可奈何.之前去百度面试 hadoop 的时候,也被问到了这个问题,直接回答了不知道. 这篇文章主要是沿着下面几个问 ...