题解 工业题
时间:2021-07-13
本文章向大家介绍题解 工业题,主要包括题解 工业题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
感谢这题题面提醒我我工业的高精还不会打,先咕着(逃
看完题解之后发现的确不难但考场上就是想不出正解
总觉得是个矩阵快速幂,虽然明知道光输入的数组放矩阵里跑\(n^3\)就炸上天了
有想过计算每个\(f_i,0\)对结果的贡献,但觉得应该没这么麻烦,还觉得那样像计数dp,就没往那边想
其实因为每次都是加和,每个\(f_{i,0}\)和\(f_{0,i}\)的贡献其实互不影响
那就可以分开考虑到达f_{n,m}的路径数和a,b的次幂,则贡献t为
\[t=f_{i,0}*\frac{(n-i+m-1)!}{(n-i)!(m-1)!}*a^{m}*b^{n-i}
\]
\[t=f_{0,i}*\frac{(n-1+m-i)!}{(n-1)!(m-i)!}*a^{m-i}*b^{n}
\]
特别注意这里分子上的减1,被卡了巨久
是因为从\(f_{i,0}\)出发,第一步必须向右走,所以这一步的方案是固定的,\(f_{0,i}\)同理
- 还有记得读入取模一定要检查取模取全了没有! 只要有忘取模的就炸锅了
卡细节
Code:
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define N 600010
#define ll long long
#define ld long double
#define usd unsigned
#define ull unsigned long long
//#define int long long
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf, 1, 1<<21, stdin)), p1==p2?EOF:*p1++)
char buf[1<<21], *p1=buf, *p2=buf;
inline ll read() {
ll ans=0, f=1; char c=getchar();
while (!isdigit(c)) {if (c=='-') f=-f; c=getchar();}
while (isdigit(c)) {ans=(ans<<3)+(ans<<1)+(c^48); c=getchar();}
return ans*f;
}
int n, m;
ll a, b, ans;
const ll p=998244353;
namespace force{
ll f[2010][2010];
void solve() {
for (int i=1; i<=n; ++i) f[i][0]=read()%p;
for (int i=1; i<=m; ++i) f[0][i]=read()%p;
for (int i=1; i<=n; ++i)
for (int j=1; j<=m; ++j)
f[i][j] = (f[i][j-1]*a%p+f[i-1][j]*b%p)%p;
printf("%lld\n", f[n][m]);
//for (int i=0; i<=n; ++i) {for (int j=0; j<=m; ++j) cout<<setw(4)<<f[i][j]<<' '; cout<<endl;}
exit(0);
}
}
namespace task1{
ll f[3][N];
void solve() {
for (int i=1; i<=n; ++i) f[i][0]=read()%p;
for (int i=1; i<=m; ++i) f[0][i]=read()%p;
for (int i=1; i<=n; ++i)
for (int j=1; j<=m; ++j)
f[i][j] = (f[i][j-1]*a%p+f[i-1][j]*b%p)%p;
printf("%lld\n", f[n][m]);
//for (int i=0; i<=n; ++i) {for (int j=0; j<=m; ++j) cout<<setw(4)<<f[i][j]<<' '; cout<<endl;}
exit(0);
}
}
namespace task{
ll fac[N], inv[N], pa[N], pb[N], t;
inline ll C(ll n, ll k) {return fac[n]*inv[n-k]%p*inv[k]%p;}
inline ll calc(ll n, ll m) {return fac[n+m]*inv[n]%p*inv[m]%p;}
void solve() {
int lim=2*max(n, m);
fac[0]=fac[1]=1; inv[0]=inv[1]=1;
for (int i=2; i<=lim; ++i) fac[i]=fac[i-1]*i%p;
for (int i=2; i<=lim; ++i) inv[i]=(p-p/i)*inv[p%i]%p;
for (int i=2; i<=lim; ++i) inv[i]=inv[i]*inv[i-1]%p;
pa[0]=pb[0]=1;
for (int i=1; i<=lim; ++i) pa[i]=pa[i-1]*a%p;
for (int i=1; i<=lim; ++i) pb[i]=pb[i-1]*b%p;
for (int i=1; i<=n; ++i) {t=read()%p; ans=(ans+t*calc(n-i, m-1)%p*pb[n-i]%p*pa[m]%p)%p;}
for (int i=1; i<=m; ++i) {t=read()%p; ans=(ans+t*calc(n-1, m-i)%p*pb[n]%p*pa[m-i]%p)%p;}
printf("%lld\n", ans%p);
exit(0);
}
}
signed main()
{
#ifdef DEBUG
freopen("1.in", "r", stdin);
#endif
n=read(); m=read(); a=read()%p; b=read()%p;
//if (n>1) force::solve();
//else task1::solve();
task::solve();
return 0;
}
原文地址:https://www.cnblogs.com/narration/p/15006857.html
- 线程池
- hbase 部署
- Hadoop源码系列(一)FairScheduler申请和分配container的过程
- MOTS攻击之TCP攻击
- iOS学习——获取当前最顶层的ViewController
- 中国深圳一家厂商的智能摄像头曝出漏洞:至少 17.5 万设备可被远程攻击
- iOS学习——Xcode9上传项目到GitHub
- 手把手教你编写一个简单的PHP模块形态的后门
- 如何将简单的Shell转换成为完全交互式的TTY
- 如何使用HackRF做一个简单的IMSI捕获器
- 联想Z470黑化之路:硬件升级还能刷苹果Mac系统!
- 渗透测试TIPS之删除、伪造Linux系统登录日志
- 1分钟懂awk-技不在深,够用就行
- RChain节点通信机制
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 机器学习必刷题-基础概念篇(1):为什么用AUC做评价指标?
- 机器学习必刷题-手撕推导篇(3):FM与softmax
- Python面试必刷题系列(4)
- SQL面试必刷题(1) Case When
- 张量的数学运算
- 数据结构高频面试题-图
- nn.functional和nn.Module
- 20分钟学会DBSCAN聚类算法
- Selenium Firefox驱动程序:使用Firefox浏览器自动进行测试
- Dataset和DataLoader
- 3分钟短文 | PHP 删除目录下所有的文件,这3种写法哪个有bug?
- 【Hive】DDL 与 DML 操作
- 模型层
- 损失函数
- WebDriverIO教程:处理Selenium中的警报和覆盖