【BZOJ】2142 礼物

【算法】中国剩余定理+组合数取模(lucas)

【题意】给定n件物品分给m个人,每人分到wi件,求方案数%p。p不一定是素数。

【题解】

首先考虑n全排列然后按wi划分成m份,然后对于每份内都是全排列,除以wi!消除标号影响,注意剩余的(n-W)也视为一份。

所以ans=n!/(w1!w2!...wm!(n-W)!)%p

也可以从排列组合公式方面考虑,即

ans=C(n,w1)*C(n-w1,w2)*C(n-w1-w2,w3)*...*C(n-w1-w2-...-w_(m-1),wm) mod P

=n!/w1!/w2!/.../wm! mod P (by POPOQQQ)

为了出p倍数

时间: 2024-10-10 00:07:10

【BZOJ】2142 礼物的相关文章

BZOJ 2142: 礼物

2142: 礼物 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1403  Solved: 578[Submit][Status][Discuss] Description 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E心目中的重要性不同,在小E心中分量越重的人,收到的礼物会越多.小E从商店中购买了n件礼物,打算送给m个人,其中送给第i个人礼物数量为wi.请你帮忙计算出送礼物的方案数(两个方

BZOJ 2142 礼物 组合数学+数论

题目大意:给定n个物品,分给m个人,每个人拿到wi个礼物,问方案数mod P P不一定为质数 首先我们把剩下的礼物也分给一个人 答案明显不变 w[++m]=n-w1-w2-...-wm 然后就会很方便地得到公式: ans=C(n,w1)*C(n-w1,w2)*C(n-w1-w2,w3)*...*C(n-w1-w2-...-w_(m-1),wm) mod P =n!/w1!/w2!/.../wm! mod P 然后p不是质数 我们把P分解 令P=∏pi^ai 我们分别处理,可以得到一次同余方程组a

bzoj 2142: 礼物【中国剩余定理+组合数学】

参考:http://blog.csdn.net/wzq_qwq/article/details/46709471 首先推组合数,设sum为每个人礼物数的和,那么答案为 \[ ( C_{n}^{sum}C_{sum}^{w[1]}c_{sum-w[1]}^{w[2]}... \] 设w[0]=n-sum,然后化简成阶乘的形式: \[ \frac{n!}{w[0]!w[1]!...w[n]!} \] 注意到这里p不是质数,所以把p拆成质数的方相乘的形式,最后用中国剩余定理合并即可 然后现在的问题是怎

BZOJ 2142 礼物 数论

这道题是求组合数终极版. C(n,m) mod P n>=1e9 m>=1e9 P>=1e9且为合数且piqi<=1e5 拓展lucas定理. 实际上就是一点数论小知识的应用. 这篇文章对于CRT和lucas定理的学习非常不错. #include<bits/stdc++.h> using namespace std; #define ll long long #define FILE "dealing" #define up(i,j,n) for(i

BZOJ.2142.礼物(扩展Lucas)

题目链接 答案就是C(n,m1) * C(n-m1,m2) * C(n-m1-m2,m3)...(mod p) 使用扩展Lucas求解. 一个很简单的优化就是把pi,pi^ki次方存下来,因为每次分解p都是很慢的. 注意最后p不为1要把p再存下来!(质数) COGS 洛谷上的大神写得快到飞起啊QAQ 就这样吧 //836kb 288ms #include <cmath> #include <cstdio> typedef long long LL; int cnt,P[500],P

【BZOJ 2142】 礼物

2142: 礼物 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 701  Solved: 283 [Submit][Status][Discuss] Description 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E心目中的重要性不同,在小E心中分量越重的人,收到的礼物会越多.小E从商店中购买了n件礼物,打算送给m个人,其中送给第i个人礼物数量为wi.请你帮忙计算出送礼物的方案数(两个

bzoj 4827 礼物

bzoj 4827 礼物 可以看做将其中一个数列(假定为 \(a\) )都加上 \(c\) , \(c\) 可以为负数.易知这里 \(-m\leq c\leq m\). 记要求的答案为 \(ans\) , 大力拆开括号可得: \[ ans=\sum{(a_i+c-b_i)^2}\\=\sum a_i^2+\sum b_i^2+n\cdot c^2+2c\cdot (\sum a_i-\sum b_i)-2\sum a_i b_i. \] 这里的 \(a,b\) 是原数列元素不变,通过旋转得到的.

bzoj 2142

数论大集合 只要你做完了这道题,除了线性筛和降幂公式以外,所有数论noip知识点就都会了... 题意:求C(n,∑w)*C(∑w,w1)*C(∑w-w1,w2).....mod p(不保证p为质数) 思想:拓展卢卡斯定理 算法:我们可以分别求每个C(n,m),然后乘起来mod p即可 在求每个C(n,m)时,由公式C(n,m)= 于是:C(n,m)== 于是我们仅需求出n!mod p的值 可是首先,由于p不是质数,所以不能线性筛逆元 而且,即使p是质数,由于n的范围过大,筛出来也T了 所以我们要

bzoj 3129

非常好的一道数学题,考察了大量数论和组合数学的知识 在做本题之前强烈建议先完成下列两个背景知识: ①: bzoj 2142礼物 因为本题的一部分数据需要利用到拓展卢卡斯定理,而礼物是拓展卢卡斯定理的裸题,先做礼物是一个比较好的选择 有困难戳这里https://blog.csdn.net/lleozhang/article/details/82884768 ②: CF451E 本题的核心思想和CF451E完全相同,CF451E稍简单一些,所以先理解这里的思想再做本题会发现难度降了不少 有困难戳这里