模非素数下的排列组合,简直凶残

调着调着就过了= =

都不知道怎么过的= =

直接上链接http://hi.baidu.com/aekdycoin/blog/item/147620832b567eb40df4d258.html

CODE:

#include<cstdio>

#include<iostream>

#include<cstring>

#include<algorithm>

#include<cmath>

using namespace std;

typedef long long ll;

ll a[3][50],pri[50],M[50],t[50];

ll ex_gcd(ll a,ll b,ll &x,ll &y) {

if (b==0)  {x=1,y=0 ;return a;}

ex_gcd(b,a%b,x,y);

x=x-a/b*y;

swap(x,y);

return 0;

}

ll p;

int l,sum[50];

int fen(int p){

for (int i=2;i<=sqrt(p);i++) {

if (p%i==0) {

pri[++l]=i;

while (p%i==0) {

sum[l]++;

p/=i;

}

}

}

if (p>1) {pri[++l]=p;sum[l]=1;}

return 0;

}

ll power(ll x,ll y,ll mod){

if (y==0) return 1;

ll ans=power(x,y>>1,mod);

ans=ans*ans%mod;

if (y&1) ans=ans*x%mod;

return ans;

}

ll f[100101],cnt;

ll calcfac(ll n,ll p,ll pi){

if (n<pi) return f[n];

// printf("%lld %lld",pi,pri[1]);

ll seg=n/p,rem=n%p;

ll ret=power(f[p-1],seg,p);

ret=ret*f[rem]%p;

cnt+=n/pi;

ret=ret*calcfac(n/pi,p,pi)%p;

return ret;

}

ll china(ll *a,ll *b) {

ll tem,ans=0;

for (int i=2;i<=l;i++) {

ll x,y;

ex_gcd(b[i-1],b[i],x,y);

b[i]=b[i]*b[i-1];

a[i]=((x*(a[i]-a[i-1])*b[i-1]+a[i-1])%b[i]+b[i])%b[i];

}

return a[l];

}

ll b[51];

ll c(int n,int m){

for (int i=1;i<=l;i++) {

ll p=1;

for (int j=1;j<=sum[i];j++) p*=pri[i];

f[0]=1;

for (int j=1;j<p;j++) {

f[j]=f[j-1];

if (j%pri[i]==0) continue;

f[j]=(f[j]*j)%p;

}

cnt=0;ll ans,tem;

a[1][i]=calcfac(n,p,pri[i]);

tem=cnt;cnt=0;

a[2][i]=calcfac(m,p,pri[i]);

printf("%lld\n",pri[1]);

a[3][i]=calcfac(n-m,p,pri[i]);

cnt=tem-cnt;

a[2][i]=a[3][i]*a[2][i]%p;

ex_gcd(a[2][i],p,ans,tem);

ans=(ans%p+p)%p;

a[1][i]=a[1][i]*ans%p*power(pri[i],cnt,p)%p;

b[i]=p;

}

return (china(a[1],b));

}

ll te[8];

int main(){

ll n,m;

ll tmp=0;

scanf("%lld %lld %lld",&p,&n,&m);

for (int i=1;i<=m;i++) {

scanf("%lld",&te[i]);

tmp+=te[i];

}

if (tmp>n) {printf("Impossible");return 0;}

fen(p);

for (int i=1;i<=l;i++) printf("%lld %lld\n",pri[i],sum[i]);

ll ans=1;

for (int i=1;i<=m;i++) {

ans=ans*c(n,te[i])%p;

n-=te[i];

// if (ans==0) {printf("%d\n",0);return 0;}

printf("\n\n");

}

printf("%lld",ans);

return 0;

}

