洛谷P1066:https://www.luogu.org/problemnew/show/P1066

思路

挺难的一道题 也很复杂

满足题目要求的种数是两类组合数之和

r的最多位数m为

  1. w/k(当w mod k=0 时)
  2. w/k+1(当 w mod k=1 时)

First:

位数为2~m的种数

即从2k-1中不重复地取i个的组合数(只取到2k-1是因为2k会进位)

即C(2k-1,2)+C(2k-1,3)+...+C(2k-1,m)

Second:

位数为m+1的种数

因为要每个数严格小于左边

所以枚举第一位的值i 再取其他的组合数C(2k-1-i,m)

代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int total[];//存高精ans
int k,w,n,m,c;
int gcd(int a,int b)
{
if(a%b==) return b;
else return gcd(b,a%b);
}
void C(int n,int m)
{
if(n<m) return;
int a[],b[],x,g;
for(int i=m;i>=;i--)
{
a[i]=n+i-m;//分子的因子n!/(n-m)!
b[i]=i;//分母的因子m!
}
for(int i=;i<=m;i++)//约分 去掉分母b[i]
{
if(b[i]==) continue;
for(int j=m;j>=;j--)//高精除法
{
x=gcd(b[i],a[j]);
b[i]/=x;
a[j]/=x;
if(b[i]==) break;
}
}
memset(b,,sizeof(b));
b[]=,b[]=;
for(int j=;j<=m;j++)//约分后的分子相乘
{
g=;
if(a[j]==) continue;
for(int i=;i<=b[];i++)
{
b[i]=b[i]*a[j]+g;//高精乘法
g=b[i]/;
b[i]%=;
if(i==b[]&&g!=) b[]++;//如果还要进位 说明长度要加1
}
}
total[]=max(total[],b[]);
for(int i=;i<=total[];i++)//高精加法
{
total[i]+=b[i];
total[i+]+=total[i]/;
total[i]%=;
}
if(total[total[]+]!=) total[]++;//如果还要进位 说明长度要加1
}
int main()
{
cin>>k>>w;
n=(<<k)-;//2^k-1
c=w%k;
m=w/k;//最高位数
for(int i=m;i>=;i--) C(n,i);//计算位数为2~len-1的组合数
c=(<<c)-;//最高位可取最大值
if(c>=&&n>m)//计算位数为len的组合数
for(int i=;i<=c;i++) C(n-i,m);//第一位取了i 后面只能取n-i 且要取m个
for(int j=total[];j>=;j--) cout<<total[j];//逆序输出ans
}

最新文章

  1. HTTPS那些事(一)HTTPS原理
  2. SQLMAP 中$与#的区别
  3. [转]C#中调用资源管理器(Explorer.exe)打开指定文件夹 + 并选中指定文件 + 调用(系统默认的播放类)软件(如WMP)打开(播放歌曲等)文件
  4. ubuntu搭建svn服务器(转)
  5. Mongodb的范式化和反范式化
  6. bounds的深入研究
  7. SQL Server 2005恢复数据库详细图文教程
  8. PHPCMS 使用图示和PHPCMS二次开发教程(转)
  9. C# 温故而知新:Stream篇(—)
  10. JAVA之成员变量初始化
  11. 快速学习Bash
  12. HashTable源码阅读
  13. js 控制光标到指定位置
  14. ViewHolder模式的简洁写法
  15. Ubuntu16.04多个版本GCC编译器的安装和切换
  16. 华硕飞马3S,日常使用续航测试
  17. wfp(Application的运用)
  18. VMware Workstation 不可恢复错误 解决方法
  19. Centos配置vsftpd
  20. LeetCode题解之Binary Number with Alternating Bits

热门文章

  1. TOJ 2641 Gene
  2. one-vs-all案例
  3. mvc 中Request[&quot;&quot;]与Request.QueryString[&quot;&quot;]
  4. Investigating issues with Unmanaged Memory. First steps. (转载)
  5. Java开发团队管理细则
  6. 关于c3p0连接池连接mysql数据库需要注意的几点
  7. iOS Touch ID 简易开发教程
  8. 【Linux】 Linux编程规范&amp;Linux 编程环境搭建
  9. 【读书笔记】如何高效学习(Learn More ,Study Less)
  10. Mac系统在finder拦显示当前所浏览的文件路径的方法