魔改森林

题意:

曾经有一道叫做迷雾森林的题目,然而牛牛认为地图中的障碍太多,实在是太难了,所以删去了很多点,出了这道题。

牛牛给出了一个n行m列的网格图
初始牛牛处在最左下角的格点上(n+1,1),终点在右上角的格点(1,m+1)
现在它想知道,从起点走到终点,只能向上或向右走,一共有多少种走法呢?

需要注意的是,除了起点和终点外,其它的每个格点都有可能有障碍,无法通过。

请注意格子与格点的区别

题解:

参考博客
对于 n,m<=1000 的点:DP
对于 n,m<=100000 的点,因为k很小,考虑使用容斥原理,我们定义一个work函数,work是指右移a次上移b次有多少种移法

假设只有一个点(x,y)不能走,总方案是C(m+n,n),减去经过这个点方案C(x+y,x) * C(n-x+n-y,n-x)
即 C(m+n,n)- C(x+y,x) * C(n-x+n-y,n-x)
如果有多个障碍点的话,我们考虑什么样的点彼此会共同影响,
图中绿色为障碍点,蓝色为路线,我们不难发现当点与点之间存在偏序关系的时候,就会彼此共同影响,如何找偏序关系,当
(x[j]>=x[i]&&y[j]>=y[i])(i是左下方的点,j是右上方的点)时说明满足条件
在这里插入图片描述

代码:

#include<bits/stdc++.h>
#define LL long long
using namespace std;
LL n,m,k,s,t;
bool f[1005][1005];
LL dp[1005][1005];
LL x[10],y[10];
LL mod=998244353;
LL ksm(LL a) {LL b=mod-2;LL ans=1;while(b) {if(b&1)ans=(a*ans)%mod;a=a*a%mod;b>>=1;}return ans;
}
LL ni[100005];
void csh() {for(LL i=1; i<=100000; i++)ni[i]=ksm(i);
}
LL C(LL a,LL b) {LL a1=1;for(LL i=b; i>=b-a+1; i--)a1=a1*i%mod;for(LL i=1; i<=a; i++)a1=(a1*ni[i])%mod;return a1;
}
LL work(LL a,LL b) {return C(a,a+b);
}
int main() {cin>>n>>m>>k;m++;n++;if(n<=1000&&m<=1000) {for(LL i=1; i<=k; i++) {cin>>s>>t;f[s][t]=1;}dp[n][1]=1;for(LL i=n; i>0; i--)for(LL j=1; j<=m; j++)if((i!=n||j!=1)&&f[i][j]!=1)dp[i][j]=(dp[i+1][j]+dp[i][j-1])%mod;cout<<dp[1][m]<<"\n";}else {csh();LL ans=work(n-1,m-1);for(LL i=1; i<=k; i++) {cin>>x[i]>>y[i];x[i]=n-x[i];y[i]--;ans=(ans-work(x[i],y[i])*work(n-x[i]-1,m-y[i]-1))%mod;}for(LL i=1; i<=k; i++)for(LL j=i+1; j<=k; j++)if(x[i]+y[i]>x[j]+y[j]) {swap(x[i],x[j]);swap(y[i],y[j]);}if(k>=2)for(LL i=1; i<=k; i++)for(LL j=i+1; j<=k; j++)if(x[j]>=x[i]&&y[j]>=y[i])ans=(ans+work(x[i],y[i])*work(x[j]-x[i],y[j]-y[i])%mod*work(n-x[j]-1,m-y[j]-1))%mod;cout<<(ans+mod)%mod<<endl;}return 0;
}
/*
a b+a
*/

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

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

相关文章

基于IdentityServer4 实现.NET Core的认证授权

IdentityServer4是什么&#xff1f;IdentityServer4是基于ASP.NET Core实现的认证和授权框架&#xff0c;是对OpenID Connect和OAuth 2.0协议的实现。OpenID Connect 和 OAuth2.0是什么OpenID Connect:OpenID Connect由OpenID基金会于2014年发布的一个开放标准, 是建立在OAuth …

