YbOJ-网格序列【拉格朗日插值】
正题
题目大意
有一个n×mn\times mn×m的网格,在上面填上[1,k][1,k][1,k]的数字,定义两个长度为nnn的序列ai,bia_i,b_iai,bi分别表示每一行/每一列的最大值。
求有多少种不同的合法a,ba,ba,b对。
1≤n,m≤106,1≤k≤1091\leq n,m\leq 10^6,1\leq k\leq 10^91≤n,m≤106,1≤k≤109
解题思路
不难发现合法的a,ba,ba,b对只需要满足它们的最大值相等。
那么枚举最大值iii,答案就是
∑i=1k(in−(i−1)n)(im−(i−1)m)\sum_{i=1}^k(i^n-(i-1)^n)(i^m-(i-1)^m)i=1∑k(in−(i−1)n)(im−(i−1)m)
看到这个式子果断想到这是一个和kkk有关的n+m+1n+m+1n+m+1次多项式,又因为kkk很大而n,mn,mn,m很小直接上插值。
时间复杂度:O(nlogn)O(n\log n)O(nlogn)(视n,mn,mn,m同级)
code
#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;
}
YbOJ-网格序列【拉格朗日插值】相关推荐
- 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
- 【BZOJ】2655: calc 动态规划+拉格朗日插值
[题意]一个序列$a_1,...,a_n$合法当且仅当它们都是[1,A]中的数字且互不相同,一个序列的价值定义为数字的乘积,求所有序列的价值和.n<=500,A<=10^9,n+1< ...
- 51nod1229-序列求和V2【数学,拉格朗日插值】
正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1229 题目大意 给出n,k,rn,k,rn,k,r求 ∑i=1nikri ...
- YbtOJ#903-染色方案【拉格朗日插值,NTT,分治】
正题 题目链接:https://www.ybtoj.com.cn/contest/115/problem/3 题目大意 两个长度为n+1n+1n+1的序列a,ba,ba,b aia_iai表示涂了i ...
- Codeforce 622 F. The Sum of the k-th Powers(拉格朗日插值求k次幂之和,拉格朗日插值公式)
题目大意:求 ∑i=1nik\displaystyle\sum_{i = 1}^ni^ki=1∑nik 求k次幂有多种求法,例如: 伯努利数求k次幂之和(待补) 斯特林数求k次幂之和 拉格朗日插值法 ...
- Matlab实现线性插值、抛物插值、牛顿插值、拉格朗日插值、分段抛物插值、分段线性插值
目录 线性插值 原理 流程图 代码 抛物插值 原理 流程图 代码 拉格朗日插值 代码 牛顿插值 原理 代码 分段线性插值 代码 线性插值 原理 流程图 单个点的线性插值代码 X=[0.2 0.4]; ...
- [数值计算-14]:拉格朗日插值与Python代码实现
作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing 本文网址:https://blog.csdn.net/HiWangWenBing/article ...
- matlab自带拉格朗日插值,MATLAB实现拉格朗日插值
<MATLAB实现拉格朗日插值>由会员分享,可在线阅读,更多相关<MATLAB实现拉格朗日插值(14页珍藏版)>请在人人文库网上搜索. 1.实用标准文档文案大全数值分析上机报告 ...
- 拉格朗日插值——基于scipy实现
python 实现 from scipy.interpolate import lagrange x = [3, 6, 9] y = [10, 8, 4] lagrange(x,y) #poly1d ...
- 某 SCOI 模拟赛 T3 s3mple【生成函数 拉格朗日插值】
题意 对于序列 a a a,记 v i v_i vi 为位置距离 a i a_i ai 最近的.比 a i a_i ai 大的数与它的距离(假设 a 0 a_0 a0 和 a n + 1 a_ ...
最新文章
- C语言的单链表实现队列
- 从VMware ESX Server 4升级到ESXi 5
- android保持数据库,android – 保持Firebase实时数据库中的数据始终保持同步
- 正确的工作流程:我应该使用哪个OAuth 2.0流程?
- json请求 post vue_Spring Boot+Vueaxios异步请求数据的12种操作(上篇)
- 云原生数据库崛起,阿里云POLARDB当选世界互联网领先科技成果
- web前端的渐进增强式开发模型
- 灯三段调光原理_各种筒灯、射灯、斗胆灯最全的解释?用对地方,效果加倍
- 怎样加入社区项目Karbor的Review?
- 医学诊断报告生成论文综述
- c语言怎么用右移代替除法,除法和算术右移之间的巧妙取代
- 分享Python采集的77个PHP整站程序源码
- 【网页图标】favicon.ico文件的设置
- 全国计算机四级之网络工程师知识点(五)
- Oracle 中ORA-28000: the account is locked解决办法
- K8S中deployment和service案例
- 电路中滤波电容和退耦电容_怎么分清滤波电容、去耦电容、旁路电容
- bzoj4668: 冷战
- Leetcode PHP题解--D75 706. Design HashMap
- Google Adwords关键词即将告别完全精确匹配
热门文章
- mysql utf8 bin设置_[mysql]修改collation为utf8_bin
- mysql 导入文件夹_MySQL-导入与导出
- 闲鱼有微信小程序吗_微信小程序商品展示页面(仿咸鱼)
- python导包路径问题_python的导包问题
- ORACLE数据加载加本,使用oracle sqlldr加载数据
- get+php+mysql_Apache+PHP+MySql 的安装及配置
- # 睡眠3秒_【for fun】睡眠排序算法
- lighttpd mysql_lighttpd+mysql+php
- java实用教程——组件及事件处理——布局的一个小实例
- 循环遍历多层json_面试官:JSON.stringify() 实现深拷贝有什么问题