YbOJ-网格序列【拉格朗日插值】

1|0正题


1|1题目大意

有一个n×m的网格,在上面填上[1,k]的数字,定义两个长度为n的序列ai,bi分别表示每一行/每一列的最大值。

求有多少种不同的合法a,b对。

1n,m106,1k109


1|2解题思路

不难发现合法的a,b对只需要满足它们的最大值相等。

那么枚举最大值i,答案就是

i=1k(in(i1)n)(im(i1)m)

看到这个式子果断想到这是一个和k有关的n+m+1次多项式,又因为k很大而n,m很小直接上插值。

时间复杂度:O(nlogn)(视n,m同级)


1|3code

#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll N=3e6+10,P=998244353; ll n,m,k,pwn[N],pwm[N],f[N],inv[N],pre[N],suf[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; } signed main() { freopen("grid.in","r",stdin); freopen("grid.out","w",stdout); scanf("%lld%lld%lld",&n,&m,&k); ll L=n+m+10; for(ll i=1;i<=L;i++){ pwn[i]=power(i,n); pwm[i]=power(i,m); f[i]=(f[i-1]+(pwn[i]-pwn[i-1])*(pwm[i]-pwm[i-1])%P)%P; } inv[0]=inv[1]=1; for(ll i=2;i<N;i++)inv[i]=P-inv[P%i]*(P/i)%P; for(ll i=1;i<N;i++)inv[i]=inv[i-1]*inv[i]%P; pre[0]=k;suf[L]=k-L;suf[L+1]=1; for(ll i=1;i<=L;i++)pre[i]=pre[i-1]*(k-i)%P; for(ll i=L-1;i>=0;i--)suf[i]=suf[i+1]*(k-i)%P; for(ll i=0;i<=L;i++){ ll w=f[i]*(i?pre[i-1]:1)%P*suf[i+1]%P; w=w*inv[i]%P*inv[L-i]%P*(((L-i)&1)?-1:1); ans=(ans+w)%P; } printf("%lld\n",(ans+P)%P); return 0; }

__EOF__

本文作者QuantAsk
本文链接https://www.cnblogs.com/QuantAsk/p/15896702.html
关于博主:退役OIer,GD划水选手
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   QuantAsk  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2021-02-15 P5319-[BJOI2019]奥术神杖【0/1分数规划,AC自动机,dp】
2021-02-15 P4585-[FJOI2015]火星商店问题【线段树,可持久化Trie】
2021-02-15 P6793-[SNOI2020]字符串【广义SAM,贪心】
2021-02-15 CF803G-Periodic RMQ Problem【离散化,线段树,ST表】
2021-02-15 YbtOJ#593-木棍问题【费用流】
2021-02-15 YbtOJ#893-带权的图【高斯消元,结论】
2021-02-15 YbtOJ#631-次短路径【左偏树,最短路】
点击右上角即可分享
微信分享提示