1 条题解
-
0
C :
#include<stdio.h> #include<string.h> int main() { int m,n,x,y,i,j,c[21][21]; while(scanf("%d%d%d%d",&x,&y,&m,&n)==4) { memset(c,0,sizeof(c)); c[m][n]=-1; c[0][0]=1; if(m>=2&&n>=1)c[m-2][n-1]=-1; if(m>=1&&n>=2)c[m-1][n-2]=-1; if(y-n>=2&&x-m>=1)c[m+1][n+2]=-1; if(y-n>=1&&x-m>=2)c[m+2][n+1]=-1; if(m>=2&&y-n>=1)c[m-2][n+1]=-1; if(m>=1&&y-n>=1)c[m-1][n+2]=-1; if(x-m>=1&&n>=2)c[m+1][n-2]=-1; if(x-m>=2&&n>=1)c[m+2][n-1]=-1; for(i=1;i<=x;i++) if(c[i][0]!=-1)c[i][0]=1; else break; for(j=1;j<=y;j++) if(c[0][j]!=-1)c[0][j]=1; else break; for(i=1;i<=x;i++) for(j=1;j<=y;j++) if(c[i][j]!=-1&&c[i][j-1]!=-1&&c[i-1][j]!=-1) c[i][j]=c[i][j-1]+c[i-1][j]; else { if(c[i][j]!=-1&&c[i][j-1]!=-1) c[i][j]=c[i][j-1]; if(c[i][j]!=-1&&c[i-1][j]!=-1) c[i][j]=c[i-1][j]; } printf("%d\n",c[x][y]); } return 0; }
C++ :
#include <stdio.h> #include <string.h> char a[1000][1000]; int dp[1000][1000]; int main() { int n,m,x,y; while(scanf("%d%d%d%d",&n,&m,&x,&y)!=EOF) { memset(dp,0,sizeof(dp)); for(int i=0;i<1000;i++) for(int j=0;j<1000;j++) a[i][j]='.'; n+=2; m+=2; x+=2; y+=2; a[x][y]='x'; a[x-1][y+2]=a[x+1][y+2]=a[x-1][y-2]=a[x+1][y-2]=a[x-2][y+1]=a[x-2][y-1]=a[x+2][y+1]=a[x+2][y-1]='x'; dp[2][2]=1; for(int i=3;i<=m;i++) { if(a[2][i]!='x') dp[2][i]=1; if(a[2][i]=='x') { for(int i1=i;i1<=m;i1++) dp[2][i1]=0; break; } } for(int i=3;i<=n;i++) { if(a[i][2]!='x') dp[i][2]=1; if(a[i][2]=='x') { for(int i1=i;i1<=n;i1++) dp[i1][2]=0; break; } } for(int i=3;i<=n;i++) for(int j=3;j<=m;j++) { if(a[i][j]=='x') dp[i][j]=0; else dp[i][j]=dp[i-1][j]+dp[i][j-1]; } printf("%d\n",dp[n][m]); } return 0; }
- 1
信息
- ID
- 2836
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者