P2518 [HAOI2010]计数】的更多相关文章

题目链接 \(Click\) \(Here\) 很好很妙的一个题目. 其实可以生成的数字,一定是原数的一个排列,因为\(0\)被放在前面就可以认为不存在了嘛~.也就是说现在求的就是全排列中所有小于该数的排列.对每一位我们考虑两类情况: 第一类情况 : 前 \(i\) 位上均相等, 且第 \(i\) 位上当前数是 \(j\) (比 \(arr_i\) 小) 这一位已经满足了约束条件小于,那么后面就可以放开了搞.也就是说后\(n-i\)个数形成的全排列中,每一个排列都是可以使用的,即答案加上一个全排…
题面 luogu 题解 本来想练数位dp的,结果又忍不住写了组合数.. 去掉一个\(0\)可以看作把\(0\)移到前面去 那么题目转化为 \(n\)有多少个排列小于\(n\) 强制某一位比\(n\)的对应位置上的数小, 后面方案组合数算一下即可 Code #include<bits/stdc++.h> #define LL long long #define RG register using namespace std; template<class T> inline void…
题目描述 你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数.比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1020,等等. 现在给定一个数,问在这个数之前有多少个数.(注意这个数不会有前导0). 输入输出格式 输入格式: 只有1行,为1个整数n. 输出格式: 只有整数,表示N之前出现的数的个数. 输入输出样例 输入样例#1: 复制 1020 输出样例#1: 复制 7 说明 n的长度不超过50,答案不超过2^63-1.…
题意 你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数.比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1020,等等. 现在给定一个数,问在这个数之前有多少个数.(注意这个数不会有前导0). 思路 注意题目的数据不一定只有1,或者2,而是看输入有多少数字. 其实可以转化为,有多少个全排列小于给定的数字,因为把0去掉相当于把0拿到前面去.具体写的时候,类似数位dp的思路. #include <algorithm> #i…
[BZOJ2425][HAOI2010]计数(组合数学) 题面 BZOJ 洛谷 题解 很容易的一道题目. 统计一下每个数位出现的次数,然后从前往后依次枚举每一位,表示前面都已经卡在了范围内,从这一位开始比目标小. 对于长度小于当前数的个数,我们可以默认它们有前导零就行了. #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define ll long long ll C…
[HAOI2010]计数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 451  Solved: 289[Submit][Status][Discuss] Description 你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数.比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1020,等等. 现在给定一个数,问在这个数之前有多少个数.(注意这个数不会有前导0).   I…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2425 其实能够构成的数就是原数的排列(算前导0),然后组合计数一下就可以了. #include<cstring> #include<iostream> #include<algorithm> #include<cstdio> #define rep(i,l,r) for (int i=l;i<=r;i++) #define down(i,l,r)…
https://www.lydsy.com/JudgeOnline/problem.php?id=2425 https://www.luogu.org/problemnew/show/P2518 你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数.比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1020,等等. 现在给定一个数,问在这个数之前有多少个数.(注意这个数不会有前导0). 题意看了半天终于看懂了. 我们从高位到低…
http://www.lydsy.com/JudgeOnline/problem.php?id=2425 题意转化: 给定一个集合S,求S的全排列<给定排列 的排列个数 从最高位开始逐位枚举确定 没有枚举到的位就是可重复集合的全排列 公式是 n!/ (n1!*n2!……) 高精? 用它的推导公式:C(n,n1)*C(n-n1,n2)*C(n-n1-n2,n3)…… #include<cstdio> #include<cstring> #include<iostream&…
Description 你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数.比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1020,等等. 现在给定一个数,问在这个数之前有多少个数.(注意这个数不会有前导0). Input 只有1行,为1个整数n. Output 只有整数,表示N之前出现的数的个数. Sample Input 1020 Sample Output 7 HINT n的长度不超过50,答案不超过263-1.…