求助

回复帖子

@暗影之梦 2021-07-26 14:45 回复
#include<iostream>
#include<algorithm>
#include<cstdio>
#define int long long
using namespace std;
int n,m,x,y,ans;
bool a[21][21];
signed main()
{
    scanf("%d%d%d%d",&n,&m,&x,&y);
    a[x][y]=2e9;
    if(x-2>=0&&y-1>=0) a[x-2][y-1]=2e9;
    if(x-2>=0&&y+1>=0) a[x-2][y+1]=2e9;
    if(x-1>=0&&y-2>=0) a[x-1][y-2]=2e9;
    if(x-1>=0&&y+2>=0) a[x-1][y+2]=2e9;
    if(x+1>=0&&y-2>=0) a[x+1][y-2]=2e9;
    if(x+1>=0&&y+2>=0) a[x+1][y+2]=2e9;
    if(x+2>=0&&y-1>=0) a[x+2][y-1]=2e9;
    if(x+2>=0&&y+1>=0) a[x+2][y+1]=2e9;
    for(int i=0;i<=n;i++) a[i][0]=1;
    for(int i=0;i<=m;i++) a[0][i]=1;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(a[i][j]==2e9) a[i][j]=0;
            else a[i][j]=a[i-1][j]+a[i][j-1];
        }
    }
    printf("%d",a[n][m]);
    return 0;
}   
@ImopsterAnYu 2021-07-26 14:56 回复 举报
for(int i=0;i<=n;i++) a[i][0]=1;
for(int i=0;i<=m;i++) a[0][i]=1;

for(int i=0;i<=n;i++){
   if(a[i][0] == 2e9) a[i][0]=0;                else a[i][0]=1;
}
for(int i=0;i<=m;i++){
   if(a[0][i] == 2e9) a[0][i]=0;                else a[0][i]=1;
}
@暗影之梦 2021-07-26 15:21 回复 举报

@ImopsterAnYu 改后样例还是错的,输出1

#include<iostream>
#include<algorithm>
#include<cstdio>
#define int long long
using namespace std;
int n,m,x,y,ans;
bool a[21][21];
signed main()
{
    scanf("%d%d%d%d",&n,&m,&x,&y);
    a[x][y]=2e9;
    if(x-2>=0&&y-1>=0) a[x-2][y-1]=2e9;
    if(x-2>=0&&y+1>=0) a[x-2][y+1]=2e9;
    if(x-1>=0&&y-2>=0) a[x-1][y-2]=2e9;
    if(x-1>=0&&y+2>=0) a[x-1][y+2]=2e9;
    if(x+1>=0&&y-2>=0) a[x+1][y-2]=2e9;
    if(x+1>=0&&y+2>=0) a[x+1][y+2]=2e9;
    if(x+2>=0&&y-1>=0) a[x+2][y-1]=2e9;
    if(x+2>=0&&y+1>=0) a[x+2][y+1]=2e9;
    for(int i=0;i<=n;i++)
    {
        if(a[i][0]!=2e9) a[i][0]=1;
        else a[i][0]=0;
    }
    for(int i=0;i<=m;i++) 
    {
        if(a[0][i]!=2e9) a[0][i]=1;
        else a[0][i]=0;
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(a[i][j]==2e9) a[i][j]=0;
            else a[i][j]=a[i-1][j]+a[i][j-1];
        }
    }
    printf("%d",a[n][m]);
    return 0;
}   
@ImopsterAnYu 2021-07-26 15:35 回复 举报

@暗影之梦 你这代码不对啊。

我调试之后跑了一遍,棋盘上全是1。

(即当 $0 \leq i \leq n$,$0 \leq j \leq m$ 时,$a_{i,j} = 1$!)

@暗影之梦 2021-07-26 15:50 回复 举报

@ImopsterAnYu 之前写的时候zz了

现在代码只有60分

#include<iostream>
#include<algorithm>
#include<cstdio>
#define int long long
using namespace std;
int n,m,x,y,ans;
int a[21][21];
signed main()
{
    scanf("%d%d%d%d",&n,&m,&x,&y);
    a[x][y]=1e18;
    if(x-2>=0&&y-1>=0) a[x-2][y-1]=1e18;
    if(x-2>=0&&y+1>=0) a[x-2][y+1]=1e18;
    if(x-1>=0&&y-2>=0) a[x-1][y-2]=1e18;
    if(x-1>=0&&y+2>=0) a[x-1][y+2]=1e18;
    if(x+1>=0&&y-2>=0) a[x+1][y-2]=1e18;
    if(x+1>=0&&y+2>=0) a[x+1][y+2]=1e18;
    if(x+2>=0&&y-1>=0) a[x+2][y-1]=1e18;
    if(x+2>=0&&y+1>=0) a[x+2][y+1]=1e18;
    for(int i=0;i<=n;i++)
    {
        if(a[i][0]!=1e18) a[i][0]=1;
        else a[i][0]=0;
    }
    for(int i=0;i<=m;i++) 
    {
        if(a[0][i]!=1e18) a[0][i]=1;
        else a[0][i]=0;
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(a[i][j]==1e18) a[i][j]=0;
            else a[i][j]=a[i-1][j]+a[i][j-1];
        }
    }
    printf("%d",a[n][m]);
    return 0;
}   
反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。