BZOJ 2142: 礼物的更多相关文章

  1. BZOJ 2142: 礼物 [Lucas定理]

    2142: 礼物 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1294  Solved: 534[Submit][Status][Discuss] ...

  2. BZOJ 2142 礼物 组合数学 CRT 中国剩余定理

    2142: 礼物 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1450  Solved: 593[Submit][Status][Discuss] ...

  3. 【刷题】BZOJ 2142 礼物

    Description 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E 心目中的重要性不同,在小E心中分量越重的人,收到的礼物会越多.小E从商店 ...

  4. bzoj 2142 礼物——扩展lucas模板

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2142 没给P的范围,但说 pi ^ ci<=1e5,一看就是扩展lucas. 学习材料 ...

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

    参考:http://blog.csdn.net/wzq_qwq/article/details/46709471 首先推组合数,设sum为每个人礼物数的和,那么答案为 \[ ( C_{n}^{sum} ...

  6. BZOJ.2142.礼物(扩展Lucas)

    题目链接 答案就是C(n,m1) * C(n-m1,m2) * C(n-m1-m2,m3)...(mod p) 使用扩展Lucas求解. 一个很简单的优化就是把pi,pi^ki次方存下来,因为每次分解 ...

  7. BZOJ - 2142 礼物 (扩展Lucas定理)

    扩展Lucas定理模板题(貌似这玩意也只能出模板题了吧~~本菜鸡见识鄙薄,有待指正) 原理: https://blog.csdn.net/hqddm1253679098/article/details ...

  8. BZOJ 2142 礼物 数论

    这道题是求组合数终极版. C(n,m) mod P n>=1e9 m>=1e9 P>=1e9且为合数且piqi<=1e5 拓展lucas定理. 实际上就是一点数论小知识的应用. ...

  9. bzoj 3055礼物运送 floyed + 状压DP

    bzoj 3055: 礼物运送 floyed first 设f[i][S]表示取到了S集合中的所有点(不一定是经过的所有点),最后停在了i的最优值. 初始就f[i][{i}] = dis[1][i] ...

随机推荐

  1. Freemarker入门案例

    Freemarker入门案例 首先需要到freemarker官方下载freemarker的jar包,导入到项目中,如:freemarker-2.3.19.jar 1.先建个freemarker的工具类 ...

  2. 用C#开发一个 UWP BLUETOOTH BLE 扫描APP

    什么是WINDOWS UWP UWP即Windows 10 中的Universal Windows Platform简称.即Windows通用应用平台,在Win 10 Mobile/Surface(W ...

  3. oracle系列--级联删除和级联更新

    必须声明:此博客转载于Oracle外键级联删除和级联更新http://www.2cto.com/database/201507/417496.html 鉴于此前收藏的精彩博客无料被删除了,很是痛心,所 ...

  4. mysql常用博客论坛

    大神博客: starive的博客:http://blog.itpub.net/26435490/viewspace-1133659/ 北在南方的博客:http://blog.itpub.net/226 ...

  5. 利用DIV+CSS制作网页过程中常用的基本概念及标签使用细节

    CSS主要用于对HTML文件功能的补充及扩展,其作用就是对HTML文件中各种排版进行设置,达到对网页中字体.颜色.背景.图片等的控制,使网页能够完全依照设计者的想法来显示. CSS可以控制网页的显示, ...

  6. js原生之设计模式开篇介绍

    本文主要讲述一下,什么是设计模式(Design pattern),作为敲键盘的我们要如何学习设计模式.设计模式真的是一把万能钥匙么?     各个代码的设计模式几乎每个人都知晓,就算不会那也一定在一些 ...

  7. 基于监听的事件处理——Activity本身作为事件监听器

    这种形式使用Activity本身作为监听器类,可以直接在Activity类中定义事件处理方法,这种形式非常简洁.但这种做法有两个缺点: 这种形式可能造成程序结构混乱,Activity的主要职责应该是完 ...

  8. document.body.clientHeight的取值

    http://www.cnblogs.com/fullhouse/archive/2012/01/05/2313800.html 有时候需要取页面的底部, 就会用到document.body.clie ...

  9. 部署AlwaysOn第一步:搭建Windows服务器故障转移集群

    在Windows Server 2012 R2 DataCenter 环境中搭建集群之前,首先要对Windows服务器故障转移集群(Windows Server Failover Cluster,简称 ...

  10. 【ci框架基础】之部署百度编辑器

    在ci框架下加载编辑器,现在复习下内容.我的框架文件名称为ci 1.下载百度编辑器ueditor,http://ueditor.baidu.com/ 一般情况下下载ubuilder版即可,并将uedi ...