文章目录

  • 题目描述
  • 解析
  • 代码

题目描述

解析

如果它不取等,那就和方程的解这道题一样了,但有了等号就很头疼
如何把等号去掉呢?
定义Bi=Ai+iB~i~=A~i~+iB i =A i +i那么我们就可以得到:0<B1<B2<...<Bm<=m+n0<B~1~<B~2~<...<B~m~<=m+n0<B 1 <B 2 <...<B m <=m+n,这样就可以转化为方程的解了
求C(n+m,n)即可
但是还有一个问题,就是它的数据规模太大,怎么办?
从洛谷学到了一种**分解质因数求组合数的方法,具体见下文代码吧

代码

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+100;
const int mod=1000;
int t,k,x;
int n,m;
int ans[N],cnt;
void cheng(int x){for(int i=1;i<=cnt;i++) ans[i]*=x;int num=0;while(x){num++;x/=10;}cnt+=num+1;for(int i=1;i<=cnt;i++){ans[i+1]+=ans[i]/10;ans[i]%=10;}while(ans[cnt]==0) cnt--;cnt=min(cnt,102);
}
//int now[N];
//void chu(int x){//  int res=0;
//  for(int i=cnt;i>=1;i--){//      res*=10;res+=ans[i];
//      ans[i]=res/x;
//      res%=x;
//  }
//  while(ans[cnt]==0) cnt--;
//}
int p[N],v[N],c[N],tot;
int id[N];
void find_prime(){int top=n+m;for(int i=2;i<=top;i++){if(!v[i]){v[i]=i;p[++tot]=i;id[i]=tot;}for(int j=1;j<=tot;j++){int now=p[j];if(now>top/i||now>v[i]) continue;}}
}
void add_divide(int x){int top=floor(sqrt(x));for(int i=1;i<=tot;i++){int now=p[i];if(now>top) break;while(x%now==0){x/=now;c[i]++;}}if(x){c[id[x]]++;}
}
void minus_divide(int x){int top=floor(sqrt(x));for(int i=1;i<=tot;i++){int now=p[i];if(now>top) break;while(x%now==0){x/=now;c[i]--;}}if(x){c[id[x]]--;}
}
int main(){scanf("%d%d",&n,&m);find_prime();cnt=1;ans[1]=1;for(int i=2;i<=n+m;i++){add_divide(i);}for(int i=2;i<=n;i++){minus_divide(i);}for(int i=2;i<=m;i++){minus_divide(i);}for(int i=1;i<=tot;i++){for(int j=1;j<=c[i];j++){cheng(p[i]);}}for(int i=100;i>=1;i--) printf("%d",ans[i]);
}

YBTOJ:数列方案(组合数学)相关推荐

  1. 【BZOJ1485】[HNOI2009]有趣的数列(组合数学)

    [BZOJ1485][HNOI2009]有趣的数列(组合数学) 题面 BZOJ 洛谷 题解 从小往大填数,要么填在最小的奇数位置,要么填在最小的偶数位置. 偶数位置填的数的个数不能超过奇数位置填的数的 ...

  2. 【XSY2808】董先生的休闲方案 组合数学

    题目描述 有\(n\)个方案,编号为\(1\ldots n\). 最开始你不知道每个方案的编号. 你要按顺序提出这些方案. 每一个时刻你要做以下事情: 如果你阅读过下一个方案,就提出这个方案. 否则随 ...

  3. ZZNU-OJ-2119 : 告辞,【卡特兰数列,组合数学】

    2119 : 告辞 时间限制:1 Sec 内存限制:256 MiB 提交:428 答案正确:102 提交 状态 编辑 讨论区 题目描述 整个世界都在散发着恋爱的恶臭,只有spring依旧保持着单身贵族 ...

  4. 组合数学 —— 卡特兰数列(Catalan)

    [概述] 卡特兰数列是组合数学中一个常出现在各种计数问题中出现的数列,其前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 2 ...

  5. 【Java系列】斐波拉契数列

    介绍 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列&q ...

  6. 暑期训练日志----2018.7.31

    训练第二天. 早上主持开会,讨论了半个多小时,发现很多人达到了传说的境界--会用就行,在我讲线性同余方程求法的时候,很多人认为那就是个模版,通解特解套用就行,但是为什么这么样套,以及定理2是怎么应用的 ...

  7. 以LOL为起点,谈谈游戏数值设计核心思路

    文档在今年三月份我动笔写了一小部分,但当时思路凌乱,行文梗阻,于是丢在一边构思了半年,现在又回过头来慢慢写,希望能写好写完吧,初衷是希望即时萌新也能看懂,但是好像并不能行--本来几个数据就能弄好的东西 ...

  8. 游戏数值——LOL篇 以LOL为起点-说游戏数值设计核心思路

    附     文   文档在今年三月份我动笔写了一小部分,但当时思路凌乱,行文梗阻,于是丢在一边构思了半年,现在又回过头来慢慢写,希望能写好写完吧,初衷是希望即时萌新也能看懂,但是好像并不能行--本来几 ...

  9. 【组合数学】生成函数 ( 正整数拆分 | 重复有序拆分 | 不重复有序拆分 | 重复有序拆分方案数证明 )

    文章目录 一.重复有序拆分 二.不重复有序拆分 1.无序拆分基本模型 2.全排列 三.重复有序拆分方案数证明 参考博客 : 按照顺序看 [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式 ...

最新文章

  1. Swift中页面跳转与传值:
  2. java正则表达式获取指定两个字符串之间内容
  3. 习惯的力量之五让迟延见鬼去吧
  4. 数据库事务转载基础二:MySQL事务隔离级别详解
  5. 怎么移动矩形选框工具选中的东西_程序员应具备的PS基本技能(二):程序员切图最常使用的工具组-选择工具组...
  6. STM32F103五分钟入门系列(十三)独立看门狗IWDG
  7. es6关于let和const的总结
  8. python常用包有哪些品牌_python 常用包总结
  9. HSImageSidebarView
  10. Exception in thread “main“ java.awt.AWTError: Assistive Technology not found: org.GNOME.Accessibilit
  11. python动态获取cookie_scrapy爬虫使用Ghost.py动态获取cookie
  12. 交叉路口红绿灯控制程序linux,西门子PLC编程实例详解|十字路口交通灯自动控制系统...
  13. Matlab画平滑曲线的两种方法( 拟合或插值后再用plot即可)
  14. Redis过期策略详解
  15. 基于SSH开发在线问卷调查系统
  16. C51单片机重要知识点总结
  17. php字体颜色代码大全,CSS中关于文本字体颜色(CSS color)的详解
  18. 计算机思维--0和1与逻辑
  19. jekyll-paginate 缺失
  20. 输入一个四位数字x,分别求出x的个位数字、十位数字、百位数字和千位数字的值 ,并求个位、十位、百位、千位的和 -C语言

热门文章

  1. 一文读懂 HMM 模型和 Viterbi 算法
  2. colorkey唇釉是否安全_colorkey空气唇釉,19/支
  3. java定时器写法_java定时器的写法是什么样?
  4. floatmap 二维数组_用J中的多维数组进行Arrays.fill
  5. windows制作定时关机脚本_自动关机、自动打开程序… 让Windows自动执行任何操作...
  6. php 数据导出到excel文件,PHP导出数据到excel文件
  7. python网络运维案例代码库_OLDboy-python第八期运维教程
  8. html 页面工具,html页面工具-htmlUnit
  9. linux java升级版本_为嵌入式Linux设备实现更新/升级系统
  10. java 实现 指派_TAP任务指派问题的汇编实现