常见存储、查找算法

存储 散列存储&#xff1a;即哈希的存储方式。 顺序存储&#xff1a;数组的存储方式 链式存储&#xff1a;链式前向星、vector<> 压缩存储 索引存储 查找 常见查找算法 顺序查找 一个一个往下找&#xff0c;复杂度 \(O(\dfrac{n1}{2})\) 。 适合顺序存储&#xff0c…

CF1556E-Equilibrium【栈,树状数组】

正题 题目连接:https://codeforces.com/contest/1556/problem/E 题目大意 两个长度为nnn的序列a,ba,ba,b&#xff0c;qqq次询问一个区间[l,r][l,r][l,r]。 在这个区间中你每次可以选择一个长度为偶数的下标递增的序列&#xff0c;让奇数位置的aaa加一&#xff0c;偶数位置的…

[COCI 2018#5]Parametriziran

这道题呢&#xff01; 算了&#xff0c;不要让这玩意儿活着祸害众生吧&#xff01;让我们来拯救苍生于苦海之中&#xff01;&#xff01; 骚话连篇ing 题目 由小写英文字母和问号组成的字符串成为参数化单词&#xff08;例如&#xff1a;??cd,bcd,??&#xff09;。如果两…

P2324 [SCOI2005]骑士精神(迭代加深搜索,dfs)

传送门 文章目录解析解析 很显然&#xff0c;让马走的话状态记录和转移都会比较复杂 所以转化成让空位跳会更好做一点 但这不是重点 初看本题&#xff0c;其实第一感觉是bfs 但是状态数理论上最差可以达到815&#xff0c;&#xff08;当然基本不可能跑满&#xff09;&#xff…

AcWing 1402. 星空之夜 1月28

AcWing 1402. 星空之夜 1月28 题意&#xff1a; 一个星群是指一组非空的在水平&#xff0c;垂直或对角线方向相邻的星星的集合。 一个星群不能是一个更大星群的一部分。 星群可能是相似的。 如果两个星群的形状、包含星星的数目相同&#xff0c;那么无论它们的朝向如何&#…

RMQ、ST表

ST表 \(\text{ST}\) 表是用于解决可重复贡献问题的数据结构。 可重复贡献问题&#xff1a;区间按位和、区间按位或、区间 \(\gcd\) 、区间最大、区间最小等满足结合律且可重复统计的问题。 模板预处理&#xff1a;(以区间最大值为例) void pre_work() {for(int i2;i<n;i) lg…

NumSharp v0.6 科学计算库发布,新增 LAPACK 的线性库支持

NumSharp&#xff08;Numerical .NET&#xff09;可以说是C&#xff03;中的科学计算库。 它是用C&#xff03;编写的&#xff0c;符合.netstandard 2.0库标准。 它的目标是让.NET开发人员使用NumPy的语法编写机器学习代码&#xff0c;从而最大限度地借鉴现有大量在python代码的…

[COCI] Zamjena

连这种模拟题都能。。。orz ex&#xff0c;太恶心了&#xff01; 驰骋坑底这么久了&#xff0c;我明白了 开始吧&#xff01;我发誓&#xff0c;这个超级兵&#xff0c;我就算用小书包平A都要A了它 题目 Vlatko喜欢使用整数数组&#xff0c;他在一张纸上写下了两个数组&…

P7470-[NOI Online 2021 提高组]岛屿探险【Trie,CDQ分治】

正题 题目链接:https://www.luogu.com.cn/problem/P7470 题目大意 给出nnn个二元组(a,b)(a,b)(a,b)。 qqq次询问给出(l,r,c,d)(l,r,c,d)(l,r,c,d)表示询问[l,r][l,r][l,r]中有多少二元组满足cxora≤min(b,d)c\ xor\ a\leq min(b,d)c xor a≤min(b,d)。 1≤n,q≤1051\leq n,q\…

P2601 [ZJOI2009]对称的正方形(二维哈希)(二分)

洛谷传送门 文章目录题目描述解析代码题目描述 解析 做三个hash 分一下正方形边长的奇偶性 然后枚举中心点&#xff0c;二分边长即可 有点类似模拟赛那道红十字的题 我一开始觉得分奇偶好麻烦啊 为什么不直接枚举左上方的点二分呢&#xff1f;awa 很遗憾的是… 那样答案就没有…

初赛—错题集

计算机基础知识 LAN&#xff1a;局域网&#xff0c;WAN&#xff1a;广域网&#xff0c;MAN&#xff1a;城域网 汇编语言是(依赖于具体计算机)的低级程序设计语言 计算机操作的最小时间单位是(时钟周期)。 注意所需空间需要 \(\div 8\) &#xff01;&#xff01;&#xff01;…

.NET Core 和 DevOps

关键要点无论你目前使用什么样的技术栈&#xff0c;DevOps 都是值得一试的。闭源、专有软件和构建过程与 DevOps 实践不兼容。.NET Core 是开源的&#xff0c;是基于 DevOps 构思和构建的。.NET Core CLI 和 Roslyn API 让整个交付流程变得更加开放&#xff0c;且具有更强的适应…

2021 NOI游记

文章目录前言day1总结T1 轻重边(0/50)考后得分T2 路径交点(0/20)考后得分T3 庆典(28/44)赛后得分day2总结T1 量子通信(20/12)赛后得分T2 密码箱(0/35)赛后得分T3 机器人游戏(12/12)赛后得分总结前言 62pts 太惨了 &#xff08;只是参加了同步赛而已&#xff09; 感觉心态受到了…

【每日一题】1月29日题目 和与或

题意&#xff1a; 给你一个数组R&#xff0c;包含N个元素&#xff0c;求有多少满足条件的序列A使得 0 ≤ A[i] ≤ R [ i ] A[0]A[1]…A[N−1] A[0] | ]A[1]… | A [ N − 1 ] 输出答案对1e99取模 题解&#xff1a; 参考博客 数位dp问题 如果和等于或的话&#xff0c;说明两…

Message Decoding密码翻译

这是一道模拟题ex 其实每一道模拟题都很“简单”&#xff0c; 这道题就是难在读英文题&#xff01;处理输入&#xff01; 真的我竟然花了几个小时就只是为了看懂样例&#xff01;&#xff01;orz 题目大意 考虑下面的01串序列&#xff1a; 0&#xff0c;00&#xff0c;01…

AT3945-[ARC092D]Two Faced Edges【dfs】

正题 题目链接:https://www.luogu.com.cn/problem/AT3945 题目大意 nnn个点mmm条边的一张图&#xff0c;对于每条边求它翻转后强连通分量数量是否变化。 1≤n≤1000,1≤m≤21051\leq n\leq 1000,1\leq m\leq 2\times 10^51≤n≤1000,1≤m≤2105 解题思路 对于一条(x,y)(x,y)(…

记录一些 sb 错误

记录一些 sb 错误 离散化的最小值 \(val_0\) 应该赋值为不可能达到的值( \(val_0-\infty\) )函数传参数从右到左&#xff0c;在 f(rd(),rd()) 后会反过来。连续的 if 中记得加上 else。因为在 if 中可能会改变下一个 if 的判断条件(如某一次洛谷月赛)数组不要开小啦&#xff01…

.NET Core开发日志——结构化日志

在.NET生态圈中&#xff0c;最早被广泛使用的日志库可能是派生自Java世界里的Apache log4net。而其后来者&#xff0c;莫过于NLog。Nlog与log4net相比&#xff0c;有一项较显著的优势&#xff0c;它支持结构化日志。结构化日志&#xff0c;也被称为语义化日志。其作用有二&…

YBTOJ 特殊数列(哈希表)

文章目录题目描述解析代码题目描述 解析 应该是哈希表板子题了 选一个1e6左右的质数进行处理即可 其实本质就是链前 没啥特别新鲜的 为什么要写呢&#xff1f; 因为这个东西很早之前看的时候完全没有看懂。。。 代码 #include<bits/stdc.h> using namespace std; #def…