二模12day1解题报告

T1.笨笨与电影票(ticket)

有n个1和m个0,求每个数前1的个数都大于等于0的个数的排列数。

非常坑的一道题,推导过程很烦。首先求出所有排列数是

C(n+m,m),然后算不合法的个数。

假设存在一个排列,1100011010,由5个1和5个0构成,但是从第5位开始是不合法的。如果把6~10位取反变成1100000101,就变成了n-1个1,m+1个0的一种排列。所以不合法的排列为

C(n+m,m-1)

但是这是不够的,因为这样会存不下(即使压位),所以需要另一种算法的辅助。

先对阶乘中的每一个数分解质因数,算出分子分母各自有的每个质因数个数,存在a[i],b[i]中,这样的话对每个质数只要乘(a[i]-b[i])次,完全转化成了高精度乘法。

 

 

 

T2.笨笨当火炬手(torch)

给出一个数n,求最小的数m来使n*m为0和1组成的十进制数。

因为n<=100000,所以最多枚举个1019,也就52万多个。一个个凑就好了啊。

T3.笨笨的雕塑安置(sculpture)

n*n的网格有m个点不能用,求放置n个雕塑,每行每列只有一个的方案数。

正面考虑很麻烦,因为能用的点太多了。所以从反面考虑。

总共的放置方案有n!种,要求出不合法的方案数。

用dfs求出m个格子放了k个的方案数,类似于八皇后,存在r[k]数组中。那么剩下的n-k个雕塑就有(n-k)!种方法,所以共有r[k]*(n-k)!种。

然后利用容斥原理,ans=n!-r[1]*(n-1)!+r[2]*(n-2)!-r[3]*(n-3)!……

这样输出ans即可。(ans和r[]要用long long)

转载于:https://www.cnblogs.com/zcyhhh/p/6073847.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值