sequence——强行推式子+组合意义
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——强行推式子+组合意义相关推荐
- 组合意义,排列组合基础
组合原理 加法原理 用第一种方法可以写完这篇文章. 用第二种方法可以写完这篇文章. - 用第n种方法可以写完这篇文章. 想要写完文章,共有多少种方式呢? 显然是n种. 这表明,从状态x转移到状态y(从 ...
- IM推送保障及网络优化详解(二):如何做长连接加推送组合方案
对于移动APP来说,IM功能正变得越来越重要,它能够创建起人与人之间的连接.社交类产品中,用户与用户之间的沟通可以产生出更好的用户粘性. 在复杂的 Android 生态环境下,多种因素都会造成消息推送 ...
- [ZJOI2014] 星系调查(树上差分 + 数学推式子)
problem luogu-P3340 题面写得那么长,其实说白了就是求一条直线,使得若干个点到这条直线的距离平方的和最小,求这个最小值. solution 我超爱数学,数学就是我的命,我一天不学数学 ...
- 2021牛客暑期多校训练营4 G-Product(组合意义+容斥原理)
G-Product Spy_Savior题解 Ultraman-Ace题解 组合意义+容斥原理 转化后题目关键要求有D+nkD+nkD+nk个小球放在nnn个盒子中,每个盒子至少有k个小球的方案数. ...
- bzoj 3157 bzoj 3516 国王奇遇记 —— 推式子
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3157 https://www.lydsy.com/JudgeOnline/problem.p ...
- 【杭电多校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 ...
- 【组合数学】二项式定理与组合恒等式 ( 二项式定理 | 三个组合恒等式 递推式 | 递推式 1 | 递推式 2 | 递推式 3 帕斯卡/杨辉三角公式 | 组合分析方法 | 递推式组合恒等式特点 )
文章目录 一.二项式定理 二.组合恒等式 ( 递推式 1 ) 三.组合恒等式 ( 递推式 2 ) 四.组合恒等式 ( 递推式 3 ) 帕斯卡 / 杨辉三角公式 五.组合分析方法 六.递推式组合恒等式特 ...
- 牛客月赛60 F.被抓住的小竹(数学推式子)
牛客月赛60 F.被抓住的小竹(数学&推式子) 考虑枚举每个区间的贡献. 每个区间内所有的数都作为 x x x一次时的贡献和. 因为要求区间内 ≥ x \ge x ≥x数个数, 那么区间内的数 ...
- 2021牛客暑期多校训练营2 B-Cannon(组合+推式子)
B-Cannon 首先nnn个炮在一行操作一次的方案数为2(n−2)2(n-2)2(n−2):前面两个炮只能向右吃,最后两个跑只能向左吃,而其余的炮既可以向左也可以向右,于是有4+2(n−4)4+2( ...
最新文章
- linux shell 缺少 ps 命令
- 关于运行robot framework 报错解决方法,ModuleNotFoundError: No module named 'robot'
- c#拼图碎片形状_拼图游戏C#代码
- BZOJ 1920 Luogu P4217 [CTSC2010]产品销售 (模拟费用流、线段树)
- Python和单元测试那些事儿
- 习题7-2 求一批整数中出现最多的个位数字 (20分)
- C语言:L1-036 A乘以B (5分)
- html-css样式表
- mysql保存emoji报java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8B'
- Linux 安装Nginx详细图解教程
- 算法设计与分析基础_学习笔记
- IOS pushVIewController失败
- 小程序drawImage接口canvas生成产品海报失败
- 剑指Offe6-反转链表
- firefox/safari/chrome浏览器模拟iPad的userAgent的方法
- 逆向小程序破解js神器-(工具篇)
- 什么邮箱最安全?教你三招快速提升邮箱安全性方法,职场人必看!
- 如何解决Win10操作系统无法访问局域网共享文件夹的问题
- 解决图片不显示的问题
- jenkins+git+gradle配置自动打apk包
热门文章
- 两台电脑usb直连传数据_如何通过一根USB数据线把手机/平板充当电脑的第二个显示器...
- artcam 9.0英文版本下载_tomcat 下载安装
- linux连接Db2数据库时报58031_db2常用命令
- wget在线扒站程序php源码
- 高仿科学刀论坛源码 DZ模板
- RabbitMQ入门学习系列(二),单生产者消费者
- ARP和RARP报头结构
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(一)让物体动起来①
- asp.net用url重写URLReWriter实现任意二级域名(续)
- iOS7应用开发4、Foundation框架