#2143. 「SHOI2017」组合数问题

 

题目描述

组合数 Cnm\mathrm{C}_n^mC​n​m​​ 表示的是从 nnn 个互不相同的物品中选出 mmm 个物品的方案数。举个例子, 从 (1,2,3)(1, 2, 3)(1,2,3) 三个物品中选择两个物品可以有 (1,2)(1, 2)(1,2),(1,3)(1, 3)(1,3),(2,3)(2, 3)(2,3) 这三种选择方法。根据组合数的定义,我们可以给出计算组合数 Cnm\mathrm{C}_n^mC​n​m​​ 的一般公式:

Cmn=n!m! (n−m)!

其中 n!=1×2×⋯×nn! = 1 \times 2 \times \cdots \times nn!=1×2×⋯×n。(特别地,当 n=0n = 0n=0 时,n!=1n! = 1n!=1;当 m>nm > nm>n 时,Cnm=0\mathrm{C}_n^m = 0C​n​m​​=0。)

小葱在 NOIP 的时候学习了 Cij\mathrm{C}_i^jC​i​j​​ 和 kkk 的倍数关系,现在他想更进一步,研究更多关于组合数的性质。小葱发现,Cij\mathrm{C}_i^jC​i​j​​ 是否是 kkk 的倍数,取决于 Cjimodk 是否等于 000,这个神奇的性质引发了小葱对 mod\mathrm{mod}mod 运算(取余数运算)的兴趣。现在小葱选择了是四个整数 n,p,k,rn, p, k, rn,p,k,r,他希望知道

(∞∑i=0Cik+rnk)modp,

(Crnk+Ck+rnk+C2k+rnk+⋯+C(n−1)k+rnk+Cnk+rnk+⋯)modp

的值。

输入格式

第一行有四个整数 n,p,k,rn, p, k, rn,p,k,r,所有整数含义见问题描述。

输出格式

一行一个整数代表答案。

样例

样例输入 1

2 10007 2 0

样例输出 1

8

样例解释 1

C40+C42+C44+⋯=1+6+1=8\mathrm{C}_4^0 + \mathrm{C}_4^2 + \mathrm{C}_4^4 + \cdots = 1 + 6 + 1 = 8C​4​0​​+C​4​2​​+C​4​4​​+⋯=1+6+1=8。

样例输入 2

20 10007 20 0

样例输出 2

176

数据范围与提示

对于 30%30\%30% 的测试点,1≤n,k≤301 \leq n, k \leq 301≤n,k≤30,ppp 是质数;
对于另外 5%5\%5% 的测试点,p=2p = 2p=2;
对于另外 5%5\%5% 的测试点,k=1k = 1k=1;
对于另外 10%10\%10% 的测试点,k=2k = 2k=2;
对于另外 15%15\%15% 的测试点,1≤n≤103,1≤k≤501 \leq n \leq 10^3, 1 \leq k \leq 501≤n≤10​3​​,1≤k≤50,ppp 是质数;
对于另外 15%15\%15% 的测试点,1≤n×k≤1061 \leq n \times k \leq 10^61≤n×k≤10​6​​,ppp 是质数;
对于另外 10%10\%10% 的测试点,1≤n≤109,1≤k≤501 \leq n \leq 10^9, 1 \leq k \leq 501≤n≤10​9​​,1≤k≤50,ppp 是质数;
对于 100%100\%100% 的测试点,1≤n≤109,0≤r<k≤50,2≤p≤230−11 \leq n \leq 10^9, 0 \leq r < k \leq 50, 2 \leq p \leq 2^{30} - 11≤n≤10​9​​,0≤r<k≤50,2≤p≤2​30​​−1。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int f[][],n,p,k,r;
int main(){
scanf("%d%d%d%d",&n,&p,&k,&r);
f[][]=;
for(int i=;i<=n*k;i++)
for(int j=;j<k;j++){
if(j!=)f[i][j]=(f[i-][j]+f[i-][j-])%p;
else f[i][j]=(f[i-][j]+f[i-][j+k-])%p;
}
printf("%d",f[n*k][r]);
}

60分 暴力

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int P,K,R;
long long N;
struct matrix{
int n,m,a[][];
matrix(){memset(a,,sizeof(a));}
matrix operator * (const matrix &c)const{
matrix res;res.n=n;res.m=c.m;
for(int i=;i<n;i++)
for(int j=;j<c.m;j++)
for(int k=;k<m;k++)
res.a[i][j]=(res.a[i][j]+1LL*a[i][k]*c.a[k][j]%P)%P;
return res;
}
}a,b;
void Pow(matrix x,long long y){
while(y){
if(y&)
a=a*x;
x=x*x;
y>>=;
}
}
int main(){
cin>>N;
scanf("%d%d%d",&P,&K,&R);
N=1LL*N*K;
a.n=;a.m=K;a.a[][]=;
b.n=b.m=K;
for(int i=;i<K;i++)b.a[i][i]++,b.a[i][(i+)%K]++;
Pow(b,N);
printf("%d",a.a[][R]);
return ;
}

