3 solutions
-
0
Guest MOD
-
0
#include<bits/stdc++.h>
using namespace std;
const int maxn=2010,mod=1000000007;
inline void Add(int &a,int b){a=a+b>=mod? a+b-mod:a+b;}
int n,m,cntx[maxn][maxn],cnty[maxn] [maxn],f[maxn][maxn],g[maxn][maxn];
int main()
{
scanf("%d%d",&n,&m);if(n==1&&m==1)return puts("1"),0;
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { char c=getchar();while(c==' '||c=='//n') c=getchar(); if(c=='R') cntx[i][j]=cnty[i][j]=1; } for(int i=n;i;i--) for(int j=m;j;j--) { cntx[i][j]+=cntx[i][j+1];//cntx 和 maxn cnty[i][j]+=cnty[i+1][j]; } f[1][1]=g[1][1]=1;f[2][1]=g[1][2]=-1; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { Add(f[i][j],f[i-1][j]);//边上 (1-n/1-m/m-n/1-[m,n]) Add(g[i][j+1],f[i][j]);//角上([cntx/2]) Add(g[i][m-cntx[i][j+1]+1],mod-f[i][j]);//边角交接([1,1][1,n][n,m][1,m]) Add(g[i][j],g[i][j-1]);//一个箱子边上 Add(f[i+1][j],g[i][j]);//夹在几个箱子中间 Add(f[n-cnty[i+1][j]+1][j],mod-g[i][j]);//马上推出边界 } Add(f[n][m],g[n][m]);printf("%d\\n",f[n][m]);//1-[n,m/1,n/1,m] return 0;}
Information
- ID
- 268
- Time
- 1000ms
- Memory
- 512MiB
- Difficulty
- 10
- Tags
- (None)
- # Submissions
- 51
- Accepted
- 2
- Uploaded By