博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数学(组合,容斥):COGS 1220. 盒子与球
阅读量:5280 次
发布时间:2019-06-14

本文共 1168 字,大约阅读时间需要 3 分钟。

1220. 盒子与球

★   输入文件:boxball.in   输出文件:boxball.out   简单对比

时间限制:1 s   内存限制:128 MB

【问题描述】

现有r个互不相同的盒子和n个互不相同的球,要将这n个球放入r个盒子中,且不允许有空盒子。问有多少种方法?

例如:有2个不同的盒子(分别编为1号和2号)和3个不同的球(分别编为1、2、3号),则有6种不同的方法:

1号盒子

1号球

1、2号球

1、3号球

2号球

2、3号球

3号球

2号盒子

2、3号球

3号球

2号球

1、3号球

1号球

1、2号球

 

【输入】

两个整数,n和r,中间用空格分隔。(0≤n, r≤10)

【输出】

仅一行,一个整数(保证在长整型范围内)。表示n个球放入r个盒子的方法。

【样例】

box.in

3 2

box.out

6

  容斥就可以A过去了,若不知道容斥可能对着道题无从下手。

 

1 #include 
2 #include
3 #include
4 using namespace std; 5 long long ans; 6 int n,m; 7 long long Calc(int n,int k){ 8 long long ret=1; 9 for(int i=1;i<=n;i++)ret*=i;10 for(int i=1;i<=k;i++)ret/=i;11 for(int i=1;i<=n-k;i++)ret/=i;12 return ret;13 }14 int main(){15 freopen("boxball.in","r",stdin);16 freopen("boxball.out","w",stdout);17 scanf("%d%d",&n,&m);18 for(int i=m;i>=1;i--){19 long long ret=1;20 for(int j=1;j<=n;j++)21 ret*=i;22 if((m-i+1)&1)23 ans+=ret*Calc(m,i);24 else 25 ans-=ret*Calc(m,i); 26 }27 printf("%lld\n",ans); 28 return 0;29 }

 

转载于:https://www.cnblogs.com/TenderRun/p/5323254.html

你可能感兴趣的文章
Android开发之Fragment传递參数的几种方法
查看>>
Android开发更新UI的几种方式
查看>>
【Tools】linux更改分辨率,解决虚拟机安装后太小的问题
查看>>
u盘引导制作工具
查看>>
three.js贴图
查看>>
Linux kernel 之 socket 创建过程分析
查看>>
Linux 系统串口信息查看
查看>>
Codeforces Round #207 (Div. 1) A. Knight Tournament(STL)
查看>>
cpu切换线程上下文会耗费多少时间
查看>>
前端常用的几个js判断(二)(转载)
查看>>
20190509 大数据小牛学堂培训全套视频课程资源
查看>>
提取 linux 文件目录结构
查看>>
HTTPS那些事(三)攻击实例与防御
查看>>
GoldenGate单向复制配置示例
查看>>
03JavaScript程序设计修炼之道 2019-06-27_20-34-17 文本节点创建、文档碎片
查看>>
springMvc Velocity tool 源码分析
查看>>
Akka源码分析-Persistence-AtLeastOnceDelivery
查看>>
Oracle sql执行计划
查看>>
C++的MFC,与C#的.NET
查看>>
构建多页面应用——单个页面的处理
查看>>