P4831-Scarlet loves WenHuaKe【组合数学】

正题

题目链接:https://www.luogu.com.cn/problem/P4831


题目大意

n∗mn*mnm的网格上放置2n2n2n个炮,要求互不能攻击。

数据满足n≤m≤2000n\leq m\leq 2000nm2000n≤m≤105n\leq m\leq 10^5nm105m−n≤10m-n\leq 10mn10


解题思路

每行每列最多222个炮,所以模型可以转换为求有多少种方案满足:1∼n1\sim n1n的数字各两个填在mmm无序2元组(可以有空),并且每个组中的数互不相同。

直接硬钢推式子很难做(好像可以推到生成函数那边去),考虑一下巧妙的方法。

g(n,m)g(n,m)g(n,m)表示2n2n2n个格子填下1∼m1\sim m1m中的数字各两个的方案。这个的方案就是
g(n,m)=(2n)!∑i=0min{n,m−n}(mn−i)(m−n+i2i)2n−ig(n,m)=(2n)!\sum_{i=0}^{min\{n,m-n\}}\frac{\binom{m}{n-i}\binom{m-n+i}{2i}}{2^{n-i}}g(n,m)=(2n)!i=0min{n,mn}2ni(nim)(2imn+i)
表示mmm个数组中选出n−in-ini对相同的来填,剩下的里面选出2i2i2i个单独的来填,然后交换导致重复的情况有2n−i2^{n-i}2ni种,要除去。

这个式子就和m−nm-nmn有很大的关系了。

将这个式子和答案联系起来,设f(n,m)f(n,m)f(n,m)表示答案,那么有
g(n,m)=∑i=0n2n−i(ni)Pmif(n−i,m−i)g(n,m)=\sum_{i=0}^n2^{n-i}\binom{n}{i}P_{m}^if(n-i,m-i)g(n,m)=i=0n2ni(in)Pmif(ni,mi)
因为f(n,m)f(n,m)f(n,m)是不同无序二元组,(ni)Pmi\binom{n}{i}P_{m}^i(in)Pmi表示nnn对中选出iii个是相同的填入,剩下的都是不同的方案就是f(n−i,m−i)f(n-i,m-i)f(ni,mi),然后因为ggg是统计有序二元组的,所以2n2^n2n表示随意交换。

2nf(n,m)=∑i=0n(ni)Pmig(n−i,m−i)2^{n}f(n,m)=\sum_{i=0}^n\binom{n}{i}P_{m}^ig(n-i,m-i)2nf(n,m)=i=0n(in)Pmig(ni,mi)
f(n,m)=12n∑i=0n(ni)Pmig(n−i,m−i)f(n,m)=\frac{1}{2^n}\sum_{i=0}^n\binom{n}{i}P_{m}^ig(n-i,m-i)f(n,m)=2n1i=0n(in)Pmig(ni,mi)

然后直接计算就好了,时间复杂度O(n×min{n,m−n})O(n\times min\{n,m-n\})O(n×min{n,mn})