100分 矩阵快速幂优化dp

loj #2143. 「SHOI2017」组合数问题的更多相关文章

  1. LOJ #2145. 「SHOI2017」分手是祝愿

    题目链接 LOJ #2145 题解 一道画风正常的--期望DP? 首先考虑如何以最小步数熄灭所有灯:贪心地从大到小枚举灯,如果它亮着则修改它.可以求出总的最小步数,设为\(cnt\). 然后开始期望D ...

  2. LOJ #2141. 「SHOI2017」期末考试

    题目链接 LOJ #2141 题解 据说这道题可以三分(甚至二分)? 反正我是枚举的 = = 先将t和b数组排序后计算出前缀和, 然后枚举最晚的出成绩时间,每次可以O(1)直接计算调整到该时间所需的代 ...

  3. LOJ 2557 「CTSC2018」组合数问题 (46分)

    题目:https://loj.ac/problem/2557 第一个点可以暴搜. 第三个点无依赖关系,k=3,可以 DP .dp[ cr ][ i ][ j ] 表示前 cr 个任务.第一台机器最晚完 ...

  4. LOJ #2142. 「SHOI2017」相逢是问候(欧拉函数 + 线段树)

    题意 给出一个长度为 \(n\) 的序列 \(\{a_i\}\) 以及一个数 \(p\) ,现在有 \(m\) 次操作,每次操作将 \([l, r]\) 区间内的 \(a_i\) 变成 \(c^{a_ ...

  5. loj2143 「SHOI2017」组合数问题

    大傻逼题--就是求 \(nk\) 个元素选出一些元素,选出的元素的个数要满足模 \(k\) 余 \(r\),求方案数. 想到 \(\binom{n}{m}=\binom{n-1}{m-1}+\bino ...

  6. LOJ #6432. 「PKUSC2018」真实排名(组合数)

    题面 LOJ #6432. 「PKUSC2018」真实排名 注意排名的定义 , 分数不小于他的选手数量 !!! 题解 有点坑的细节题 ... 思路很简单 , 把每个数分两种情况讨论一下了 . 假设它为 ...

  7. Loj #2192. 「SHOI2014」概率充电器

    Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  8. Loj #3096. 「SNOI2019」数论

    Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...

  9. Loj #3093. 「BJOI2019」光线

    Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...

随机推荐

  1. 获取wifi热点

    https://stackoverflow.com/questions/31555640/how-to-get-wifi-ssid-in-ios9-after-captivenetwork-is-de ...

  2. EMIPLIB简介

    EMIPLIB(http://research.edm.uhasselt.be/emiplib)的全称是'EDM Media over IP libray' .EDM是Hasselt Universi ...

  3. canvas渐变

    代码: 1 /** 2 * Created by Administrator on 2016/1/29. 3 */ 4 function draw(id){ 5 var canvas = docume ...

  4. HTTP-Runoob:HTPP Content-Type

    ylbtech-HTTP-Runoob:HTPP Content-Type 1.返回顶部 1. HTTP content-type Content-Type,内容类型,一般是指网页中存在的Conten ...

  5. SQL 由人员汇总到部门树递归合计总数函数

    1.由人员计算出总数,在部门树(tree)按结构汇总(主父绑定) CREATE function [dbo].[GetEmpDepNum] ( @ID int ) RETURNS @Tree Tabl ...

  6. ghld data format

    %CTF: 1.00%FileType: PROF strp "VelocityProfile"%PROFSpec: 1.00 2006 00 00%Manufacturer: C ...

  7. 在Linux下adb连接不上android手机的终极解决方案

    转自: http://blog.csdn.net/liuqz2009/article/details/7942569 1.做android开发的过程,碰到了Linux下adb识别不了android设备 ...

  8. 主键primary key和唯一索引unique index

    1)主键一定是唯一性索引,唯一性索引并不一定就是主键. 2)主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引. 3)主键常常与外键构成参照完整性约束,防止出现数 ...

  9. [转载]HTTP无状态是什么意思?

    作者:曾著链接:https://www.zhihu.com/question/265610863/answer/300533939来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  10. C语言-郝斌笔记-003数据类型

    基本类型数据 整数 整型     —— int      --4字节  短整型   —— short int   ——2字节 长整型   —— long int    ——8字节      浮点数[实 ...