首页 > 其他分享 >[JZOJ5215]【HEOI、SXOI2017】组合数问题

[JZOJ5215]【HEOI、SXOI2017】组合数问题

时间:2022-12-29 14:37:02浏览次数:32  
标签:node HEOI LL SXOI2017 define JZOJ5215 Fi include fo


Description

∑i=0ik+r≤nkCik+rnkmodp


其中

1≤n≤109,0≤r<k≤50,2≤p≤230−1

Solution

考虑组合数的实际意义
有nk个物品,取的物品数模k等于r的方案数

设Fi,j表示前i个物品,选的个数模k等于j的方案数

显然

Fi,j=Fi−1,j+Fi−1,j−1


特别的,当

j=0

Fi,0=Fi−1,0+Fi−1,k−1

显然可以直接矩乘优化

Code

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cmath>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fod(i,a,b) for(int i=a;i>=b;i--)
#define LL long long
#define N 1000005
using namespace std;
LL n,p,k,r;
struct node
{
LL a[51][51];
friend node operator *(node x,node y)
{
node c;
memset(c.a,0,sizeof(c.a));
fo(i,0,k-1)
{
fo(j,0,k-1)
{
fo(q,0,k-1)
{
(c.a[i][j]+=x.a[i][q]*y.a[q][j]%p)%=p;
}
}
}
return c;
}
}s,t;
node ksm(node k,LL n)
{
if(n==1) return k;
node s=ksm(k,n/2);
return (n%2)?s*s*k:s*s;
}
int main()
{
cin>>n>>p>>k>>r;
fo(i,1,k-1) t.a[i][i]++,t.a[i-1][i]++;
t.a[0][0]++,t.a[k-1][0]++;
s.a[0][0]=1;
t=ksm(t,n*k);
s=s*t;
printf("%lld\n",s.a[0][r]);
}


标签:node,HEOI,LL,SXOI2017,define,JZOJ5215,Fi,include,fo
From: https://blog.51cto.com/u_15925597/5977134

相关文章

  • [JZOJ5214]【HEOI、SXOI2017】相逢是问候(口胡)
    DescriptionSolution指数是不能取模的,这很尴尬但是有欧拉定理若gcd(c,p)=1,那么cx≡cxmodφ(p)modp因为根据欧拉定理cφ(p)≡1modp但是此处c,p并不一定互质有欧拉定理的扩......
  • [HEOI2016/TJOI2016]排序
    https://www.luogu.com.cn/problem/P2824题解:仔细思考可以发现这道题与https://arc101.contest.atcoder.jp/tasks/arc101_b?lang=en是等价的。二分之后原问题就转化为了......
  • P2824 [HEOI2016/TJOI2016]排序
    P2824[HEOI2016/TJOI2016]排序题目大意这个难题是这样子的:给出一个\(1\)到\(n\)的排列,现在对这个排列序列进行\(m\)次局部排序,排序分为两种:0lr表示将区间\(......
  • 矩阵树定理学习笔记 & 洛谷 P4111 [HEOI2015]小 Z 的房间 题解
    矩阵树定理拉普拉斯矩阵无边权设无向图\(G\)有\(n\)个结点,则拉普拉斯矩阵\(L\)是一个\(n\timesn\)的矩阵,满足:\(L_{i,i}(i\inG)\)的值为结点\(i\)的度数......
  • 【HEOI2016_TJOI2016】排序(线段树分裂&合并)
    线段树分裂&合并入门题。对于每个单调段用一个权值线段树维护。一次操作相当于先对\(l,r\)所在的单调段的权值线段树分裂,然后再合并若干棵的权值线段树。线段树分裂和......
  • 【HEOI2015】兔子与樱花(贪心)
    首先想一下题目中的操作如何转化:当一个节点被去掉之后,这个节点上的樱花和它的儿子节点都被连到删掉节点的父节点上。设当前节点为\(u\),\(u\)的父节点为\(fa\),儿子个......
  • Luogu P4105 [HEOI2014]南园满地堆轻絮
    题目链接:​​传送门​​明显的二分简单的check我的没有longlong会炸掉50分#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<comple......
  • BZOJ 4551([Tjoi2016&Heoi2016]树-倒序并查集)
    Description在2016年,佳媛姐姐刚刚学习了树,非常开心。现在他想解决这样一个问题:给定一颗有根树(根为1),有以下两种操作:1.标记操作:对某个结点打上标记(在最开始,只有结点1有标记......
  • BZOJ 4031([HEOI2015]小Z的房间-矩阵树定理+辗转相除)
    矩阵树定理,注意gauss消元辗转相除的写法#include<bits/stdc++.h>usingnamespacestd;#define#define#define#define#define#define#define#define#define#define#define#d......
  • P4097 [HEOI2013]Segment
    题目链接P4097[HEOI2013]Segment题目描述要求在平面直角坐标系下维护两个操作:在平面上加入一条线段。记第\(i\)条被插入的线段的标号为\(i\)。给定一个数\(k\),......