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=0;bool fl=false;while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);for(x=numb;isdigit(ch=getchar());x=x*10+numb);(fl==true)&&(x=-x);}
template<class T>il void output(T x){if(x/10)output(x/10);putchar(x%10+'0');}
template<class T>il void ot(T x){if(x<0) 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-2){int ret=1;while(y){if(y&1) ret=mul(x,ret);x=mul(x,x);y>>=1;}return ret;}
}
using namespace Modulo;
namespace Miracle{
const int N=300000+5;
int n,m;
int jie[N],inv[N];
int iv[N];
int m0[N],m1[N];
int C(int n,int m){if(n<0||m<0||n<m) return 0;return mul(jie[n],mul(inv[m],inv[n-m]));
}
int main(){rd(n);rd(m);rd(mod);jie[0]=1;for(reg i=1;i<=n;++i) jie[i]=mul(jie[i-1],i);inv[n]=qm(jie[n],mod-2);for(reg i=n-1;i>=0;--i) inv[i]=mul(inv[i+1],i+1);iv[1]=1;for(reg i=2;i<=n;++i){iv[i]=mul(mod-mod/i,iv[mod%i]);}m0[0]=m1[0]=1;for(reg i=1;i<=n;++i){m0[i]=mul(m0[i-1],m);m1[i]=mul(m1[i-1],m-1);}int ans=0;for(reg i=0;i<n;++i){for(reg k=0;k<=n;++k){if(i*k+k>n) break;int tmp=0;//
            if(k!=0) tmp=ad(tmp,mul(C(n-i*k,k),mul(k,mul(m1[k-1],m0[n-i*k-k]))));if(n-i*k-k-1>=0) tmp=ad(tmp,mul(C(n-i*k,k),mul(m1[k],mul(m0[n-i*k-k-1],n-i*k-k))));tmp=mul(tmp,(k&1)?mod-1:1);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 0;
}}
signed main(){Miracle::main();return 0;
}/*Author: *Miracle*
*/

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

转载于:https://www.cnblogs.com/Miracevin/p/10935031.html

sequence——强行推式子+组合意义相关推荐

  1. 组合意义,排列组合基础

    组合原理 加法原理 用第一种方法可以写完这篇文章. 用第二种方法可以写完这篇文章. - 用第n种方法可以写完这篇文章. 想要写完文章,共有多少种方式呢? 显然是n种. 这表明,从状态x转移到状态y(从 ...

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

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

  3. [ZJOI2014] 星系调查(树上差分 + 数学推式子)

    problem luogu-P3340 题面写得那么长,其实说白了就是求一条直线,使得若干个点到这条直线的距离平方的和最小,求这个最小值. solution 我超爱数学,数学就是我的命,我一天不学数学 ...

  4. 2021牛客暑期多校训练营4 G-Product(组合意义+容斥原理)

    G-Product Spy_Savior题解 Ultraman-Ace题解 组合意义+容斥原理 转化后题目关键要求有D+nkD+nkD+nk个小球放在nnn个盒子中,每个盒子至少有k个小球的方案数. ...

  5. bzoj 3157 bzoj 3516 国王奇遇记 —— 推式子

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3157 https://www.lydsy.com/JudgeOnline/problem.p ...

  6. 【杭电多校2020】Fibonacci Sum【斐波拉契通项】【推式子】

    题意:设FiF_iFi​为斐波拉契数列,求 ∑i=0N(FiC)k\sum_{i=0}^N(F_{iC})^ki=0∑N​(FiC​)k 模109+910^9+9109+9 N,C≤1018,k≤10 ...

  7. 【组合数学】二项式定理与组合恒等式 ( 二项式定理 | 三个组合恒等式 递推式 | 递推式 1 | 递推式 2 | 递推式 3 帕斯卡/杨辉三角公式 | 组合分析方法 | 递推式组合恒等式特点 )

    文章目录 一.二项式定理 二.组合恒等式 ( 递推式 1 ) 三.组合恒等式 ( 递推式 2 ) 四.组合恒等式 ( 递推式 3 ) 帕斯卡 / 杨辉三角公式 五.组合分析方法 六.递推式组合恒等式特 ...

  8. 牛客月赛60 F.被抓住的小竹(数学推式子)

    牛客月赛60 F.被抓住的小竹(数学&推式子) 考虑枚举每个区间的贡献. 每个区间内所有的数都作为 x x x一次时的贡献和. 因为要求区间内 ≥ x \ge x ≥x数个数, 那么区间内的数 ...

  9. 2021牛客暑期多校训练营2 B-Cannon(组合+推式子)

    B-Cannon 首先nnn个炮在一行操作一次的方案数为2(n−2)2(n-2)2(n−2):前面两个炮只能向右吃,最后两个跑只能向左吃,而其余的炮既可以向左也可以向右,于是有4+2(n−4)4+2( ...

最新文章

  1. linux shell 缺少 ps 命令
  2. 关于运行robot framework 报错解决方法,ModuleNotFoundError: No module named 'robot'
  3. c#拼图碎片形状_拼图游戏C#代码
  4. BZOJ 1920 Luogu P4217 [CTSC2010]产品销售 (模拟费用流、线段树)
  5. Python和单元测试那些事儿
  6. 习题7-2 求一批整数中出现最多的个位数字 (20分)
  7. C语言:L1-036 A乘以B (5分)
  8. html-css样式表
  9. mysql保存emoji报java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8B'
  10. Linux 安装Nginx详细图解教程
  11. 算法设计与分析基础_学习笔记
  12. IOS pushVIewController失败
  13. 小程序drawImage接口canvas生成产品海报失败
  14. 剑指Offe6-反转链表
  15. firefox/safari/chrome浏览器模拟iPad的userAgent的方法
  16. 逆向小程序破解js神器-(工具篇)
  17. 什么邮箱最安全?教你三招快速提升邮箱安全性方法,职场人必看!
  18. 如何解决Win10操作系统无法访问局域网共享文件夹的问题
  19. 解决图片不显示的问题
  20. jenkins+git+gradle配置自动打apk包

热门文章

  1. 两台电脑usb直连传数据_如何通过一根USB数据线把手机/平板充当电脑的第二个显示器...
  2. artcam 9.0英文版本下载_tomcat 下载安装
  3. linux连接Db2数据库时报58031_db2常用命令
  4. wget在线扒站程序php源码
  5. 高仿科学刀论坛源码 DZ模板
  6. RabbitMQ入门学习系列(二),单生产者消费者
  7. ARP和RARP报头结构
  8. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(一)让物体动起来①
  9. asp.net用url重写URLReWriter实现任意二级域名(续)
  10. iOS7应用开发4、Foundation框架