0分求助

回复帖子

@iamzq 2020-09-05 17:09 回复

好久没做题了,结果给我来个开门红

测试点下过来验证了一下是对的,但评测说我是错的

#include<bits/stdc++.h>
using namespace std;
int f[21][21];
int x, y, n, m;
int pd (int a, int b)
{
    if (a - 2 == x && b - 1 == y || a + 2 == x && b - 1 == y ||a - 2 == x && b + 1 == y ||a + 2 == x && b + 1 == y ||a - 1 == x && b - 2 == y ||a + 1 == x && b - 2 == y ||a - 1 == x && b + 2 == y ||a + 1 == x && b + 2 == y ) return 1;
        return 0;
}
int main()
{
    scanf("%d%d%d%d", &n, &m, &x, &y);
    f[0][0] = 1;
    for (int i = 0; i <= n; i++)
        for (int j = 0; j <= m; j++)
        {
            if (i == x && j == y || pd(i, j) == 1 || i == 0 && j == 0) continue;
            f[i][j] = f[i - 1][j] + f[i][j - 1];
        }   
    printf("%d", f[n][m]);
}
@iamzq 2020-09-05 17:17 回复 举报

把f开成101就过了第一个点,结果把f开成1001第一个点又错了。验证了第二个点还是对的。奇怪,第一次碰到这种情况

@iamzq 2020-09-06 15:57 回复 举报

另外,把printf改成cout能得40分,第三个数据点还是对得上。

#include<bits/stdc++.h>
using namespace std;
long long f[101][101];
int x, y, n, m;
int pd (int a, int b)
{
    if (a - 2 == x && b - 1 == y || a + 2 == x && b - 1 == y ||a - 2 == x && b + 1 == y ||a + 2 == x && b + 1 == y ||a - 1 == x && b - 2 == y ||a + 1 == x && b - 2 == y ||a - 1 == x && b + 2 == y ||a + 1 == x && b + 2 == y ) return 1;
        return 0;
}
int main()
{
    cin>>n>>m>>x>>y;
    f[0][0] = 1;
    for (int i = 0; i <= n; i++)
        for (int j = 0; j <= m; j++)
        {
            if (i == x && j == y || pd(i, j) == 1 || i == 0 && j == 0) continue;
            f[i][j] = f[i - 1][j] + f[i][j - 1];
        }   
    cout<<f[n][m];
}
反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



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