[SHOI 2017] 组合数问题
[题目链接]
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] 组合数问题的更多相关文章
- P3746 [六省联考2017]组合数问题
P3746 [六省联考2017]组合数问题 \(dp_{i,j}\)表示前\(i\)个物品,取的物品模\(k\)等于\(r\),则\(dp_{i,j}=dp_{i-1,(j-1+k)\%k}+dp_{ ...
- bzoj千题计划263:bzoj4870: [六省联考2017]组合数问题
http://www.lydsy.com/JudgeOnline/problem.php?id=4870 80分暴力打的好爽 \(^o^)/~ 预处理杨辉三角 令m=n*k 要求满足m&x== ...
- [BZOJ4870][六省联考2017]组合数问题(组合数动规)
4870: [Shoi2017]组合数问题 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 748 Solved: 398[Submit][Statu ...
- 洛谷P3746 [六省联考2017]组合数问题
题目描述 组合数 C_n^mCnm 表示的是从 n 个互不相同的物品中选出 m 个物品的方案数.举个例子,从 (1;2;3) 三个物品中选择两个物品可以有 (1;2);(1;3);(2;3) 这三种 ...
- P3746 【[六省联考2017]组合数问题】
题目是要我们求出如下柿子: \[\sum_{i=0}^{n}C_{nk}^{ik+r}\] 考虑k和r非常小,我们能不能从这里切入呢? 如果你注意到,所有组合数上方的数\(\%k==r\),那么是不是 ...
- 洛谷$P$3746 [六省联考2017]组合数问题 $dp$+矩乘+组合数学
正解:$dp$+矩乘+组合数学 解题报告: 传送门! 首先不难发现这个什么鬼无穷就是个纸老虎趴,,,最多在$\binom{n\cdot k+r}{n\cdot k}$的时候就已经是0了后面显然不用做下 ...
- BZOJ4870 [六省联考2017] 组合数问题 【快速幂】
题目分析: 构造f[nk][r]表示题目中要求的东西.容易发现递推公式f[nk][r]=f[nk-1][r]+f[nk-1][(r-1)%k].矩阵快速幂可以优化,时间复杂度O(k^3logn). 代 ...
- SHOI 2017 相逢是问候(扩展欧拉定理+线段树)
题意 https://loj.ac/problem/2142 思路 一个数如果要作为指数,那么它不能直接对模数取模,这是常识: 诸如 \(c^{c^{c^{c..}}}\) 的函数递增飞快,不是高精度 ...
- [六省联考2017]组合数问题 (矩阵优化$dp$)
题目链接 Solution 矩阵优化 \(dp\). 题中给出的式子的意思就是: 求 nk 个物品中选出 mod k 为 r 的个数的物品的方案数. 考虑朴素 \(dp\) ,定义状态 \(f[i][ ...
随机推荐
- Android硬件抽象层(HAL)深入剖析(二)
上一篇我们分析了android HAL层的主要的两个结构体hw_module_t(硬件模块)和hw_device_t(硬件设备)的成员,下面我们来具体看看上层app到底是怎么实现操作硬件的? 我们知道 ...
- c++程序猿经典面试题(2)
1.以下程序的输出结果是? #include<stdio.h> main(){ int b=3; int arr[]={6,7,8,9,10}; int *ptr=arr; *(ptr++ ...
- 学会读懂 MySql 的慢查询日志
在前边的博客<何时.怎样开启 MySql 日志?>中,我们了解到了怎样启用 MySql 的慢查询日志. 今天我们来看一下怎样去读懂这些慢查询日志.在跟踪慢查询日志之前.首先你得保证最少发生 ...
- windown vs2012 编译ffplay
自己写的播放器播放有些文件出现问题,但ffplay播放都很正常,为方便调试,将ffplay.c编译成可执行文件. 一. 环境搭建 环境搭建前面已经有文章介绍,没有特殊的地方,不再赘述. 二.修改con ...
- Python+Selenium框架unittest执行脚本方法之discover()方法
继续接着介绍,如何利用unittest管理和执行测试用例的问题,这里我们还是利用之前已经有的三条测试用例,如果你跳过了前面文章,请回到框架设计篇的第八篇和第七篇,里面有相关测试类的文件.本文来介绍,如 ...
- Ubuntu 16.04下配置Golang开发环境
安装之前先要明白两个变量,后面介绍安装时,会用这两个变量 GOROOT , 这是go的工作目录,比如 /home/[替换为你的用户名]/go/work GOPATH , 这是go的安装目录, ...
- OI知识体系
- 文件另存为——Autocad.doc.SaveAs
一.前言 使用pyautocad编辑好cad图纸后,往往涉及到一个保存的问题,但是官方文档并未提及,所以只能自己来了,测试了好久,终于是找到了保存的命令和参数说明. 二.方法介绍 Autocad.do ...
- C语言malloc
在子函数里面动态申请的内存不会自动被系统收回的,因为这些空间在堆里面,而不是栈,平常所说的不能返回指向栈的指针,比如在子函数里面定义一个字符指针,指向常量"hello"因为函数调用 ...
- adb的经常使用命令(android debud bridge)
android调试桥: adb命令使用须要在系统环境遍历中path中追加adb.exe的完整路径D:\IDE\adt-bundle-windows-x86-20130729\sdk\platform- ...