sequence

考虑长度<=x的方案数F(x),然后(F(x)-F(x-1))*x贡献到答案里

n平方的做法可以直接DP,

感觉有式子可言,

就推出式子:类似coat,每个长度为i的计算i次。

再容斥下:

F是方案数,还是求:

枚举分成的段数,枚举多少个超过i进行容斥:

突破口:有个n-i*k-1,意味着i*k<=n,这样的i和k暴力枚举一共nlogn复杂度

提出来,考虑干掉j

强行推式子:

处理:

(怎么看怎么也看不出什么道理的样子)

来找组合意义吧:

有n-ik个球,我们先从中选出j个,再从选出的j个中选出k个。在j个球中我们选出一个特殊的球,对于剩下的球用m-1种颜色染色。

考虑讨论这个特殊的球是不是这k个球中的

即可得到;

(这里少写了C(n-i*k-k,k))

预处理m-1的次幂和m的次幂和阶乘阶乘逆元

O(nlogn)

别忘了最后用n*m^n-

#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
#define pb push_back
#define solid const auto &
#define enter cout<<endl
#define pii pair<int,int>
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){
char ch;x=;bool fl=false;while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);(fl==true)&&(x=-x);}
template<class T>il void output(T x){if(x/)output(x/);putchar(x%+'');}
template<class T>il void ot(T x){if(x<) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');} int mod;
namespace Modulo{
int ad(int x,int y){return (x+y)>=mod?x+y-mod:x+y;}
void inc(int &x,int y){x=ad(x,y);}
int mul(int x,int y){return (ll)x*y%mod;}
void inc2(int &x,int y){x=mul(x,y);}
int qm(int x,int y=mod-){int ret=;while(y){if(y&) ret=mul(x,ret);x=mul(x,x);y>>=;}return ret;}
}
using namespace Modulo;
namespace Miracle{
const int N=+;
int n,m;
int jie[N],inv[N];
int iv[N];
int m0[N],m1[N];
int C(int n,int m){
if(n<||m<||n<m) return ;
return mul(jie[n],mul(inv[m],inv[n-m]));
}
int main(){
rd(n);rd(m);rd(mod);
jie[]=;
for(reg i=;i<=n;++i) jie[i]=mul(jie[i-],i);
inv[n]=qm(jie[n],mod-);
for(reg i=n-;i>=;--i) inv[i]=mul(inv[i+],i+);
iv[]=;
for(reg i=;i<=n;++i){
iv[i]=mul(mod-mod/i,iv[mod%i]);
}
m0[]=m1[]=;
for(reg i=;i<=n;++i){
m0[i]=mul(m0[i-],m);
m1[i]=mul(m1[i-],m-);
}
int ans=;
for(reg i=;i<n;++i){
for(reg k=;k<=n;++k){
if(i*k+k>n) break;
int tmp=;//
if(k!=) tmp=ad(tmp,mul(C(n-i*k,k),mul(k,mul(m1[k-],m0[n-i*k-k]))));
if(n-i*k-k->=) tmp=ad(tmp,mul(C(n-i*k,k),mul(m1[k],mul(m0[n-i*k-k-],n-i*k-k))));
tmp=mul(tmp,(k&)?mod-:);
tmp=mul(tmp,iv[n-i*k]);
ans=ad(ans,tmp);
}
}
ans=mul(ans,m);
ans=ad(mul(n,qm(m,n)),mod-ans);
ot(ans);
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
*/

突破口是i,k总共对数nlogn级别,干掉j用组合意义大力推导

sequence——强行推式子+组合意义的更多相关文章

  1. LOJ 3399 -「2020-2021 集训队作业」Communication Network(推式子+组合意义+树形 DP)

    题面传送门 一道推式子题. 首先列出柿子,\(ans=\sum\limits_{T_2}|T_1\cap T_2|·2^{T_1\cap T_2}\) 这个东西没法直接处理,不过注意到有一个柿子 \( ...

  2. Codeforces 917D - Stranger Trees(矩阵树定理/推式子+组合意义)

    Codeforces 题目传送门 & 洛谷题目传送门 刚好看到 wjz 在做这题,心想这题之前好像省选前做过,当时觉得是道挺不错的题,为啥没写题解呢?于是就过来补了,由此可见我真是个大鸽子(( ...

  3. Atcoder Grand Contest 013 E - Placing Squares(组合意义转化+矩阵快速幂/代数推导,思维题)

    Atcoder 题面传送门 & 洛谷题面传送门 这是一道难度 Cu 的 AGC E,碰到这种思维题我只能说:not for me,thx 然鹅似乎 ycx 把题看错了? 首先这个平方与乘法比较 ...

  4. Codeforces 1528F - AmShZ Farm(转化+NTT+推式子+第二类斯特林数)

    Codeforces 题目传送门 & 洛谷题目传送门 神仙题,只不过感觉有点强行二合一(?). 首先考虑什么样的数组 \(a\) 符合条件,我们考虑一个贪心的思想,我们从前到后遍历,对于每一个 ...

  5. 牛客练习赛43F(推式子)

    要点 题目链接 1e18的数据无法\(O(n)\)的容斥,于是推式子,官解,其中式子有点小错误 不必预处理mu,直接按照素数的个数判断正负即可 #include <bits/stdc++.h&g ...

  6. IM推送保障及网络优化详解(二):如何做长连接加推送组合方案

    对于移动APP来说,IM功能正变得越来越重要,它能够创建起人与人之间的连接.社交类产品中,用户与用户之间的沟通可以产生出更好的用户粘性. 在复杂的 Android 生态环境下,多种因素都会造成消息推送 ...

  7. 【cf961G】G. Partitions(组合意义+第二类斯特林数)

    传送门 题意: 给出\(n\)个元素,每个元素有价值\(w_i\).现在要对这\(n\)个元素进行划分,共划分为\(k\)组.每一组的价值为\(|S|\sum_{i=0}^{|S|}w_i\). 最后 ...

  8. BZOJ5093 图的价值——推式子+第二类斯特林数

    原题链接 题解 题目等价于求这个式子 \[ans=n2^{\frac{(n-1)(n-2)}{2}}\sum\limits_{i=0}^{n-1}\binom{n-1}{i}i^k\] 有这么一个式子 ...

  9. HDU 5860 Death Sequence(递推)

    HDU 5860 Death Sequence(递推) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5860 Description You ...

随机推荐

  1. 从0开始学习 GitHub 系列之「02.加入 GitHub」

    转载地址: http://blog.csdn.net/googdev/article/details/52787586 看完昨天的文章「从0开始学习 GitHub 系列之「初识 GitHub」」估计不 ...

  2. php各种字符串截取

    各种字符串截取.php <?php /** * 字符串截取,支持中文和其他编码 * @param [string] $str [字符串] * @param integer $start [起始位 ...

  3. [Vue CLI 3] vue inspect 的源码设计实现

    首先,请记住: 它在新版本的脚手架项目里面非常重要 它有什么用呢? inspect internal webpack config 能快速地在控制台看到对应生成的 webpack 配置对象. 首先它是 ...

  4. SDUT-3377_数据结构实验之查找五:平方之哈希表

    数据结构实验之查找五:平方之哈希表 Time Limit: 400 ms Memory Limit: 65536 KiB Problem Description 给定的一组无重复数据的正整数,根据给定 ...

  5. PPT转PDF

    需求:可以上传ppt,前台可以预览. 在用程序将ppt转pdf的过程中,遇到几个问题,记录如下: 1.检索 COM 类工厂中 CLSID 为 {91493441-5A91-11CF-8700-00AA ...

  6. objectarx之模型空间

    AcDbObjectId CCommonFuntion::PostToModelSpace(AcDbEntity* pEnt){ // 获得指向块表的指针 AcDbBlockTable *pBlock ...

  7. 连接池c3p0

    连接池c3p0 C3P0:hibernate和spring使用,有自动回收空闲连接的功能. 使用步骤: 1.导入jar包(c3p0-0.9.1.2.jar) 2.使用api a.硬编码(不推荐) ne ...

  8. Data Lake Analytics中OSS LOCATION的使用说明

    前言 Data Lake Analytic(后文简称 DLA)可以帮助用户通过标准的SQL语句直接对存储在OSS.TableStore上的数据进行查询分析. 在查询前,用户需要根据数据文件的格式和内容 ...

  9. Inno Setup 设置开机启动

    案1: 将快捷方式添加到“启动”文件夹 [Tasks] Name: "startupicon"; Description: "{cm:CreateQuickLaunchI ...

  10. shell学习(23)- diff和patch

    diff命令可以生成两个文件之间的差异对比. (1) 先创建下列用于演示的文件.文件 1:version1.txt this is the original text line2 line3 line ...