[题目链接]

https://www.lydsy.com/JudgeOnline/problem.php?id=4870

[算法]

回顾组合数的定义 :

C(N , M)表示将N个小球放入M个盒子里的方案数

我们发现题目要求的其实就是将nk个小球放入模k意义下于r个盒子中的方案数

不妨设Fi , j表示放了i个小球 , j个盒子(模k意义下)的方案数

有 : Fi , j = Fi - 1 , j - 1 + Fi - 1 , j

矩阵乘法即可

时间复杂度 : O(K ^ 3logNlogK)

[代码]

#include<bits/stdc++.h>
using namespace std;
const int N = 1e9 + ;
const int K = ;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld; int n , p , k , r;
int mat[K][K]; template <typename T> inline void chkmax(T &x , T y) { x = max(x , y); }
template <typename T> inline void chkmin(T &x , T y) { x = min(x , y); }
template <typename T> inline void read(T &x)
{
T f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
}
inline void multipy(int a[K][K] , int b[K][K])
{
static int res[K][K];
for (int i = ; i < k; ++i)
{
for (int j = ; j < k; ++j)
{
res[i][j] = ;
}
}
for (int x = ; x < k; ++x)
{
for (int i = ; i < k; ++i)
{
for (int j = ; j < k; ++j)
{
res[i][j] = (res[i][j] + 1ll * a[i][x] * b[x][j] % p) % p;
}
}
}
for (int i = ; i < k; ++i)
{
for (int j = ; j < k; ++j)
{
a[i][j] = res[i][j];
}
}
}
inline void exp_mod(int mat[K][K] , ll n)
{
static int b[K][K];
for (int i = ; i < k; ++i)
{
for (int j = ; j < k; ++j)
{
b[i][j] = (i == j);
}
}
while (n > )
{
if (n & ) multipy(b , mat);
multipy(mat , mat);
n >>= ;
}
for (int i = ; i < k; i++)
{
for (int j = ; j < k; j++)
{
mat[i][j] = b[i][j];
}
}
} int main()
{ read(n); read(p); read(k); read(r);
for (int i = ; i < k; ++i)
{
++mat[i][i];
++mat[i][((i - ) % k + k) % k];
}
exp_mod(mat , (ll)n * k);
printf("%d\n" , mat[r][]); return ;
}

[SHOI 2017] 组合数问题的更多相关文章

  1. P3746 [六省联考2017]组合数问题

    P3746 [六省联考2017]组合数问题 \(dp_{i,j}\)表示前\(i\)个物品,取的物品模\(k\)等于\(r\),则\(dp_{i,j}=dp_{i-1,(j-1+k)\%k}+dp_{ ...

  2. bzoj千题计划263:bzoj4870: [六省联考2017]组合数问题

    http://www.lydsy.com/JudgeOnline/problem.php?id=4870 80分暴力打的好爽 \(^o^)/~ 预处理杨辉三角 令m=n*k 要求满足m&x== ...

  3. [BZOJ4870][六省联考2017]组合数问题(组合数动规)

    4870: [Shoi2017]组合数问题 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 748  Solved: 398[Submit][Statu ...

  4. 洛谷P3746 [六省联考2017]组合数问题

    题目描述 组合数 C_n^mCnm​ 表示的是从 n 个互不相同的物品中选出 m 个物品的方案数.举个例子,从 (1;2;3) 三个物品中选择两个物品可以有 (1;2);(1;3);(2;3) 这三种 ...

  5. P3746 【[六省联考2017]组合数问题】

    题目是要我们求出如下柿子: \[\sum_{i=0}^{n}C_{nk}^{ik+r}\] 考虑k和r非常小,我们能不能从这里切入呢? 如果你注意到,所有组合数上方的数\(\%k==r\),那么是不是 ...

  6. 洛谷$P$3746 [六省联考2017]组合数问题 $dp$+矩乘+组合数学

    正解:$dp$+矩乘+组合数学 解题报告: 传送门! 首先不难发现这个什么鬼无穷就是个纸老虎趴,,,最多在$\binom{n\cdot k+r}{n\cdot k}$的时候就已经是0了后面显然不用做下 ...

  7. BZOJ4870 [六省联考2017] 组合数问题 【快速幂】

    题目分析: 构造f[nk][r]表示题目中要求的东西.容易发现递推公式f[nk][r]=f[nk-1][r]+f[nk-1][(r-1)%k].矩阵快速幂可以优化,时间复杂度O(k^3logn). 代 ...

  8. SHOI 2017 相逢是问候(扩展欧拉定理+线段树)

    题意 https://loj.ac/problem/2142 思路 一个数如果要作为指数,那么它不能直接对模数取模,这是常识: 诸如 \(c^{c^{c^{c..}}}\) 的函数递增飞快,不是高精度 ...

  9. [六省联考2017]组合数问题 (矩阵优化$dp$)

    题目链接 Solution 矩阵优化 \(dp\). 题中给出的式子的意思就是: 求 nk 个物品中选出 mod k 为 r 的个数的物品的方案数. 考虑朴素 \(dp\) ,定义状态 \(f[i][ ...

随机推荐

  1. python 工具mouse_find 鼠标定位

    import os,time import pyautogui as pag try: while True: print ("Press Ctrl-C to end") x,y ...

  2. Eclipse出现&quot;Running Android Lint has encountered a problem&quot;解决方式

    近期打开Eclipse的时候,总是发生这种一个错误:"Running Android Lint has encountered a problem".截图例如以下: . 可是Ecl ...

  3. Odoo event

    使用流程 建立活动 发布到网站 在线销售 订单确认,付款确认 注册.出席     建立活动         设置门票         确认并发布到网站     进入编辑模式,即可在线编辑活动     ...

  4. Deployment相对ReplicaSet优势

    系列目录 RS与Deployment主要用于替代RC.RS的全称为Replica Set.相对于RC,RS与Deployment的优势如下: RC只支持基于等式的selector,如env=dev或者 ...

  5. kubernetes管理之使用yq工具截取属性

    系列目录 前面我们讲解过使用go-template或者jsonpath格式(kubectl get 资源 --output go-tempalte(或jsonpath))来截取属性的值,并且我们比较了 ...

  6. gcc參数总结

    /*gcc 命令总结*/ 补充下gcc的知识,免得被大自然说编译原理不行.. 1.-o 參数 參数说明: -o參数用来指定生成程序的名字 gcc test.c 会编译出一个名为a.out的程序 gcc ...

  7. Creating Tabbed Applications

    新建一个空工程,如图 新建类 using System; using UIKit; namespace TabbedApplication { public class TabController : ...

  8. STL algorihtm算法iter_swap(29)

    iter_swap原型: std::iter_swap template <class ForwardIterator1, class ForwardIterator2> void ite ...

  9. spring源码解析——2容器的基本实现(第2版笔记)

    感觉第二版写的略潦草,就是在第一版的基础上加上了新的流行特性,比如idea,springboot,但是,潦草痕迹遍布字里行间. 虽然换成了idea,但是很多截图还是eclipse的,如果不是看了第一版 ...

  10. js怎么select 选中的值

    var obj = document.getElementById(”SelectID”); var index = obj.selectedIndex; // 选中索引var text = obj. ...