Time Limit: 10 Sec  Memory Limit: 512 MB
Submit: 155  Solved: 78

Description

Input

第一行有四个整数 n, p, k, r,所有整数含义见问题描述。
1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1

Output

一行一个整数代表答案。

Sample Input

2 10007 2 0

Sample Output

8

HINT

Source

黑吉辽沪冀晋六省联考

数学问题 组合数

震惊!考场上花式骗分竟然可以拿到80分!

正解:

  这个东西当然没有什么既成的公式,需要用DP推公式,和平常的公式推DP正好反过来了。

  发现这个式子的项覆盖了nk内所有%k==r的位置,那么可以考虑这个式子的组合意义——

  在全部nk个物品中,选出任意个物品使得选出的物品数%k==r的方案数!

  设f[考虑到第i个物品][选出数量%k==j]=方案数,于是变成了可以$O(n^3)$推出来的背包问题?

  还可以更加简单粗暴,$f[2n][(i+j)%k]=\sum f[n][i]*f[n][j] $ $O(n^2 logn)$倍增出解。

 1 /*by SilverN*/
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 #include<vector>
 8 #define LL long long
 9 using namespace std;
10 const int mxn=100010;
11 int read(){
12     int x=0,f=1;char ch=getchar();
13     while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
14     while(ch>='0' && ch<='9'){x=x*10-'0'+ch;ch=getchar();}
15     return x*f;
16 }
17 int n,P,k,r;
18 struct num{
19     int x[52];
20     void init(){
21         memset(x,0,sizeof x);
22     }
23 }f;
24 num calc(const num &a,const num &b){
25     num res;
26     res.init();
27     for(int i=0;i<=k;i++)
28         for(int j=0;j<=k;j++)
29             (res.x[(i+j)%k]+=(LL)a.x[i]*b.x[j]%P)%=P;
30     return res;
31 }
32 num ksm(num a,LL t){
33     num res;
34     res.init();res.x[0]=1;
35     while(t){
36         if(t&1)res=calc(res,a);
37         a=calc(a,a);
38         t>>=1;
39     }
40     return res;
41 }
42 int main(){
43     int i,j;
44     n=read();P=read();k=read();r=read();
45     f.x[0]=1;
46     f.x[1%k]+=1;
47     f=ksm(f,(LL)n*k);
48 //    for(i=0;i<=k;i++)printf("%d\n",f.x[i]);
49     printf("%d\n",f.x[r]);
50     return 0;
51 }

转载于:https://www.cnblogs.com/SilverNebula/p/6764493.html

Bzoj4870 [SXOI2017]组合数问题相关推荐

  1. 退役前的做题记录2.0

    退役前的做题记录2.0 最近在刷省选题......大致上是按照省份刷的. 不过上面的题目顺序是按照写题的顺序排列的,所以可能会有点乱哈. [BZOJ2823][AHOI2012]信号塔 最小圆覆盖,随 ...

  2. 【bzoj4870】[Shoi2017]组合数问题 dp+快速幂/矩阵乘法

    题目描述 输入 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 输出 一行一个整数 ...

  3. Codeforces Beta Round #95 (Div. 2) 部分解题报告 (dp,组合数,)

    做这样的比赛既考快速编码的能力,还有快速思维的能力.本人很弱,跌了rating..加油!!!.. 第一题上来就把题意理解错了..粗心啊..直接模拟着做就行:1:如果字符串全是大写字母就进行大小写转换: ...

  4. [CQOI2014]数三角形 组合数 + 容斥 + gcd

    推导过程 : 组合数+容斥原理+gcd 正确做法是暴力的一种优化,ans=所有情况 - 平行坐标轴的三点共线 - 斜线三点共线 如果快速求斜线三点共线: 首先要知道一个结论,对于点(a,b) (x,y ...

  5. 多重集表示合json数据_计数DP(划分数,多重集组合数)

    划分数:把n个无区别的物品划分成不超过m组. dp[i][j]=j的i划分的总数. dp[i[j]=dp[i][j-i]+dp[i-1][j] 即:将j个物品分成i份,有两种情况:每份划分都大于等于1 ...

  6. 【ACM】杭电OJ 4704 Sum (隔板原理+组合数求和公式+费马小定理+快速幂)

    http://acm.hdu.edu.cn/showproblem.php?pid=4704 1.隔板原理 1~N有N个元素,每个元素代表一个1.分成K个数,即在(N-1)个空挡里放置(K-1)块隔板 ...

  7. [Leetcode] Combinations 组合数

    Combinations Given two integers n and k, return all possible ombinations of k numbers out of 1 ... n ...

  8. 组合数函数-快速提取所有可能的组合数

    组合数:从m个不同元素中取出n(n≤m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数. 代码: str_comb <- function(vector){n <- le ...

  9. 不使用递归求全排列和组合数

    同学遇到的面试问题,大意是M台机器放在N个房间,不使用递归求打印所有情况 解题思路:情况共计N**M种.开始想将所有情况放入数组,填充好数组再逐个打印.随后发现按照填充的思路,不使用大数组也可以实现. ...

最新文章

  1. Vivado 中IP报严重警告Could not find module的解决办法
  2. 数据中心服务器机架是什么?
  3. Matlab中设置图形窗口的大小、字体、axis等
  4. 【LeetCode】LC1672. 最富有客户的资产总量
  5. python扩展库简介_python非官方扩展库
  6. Zookeeper的节点操作
  7. 安卓编程用什么软件_震惊!安卓IOS都可以用的牛逼软件
  8. 的环境下 qt 运行在_Ubuntu16.04环境下运行vins mono(环境配置及编译)之ROS kinetic的安装...
  9. Java-类和对象、关键字、构造方法
  10. socket:通常每个套接字地址(协议/网络地址/端口)只允许使用一次
  11. ListenalbeFuture的使用总结
  12. 小米6Android11刷机包,小米6刷机包MIUI12
  13. C语言中多个 \n 作用
  14. 【深入浅出flink】第7篇:从原理剖析flink中所有的重分区方式keyBy、broadcast、rebalance、rescale、shuffle、global、partitionCustom
  15. 小程序容器对政务服务平台建设的帮助
  16. 迪杰斯特拉算法(dijkstra)
  17. php 把数字大写,php 阿拉伯数字转中文大写金额
  18. 机器学习实战之信用卡欺诈案列
  19. echarts 折线图
  20. PC 网易云音乐桌面歌词原版天际蓝配色方案

热门文章

  1. cisco显示ip地址_cisco视频会议,会议室两台电视、一个投影线路如何连接布线
  2. 卧式储罐液位体积计算公式excel_2020晋中化工防腐储罐订做欢迎来电-环保设备...
  3. mysql 恢复root权限_Linux MySQL root权限恢复[图文]
  4. java旅客接口_GitHub - s1mplecc/checkin-scheduler: 使用 Java 实现的旅客人数分布预估与值机排班调度算法...
  5. java程序流程_java程序流程控制
  6. linux怎么查看服务器主频,Linux环境下查看服务器硬件信息
  7. java 不规则图形_java 根据点画不规则封闭图形
  8. 浏览器访问sftp服务器_Mountain Duck for Mac(FTP服务器管理工具)v4.0.0.16698
  9. 基于深度学习的自然场景文字检测及端到端的OCR中文文字识别
  10. php zip 不能创建文件,PHP无法访问新创建的zip文件