Update:Update:Update:修改了反演前的公式错误


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=2e5+10,P=998244353,inv2=(P+1)/2;
ll n,m,fac[N],inv[N],pv2[N],ans;
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
ll C(ll n,ll m)
{return fac[n]*inv[m]%P*inv[n-m]%P;}
ll A(ll n,ll m)
{return fac[n]*inv[n-m]%P;}
ll g(ll n,ll m){ll ans=0;for(ll i=0;i<=min(n,m-n);i++)(ans+=C(m,n-i)*C(m-n+i,2*i)%P*pv2[n-i]%P)%=P;return ans*fac[2*n]%P;
}
signed main()
{scanf("%lld%lld",&n,&m);inv[1]=1;for(ll i=2;i<N;i++)inv[i]=P-(P/i)*inv[P%i]%P;fac[0]=inv[0]=pv2[0]=1;for(ll i=1;i<N;i++)fac[i]=fac[i-1]*i%P,inv[i]=inv[i-1]*inv[i]%P,pv2[i]=pv2[i-1]*inv2%P;for(ll i=0,p=1;i<=n;i++,p=-p)(ans+=p*(g(n-i,m-i)*C(n,i)%P*A(m,i)%P))%=P;printf("%lld\n",(ans*pv2[n]%P+P)%P);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AtCoder Beginner Contest 172总结

A-calc 直接按照题目输出就行 #include<iostream> using namespace std; int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int a;cin>>a;cout<<aa*aa*a*a<<endl;return 0;}B-Minor Change 题中默认肯定能够从S替换到T那么直接不相…

一起开心2020暑假训练第二周 图论(模板题)

比赛链接&#xff1a; 文章目录A HDU 1285 一B HDU 1863 起C POJ 2387 开D POJ 1502 心E HDU 5922 图F HDU 2112 论A HDU 1285 一 拓扑排序模板题&#xff0c;记录每个点的入度&#xff0c;然后按照入度大小以及顺序进行输出 #include<iostream> #include<queue>…

.NET Core部署中你不了解的框架依赖与独立部署

作者&#xff1a;依乐祝原文地址&#xff1a;https://www.cnblogs.com/yilezhu/p/9703460.htmlNET Core项目发布的时候你有没有注意到这两个选项呢&#xff1f;有没有纠结过框架依赖与独立部署到底有什么区别呢&#xff1f;如果有的话那么这篇文章可以参考下&#xff01;为什么…

【树链剖分】旅游(luogu 3976)

正题 luogu 3976 题目大意 给你一棵树&#xff0c;每个点有一个权值s 现在给你一条路径&#xff0c;让你选择两个点x,y&#xff0c;使y在x后面&#xff0c;且sy−sxs_y-s_xsy​−sx​最大 然后该路劲上所有点权值加v 解题思路 树链剖分 在线段树上维护从左到右和从右到左…

P7276-送给好友的礼物【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P7276?contestId39577 题目大意 nnn个点的一棵树&#xff0c;kkk个关键点&#xff0c;两个人从根出发分别走一段路径回到根。要求每个关键点至少被一个人经过&#xff0c;求最短时间。 解题思路 相当于求两个覆盖所有关键点…

dump文件解析之探索.Net的内存

前言&#xff1a;对于需要长时间运行的.net程序&#xff0c;有时需要我们查看内存的使用有没有内存泄露问题。我们可以从dump文件中找到答案。Dump的看点用dump文件来分析内存&#xff0c;到底我们需要关心哪些点呢&#xff1f;内存的使用情况 HeapSize/object的数量 也就是托管…

Codeforces Round #654 (Div. 2)

A.Magical Sticks 贪心凑长度为nnn的木棒 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<iostream> #include<algorithm> using namespace std; int n; int main() {IO;int T;cin>>T;while(T--){cin>>n;cout<<(n1)/…

P3307-[SDOI2013]项链【Burnside引理,莫比乌斯反演,特征方程】

正题 题目链接:https://www.luogu.com.cn/problem/P3307 题目大意 nnn个珠子的一个环形项链&#xff0c;每个珠子有三个1∼k1\sim k1∼k的整数。 两个珠子不同当且仅当它们不能通过翻转或者旋转得到两个项链不同当且仅当它们不能通过旋转得到珠子要求上面的数字互质项链要求相…

【树链剖分】Milk Visits G(luogu 5838)

正题 luogu 5838 题目大意 给你一棵树&#xff0c;和若干查询&#xff0c;每次查询一条路径上是否有点的权值为x 解题思路 离线处理&#xff0c;每次将树上权值为x的点附上1的值&#xff0c;然后询问就是求和&#xff0c;查询完后清零 代码 #include<cstdio> #includ…

2020牛客暑期多校训练营(第二场)

2020牛客暑期多校训练营&#xff08;第二场&#xff09; 最烦英语题 文章目录A All with PairsB BoundaryC Cover the TreeD DurationE Exclusive ORF Fake MaxpoolingG Greater and GreaterH Happy TriangleI IntervalJ Just ShuffleK Keyboard FreeA All with Pairs B Bound…

鸿蒙 - arkTs:状态管理

状态 State&#xff1a; 在声明式UI中&#xff0c;以状态驱动视图更新 状态&#xff08;State&#xff09;&#xff1a;指驱动视图更新的数据&#xff08;被装饰器标记的变量&#xff09;视图&#xff08;View&#xff09;&#xff1a;基于UI描述渲染得到的用户界面 使用示例…

微软发布Azure Pipelines,开源项目可无限制使用CI/CD

微软发布了Azure Pipelines&#xff0c;他们新的CI/CD服务&#xff0c;是Azure DevOps产品的一部分。Azure Pipelines可用于构建、测试和部署工作负载&#xff0c;并可以让各种语言、项目类型和平台协同工作。作为Visual Studio Team Services&#xff08;VSTS&#xff09;的后…

Codeforces Round #653 (Div. 3)

A.Required Remainder 二分 #include<iostream> #include<algorithm> using namespace std; int main() {int T;ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>T;int x,y,n;while(T--){cin>>x>>y>>n;int l0,r(n-y)/x;while(…

【树链剖分】【倍增】宝石(2021GDOI Day2 T1)

正题 luogu 7518 题目大意 给你一棵树&#xff0c;一条路径的价值为&#xff1a;路径上点权以1开始依次递增1的子序列&#xff0c;有q次询问&#xff0c;每次询问一条路径的价值 解题思路 n,m值比较大&#xff0c;对于每次询问只有O(log2n)O(log^2n)O(log2n)的时间 考虑树链…

2020牛客暑期多校训练营(第一场)

文章目录A B-Suffix ArrayB Infinite TreeC DominoD Quadratic FormE Counting Spanning TreesF Infinite String Comparision题意&#xff1a;题解&#xff1a;代码&#xff1a;G BaXianGuoHai, GeXianShenTongH Minimum-cost FlowI 1 or 2J Easy Integration题意题解代码2020…

P4755-Beautiful Pair【笛卡尔树,线段树】

正题 题目链接:https://www.luogu.com.cn/problem/P4755 题目大意 nnn个数字的一个序列&#xff0c;求有多少个点对i,ji,ji,j满足aiaj≤max{ak}(k∈[l,r])a_i\times a_j\leq max\{a_k\}(k\in[l,r])ai​aj​≤max{ak​}(k∈[l,r]) 解题思路 如果构建一棵笛卡尔树的话那么两个点…

C# 接受MQTT服务器推送的消息

前言&#xff1a;MQTT是IBM开发的一个即时通讯协议。MQTT是面向M2M和物联网的连接协议&#xff0c;采用轻量级发布和订阅消息传输机制。大家可以直接上GitHub下载MQQT服务的源码&#xff0c;源码地址&#xff1a;https://github.com/mqtt/mqtt.github.io/wiki/libraries主要内容…

【堆】【DP】Niyaz and Small Degrees(luogu 7600[APIO 2021 T3]/luogu-CF1119F)

正题 luogu 7600[APIO 2021 T3] luogu-CF1119F 题目大意 给你一棵树&#xff0c;给出每条边割掉的代价&#xff0c;问你对于0⩽k<n0\leqslant k<n0⩽k<n&#xff0c;使得每个点的度数小于k的最小代价 解题思路 首先考虑单询问的情况 可以设fx,1/0f_{x,1/0}fx,1/0​…

Boundary(2020多校第二场B)

Boundary&#xff08;2020多校第二场B&#xff09; 文章目录题意&#xff1a;题解&#xff1a;思路1&#xff1a;代码&#xff1a;思路二代码题意&#xff1a; 坐标平面有n个点&#xff08;不与原点&#xff08;0,0&#xff09;重复&#xff09;,现考虑一个圆&#xff0c;&…

.NET Core开发日志——Linux版本的SQL Server

SQL Server 2017版本已经可以在Linux系统上安装&#xff0c;但我在尝试.NET Core跨平台开发的时候使用的是Mac系统&#xff0c;所以这里记录了在Mac上安装SQL Server的过程。最新的SQL Server没有专门为Mac系统准备安装包&#xff0c;但由于Mac系统上支持Docker&#xff0c;所以…