比赛-thh学长的训练赛2 (20 Aug, 2018)

Posted ghcred

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比赛-thh学长的训练赛2 (20 Aug, 2018)相关的知识,希望对你有一定的参考价值。

1.) 图论

设第 (i) 个图 (C) 逆时针旋转 (90°) 得到 (A) ,顺时针旋转 (90°) 得到 (B) ,则第 (i + 1) 个图是:
A B
C C
这样就可以把第 (i) 张图划分成四个部分。考虑把某个第 (i) 个图的坐标代换成第 (i - 1) 张图中的坐标,写一个递归即可。
假设输出矩形的长、宽分别为 (x,y) ,时间复杂度 (O(n cdot xy))

#include <cstdio>

int P[35];
bool MA[4][4];

bool fun(int n, int x, int y)
{
    if (n == 1)
        return MA[x][y];
    if (x > P[n - 1] && y <= P[n - 1])
        return fun(n - 1, x - P[n - 1], y);
    if (x > P[n - 1] && y > P[n - 1])
        return fun(n - 1, x - P[n - 1], y - P[n - 1]);
    if (x <= P[n - 1] && y <= P[n - 1])
        return fun(n - 1, y, P[n - 1] - x + 1);
    if (x <= P[n - 1] && y > P[n - 1])
        return fun(n - 1, P[n] - y + 1, x);
    return 0;
}

int main()
{
    freopen("graph.in", "r", stdin);
    freopen("graph.out", "w", stdout);
    
    int N, A, B, C, D;
    scanf("%d%d%d%d%d", &N, &A, &B, &C, &D);
    P[0] = 1;
    for (int i = 1; i <= N; ++i)
        P[i] = P[i - 1] << 1;
    MA[1][2] = 1;
    for (int i = A; i <= C; ++i) {
        for (int j = B; j <= D; ++j)
            printf("%d", fun(N, i, j));
        printf("
");
    }
    return 0;
}

以上是关于比赛-thh学长的训练赛2 (20 Aug, 2018)的主要内容,如果未能解决你的问题,请参考以下文章

比赛-OBlack学长的训练赛 (25 Aug, 2018)

比赛-训练赛 (15 Aug, 2018)

比赛-CioCio的训练赛 (Aug 18, 2018)

比赛题解 更新ING

2019山东省赛反省

DC比赛员工离职预测训练赛(逻辑回归)