BZOJ2425:[HAOI2010]计数——题解】的更多相关文章

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 其实能够构成的数就是原数的排列(算前导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)…
题目 你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数.比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1020,等等. 现在给定一个数,问在这个数之前有多少个数.(注意这个数不会有前导0). 输入格式 只有1行,为1个整数n. 输出格式 只有整数,表示N之前出现的数的个数. 输入样例 1020 输出样例 7 提示 n的长度不超过50,答案不超过\(2^{63}-1\). 题解 如果我们看做把0删除看做把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.…
[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…
SDOI2016-排列计数 发现很多题解都没有讲清楚这道题为什么要用逆元.递推公式怎么来的. 我,风雨兼程三十载,只为写出一篇好题解. 还是我来造福大家一下吧. 题目大意: 一个长度为 n 且 1~n 各出现一次的序列,希望在"序列中有且只有 m个数的值 等于 它的位置"条件下求出序列个数.答案对1000000007取模. 题目分析: 这道题也许是加强版的"装错了的信封",在"装错了的信封"上搞搞比利就好.我们不妨设: 值等于位置的数字 称 稳定…
最短路计数 此题还是寻找从1到i点总共有几个最短路且每条边的边长为1,对于这种寻找最短路的个数,我们可以反向搜索,即先用\(SPFA\)预处理出所有点的最短路,然后我们反向记忆化搜索,可以用\(sum[i]\)表示从i到1的最短路个数,然后我们初始化\(sum[1] = 1\),然后就可以了 代码: #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #inclu…
原题题意也就是给的数的全排列小于原数的个数. 我们可以很容易的想到重复元素的排列个数的公式. 但是我们发现阶乘的话很快就会爆long long啊(如果您想写高精请便) 之后我就尝试质因数分解....但是遗憾的是太蒻了,没有成功,还是爆了.20分惨惨.最后也没有找出来哪里错了. 最后蒟蒻只好参考题解了..... 之后我们再一考虑,会发现其实我们不需要重复元素排列个数的公式,我们只需要按照组合数的思想做即可. 假设我们现在有m个位置可以摆放,我们先放0,个数就是\(C_m^{cnt[0]}\),之后…