Codeforces 1247E. Rock Is Push
显然考虑 $dp$ ,设 $fx[i][j]$ 表示从 $(i,j)$ 出发往下走一格,最终到达 $(n,m)$ 的方案数,$fy[i][j]$ 表示从 $(i,j)$ 出发往右走一格,最终到达 $(n,m)$ 的方案数
如果 $(i,j)$ 本身有石头就把这个石头忽略
那么对于 $fx[i][j]$ ,如果 $(i+1,j)$ 没有石头,转移为 $fx[i][j]=fx[i+1][j]+fy[i+1][j]$
如果 $(i+1,j)$ 有石头,因为 $fx[i+1][j]$ 没有算到本身的石头,所以方案中多出了一类往下走到 $(x,y)$ 再往右的方案
但是因为这个石头的存在,我们最多只能走到 $(x-1,y)$ ,那么方案便多出了 $fy[x][y]$ ,再减去即可,显然 $x,y$ 可以通过预处理每列的前缀石头数得到
然后对于 $fy$ 也差不多转移,所以就做完了
记得特判 $(n,m)=(1,1)$ 的情况
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=,mo=1e9+;
inline int fk(int x) { return x>=mo ? x-mo : x; }
int n,m,ans;
int cntx[N][N],cnty[N][N];
int fx[N][N],fy[N][N];
char s[N][N];
int main()
{
n=read(),m=read();
for(int i=;i<=n;i++)
scanf("%s",s[i]+);
for(int i=n;i>=;i--)
for(int j=m;j>=;j--)
{
cntx[i][j]=cntx[i+][j]+(s[i][j]=='R');
cnty[i][j]=cnty[i][j+]+(s[i][j]=='R');
}
for(int i=;i<m;i++)
if(!cnty[n][i]) fy[n][i]=;
for(int i=;i<n;i++)
if(!cntx[i][m]) fx[i][m]=;
for(int i=n-;i;i--)
for(int j=m-;j;j--)
{
fx[i][j]=fk(fx[i+][j]+fy[i+][j]);
if(s[i+][j]=='R') fx[i][j]=fk(fx[i][j]- fy[ n-cntx[i+][j]+ ][j] +mo);
fy[i][j]=fk(fx[i][j+]+fy[i][j+]);
if(s[i][j+]=='R') fy[i][j]=fk(fy[i][j]- fx[i][ m-cnty[i][j+]+ ] +mo);
}
if(n==&&m==&&s[][]=='.') ans=;
else ans=fk(fx[][]+fy[][]);
printf("%d\n",ans);
return ;
}
Codeforces 1247E. Rock Is Push的更多相关文章
- [CodeForces - 1225E]Rock Is Push 【dp】【前缀和】
[CodeForces - 1225E]Rock Is Push [dp][前缀和] 标签:题解 codeforces题解 dp 前缀和 题目描述 Time limit 2000 ms Memory ...
- Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) E. Rock Is Push dp
E. Rock Is Push You are at the top left cell (1,1) of an n×m labyrinth. Your goal is to get to the b ...
- 【CF1225E Rock Is Push】推岩石
题目描述 你现在在一个\(n×m\)的迷宫的左上角(即点\((1,1)\)),你的目标是到达迷宫的右下角(即点\((n,m)\)).一次移动你只能向右或者是向下移动一个单位.比如在点\((x,y)\) ...
- cf rock is push 【dp】
附上学习的博客:https://blog.csdn.net/u013534123/article/details/102762673 大致题意:一个迷宫,里面有很多箱子,你可以向右或者向下走.当你遇到 ...
- 【CF1247E】Rock Is Push(DP,二分)
题意:有一个n*m的方格,每一格可能为空也可能有石头,要从(1,1)走到(n,m),每次可以往右或往下走 每次走的时候都会将自己面前的所有石头向移动方向推一格,如果碰到了边界就推不过去 问方案数模1e ...
- CF1225E题解 Rock Is Push
在打CF的时候没想到www这个dp真的蛮巧妙的 这是一道dp题(废话 假设我们走到了\((i,j)\)位置,因为我们只能下移/右移,那么我们所有上方与左方的石块(即\(\{ (i,j)|i<n ...
- CF1225E Rock Is Push (计数)
观察性质计数题orz小贺 考场上跟榜才切 我们只能往下和往右走,那么只有连续的往下和往右可能会造成不合法的情况!如果当前这一步是向右,那么只有它前面连续的一段向右可能影响到它. 考虑把连续的向右/下一 ...
- Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2)
A - Forgetting Things 题意:给 \(a,b\) 两个数字的开头数字(1~9),求使得等式 \(a=b-1\) 成立的一组 \(a,b\) ,无解输出-1. 题解:很显然只有 \( ...
- some problem
CF1257F Make Them Similar $solution:$ 折半搜索后考虑如何维护两个数组的和,可以将 $A$ 中每个数减 $A_1$ ,$B$ 中每个数被减 $B_1$ ,$map$ ...
随机推荐
- Flask-login Question
1 未登录访问鉴权页面如何处理? 如果未登录访问了一个作了 login_required 限制的 view,那么 Flask-Login 会默认 flash一条消息,并且将重定向到login_view ...
- 笔记七(编写第一个UEFI程序)
搭建好uefi开发环境之后,在MyWorkspace文件夹中建立一个文件夹ExamplePkg; ,然后在ExamplePkg文件夹中创建HelloWorld文件夹,Include文件夹,Exampl ...
- 解决python在命令行中运行时导入包失败,出现错误信息 "ModuleNotFoundError: No module named ***"
转自https://www.cnblogs.com/dreamyu/p/7889959.html https://www.cnblogs.com/lifeofershisui/p/8135702.ht ...
- Ubuntu: Linux下查看本机显示器分辨率(xrandr)
版权声明:转载请注明出处 https://blog.csdn.net/JNingWei/article/details/75044598 Linux下查看本机显示器分辨率: $ xrandr Sc ...
- Python 自学笔记(三)
1.列表 1-1.什么是列表 列表的代码格式:teacher=['张三','李四','王五'] 这里的['张三','李四','王五'] 就是一个列表,一个列表需要用中括号[ ]把里面的各种数据框起来, ...
- springboot之activemq安装与实践
环境:腾讯云centos7 注意:activemq安装插件,可能会报错.本人是主机名的问题,所以修改了主机名. vim /etc/hosts vim /etc/hostname 修改这两个文件,并重启 ...
- mongodb download
https://www.mongodb.org/dl/win32/x86_64-2008plus-ssl
- Django setting 常用配置
setting.py 这个文件包含了所有有关这个Django项目的配置信息,均大写: TEMPLATE_DIRS , DATABASE_NAME , 等. 最重要的设置是 RO ...
- C#创建windows服务(二:创建和卸载windows服务)
引用地址: https://docs.microsoft.com/zh-cn/dotnet/framework/windows-services/how-to-create-windows-servi ...
- iOS-自定义导航控制器
BasicNavigationViewController:UINavigationViwController /* 隐藏导航底部线条 */ -(void)viewDidLoad{ [super ...