社区讨论

10分

P1002[NOIP 2002 普及组] 过河卒参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mi6hdtba
此快照首次捕获于
2025/11/20 04:54
4 个月前
此快照最后确认于
2025/11/20 04:54
4 个月前
查看原帖
CPP
#include <cstdio>
#define MAX 22
bool cb[MAX][MAX];
int bx, by;
long count = 0;
void getCheckerBord(bool cb[MAX][MAX], int bx, int by, int cx, int cy)
{
    for (int i = 0; i < MAX; ++i)
    {
        for (int j = 0; j < MAX; ++j)
        {
            cb[i][j] = false;
        }
    }
    cb[cx][cy] = true;
    cb[cx + 1][cy + 2] = true;
    cb[cx - 1][cy + 2] = true;
    cb[cx + 1][cy - 2] = true;
    cb[cx - 1][cy - 2] = true;
    cb[cx + 2][cy + 1] = true;
    cb[cx - 2][cy + 1] = true;
    cb[cx + 2][cy - 1] = true;
    cb[cx - 2][cy - 1] = true;
    for (int i = 0; i <= bx; i++)
    {
        cb[bx + 1][i] = true;
    }
    for (int j = 0; j <= by; j++)
    {
        cb[j][by + 1] = true;
    }
}
long move(int ax, int ay, int bx, int by)
{
    if (ax == bx && ay == by) return 1; 
    if (cb[ax][ay] == true || ax > bx && ay > by) return 0; 
    return move(ax + 1, ay, bx, by) + move(ax, ay+1, bx, by);
}
int main()
{
    int ax = 0, ay = 0;
    int bx, by; 
    int cx, cy; 
    long sum;
    scanf("%d %d %d %d", &bx, &by, &cx, &cy);
    getCheckerBord(cb, bx, by, cx, cy); 
    sum = move(ax, ay, bx, by);
    printf("%ld", sum);
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...