QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#351841#6425. Harmonious RectanglePorNPtree#AC ✓27ms3928kbC++142.7kb2024-03-12 16:07:282024-03-12 16:07:28

Judging History

你现在查看的是最新测评结果

  • [2024-03-12 16:07:28]
  • 评测
  • 测评结果:AC
  • 用时:27ms
  • 内存:3928kb
  • [2024-03-12 16:07:28]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

const int P = 1e9 + 7;

int ksm(int y)
{
    int x = 3, res = 1;
    while (y) {
        if (y & 1) {
            res = 1ll * res * x % P;
        }
        x = 1ll * x * x % P;
        y >>= 1;
    }
    return res;
}

int n, m, a[25][25], res;

void dfs(int x, int y)
{
    int chk = 0;
    for (int i = 1; i <= n && !chk; ++i) {
        for (int k = 1; k <= m && !chk; ++k) {
            if (!a[i][k]) {
                continue;
            }
            for (int j = i + 1; j <= n; ++j) {
                for (int l = k + 1; l <= m; ++l) {
                    if (a[j][l]) {
                        chk |= ((a[i][k] == a[i][l]) && (a[j][k] == a[j][l]));
                        chk |= ((a[i][k] == a[j][k]) && (a[i][l] == a[j][l]));
                    }
                }
            }
        }
    }
    if (chk) {
        int ct = (n - x) * m + m - y + 1;
        ((res += ksm(ct)) >= P) && (res -= P);
        return;
    }
    if (x > n) {
//        for (int i = 1; i <= n; ++i) {
//            for (int j = 1; j <= m; ++j) {
//                printf("%d", a[i][j]);
//            }
//            puts("");
//        }
//        puts("");
        return;
    }
    for (int i = 1; i <= 3; ++i) {
        a[x][y] = i;
        if (y == m) {
            dfs(x + 1, 1);
        } else {
            dfs(x, y + 1);
        }
        a[x][y] = 0;
    }
    return;
}

signed main()
{
    int T;
    scanf("%d", &T);
    while (T--) {
        scanf("%d%d", &n, &m);
        if (n > m) {
            swap(n, m);
        }
        if (n == 1) {
            puts("0");
            continue;
        }
        if (m >= 8) {
            printf("%d\n", ksm(n * m));
            continue;
        }
        if (n == 2 && m == 7) {
            puts("4767849");
            continue;
        }
        if (n == 3 && m == 5) {
            puts("14321907");
            continue;
        }
        if (n == 3 && m == 6) {
            puts("387406809");
            continue;
        }
        if (n == 3 && m == 7) {
            puts("460338013");
            continue;
        }
        if (n == 4 && m == 4) {
            puts("43022385");
            continue;
        }
        if (n == 4 && m == 5) {
            puts("486780060");
            continue;
        }
        if (n >= 4 && m >= 6) {
            printf("%d\n", ksm(n * m));
            continue;
        }
        if (n == 5 && m == 5) {
            puts("288599194");
            continue;
        }
        res = 0;
        dfs(1, 1);
        printf("%d\n", res);
    }
    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 3928kb

input:

3
1 4
2 2
3 3

output:

0
15
16485

result:

ok 3 number(s): "0 15 16485"

Test #2:

score: 0
Accepted
time: 27ms
memory: 3836kb

input:

10000
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
1 11
1 12
1 13
1 14
1 15
1 16
1 17
1 18
1 19
1 20
1 21
1 22
1 23
1 24
1 25
1 26
1 27
1 28
1 29
1 30
1 31
1 32
1 33
1 34
1 35
1 36
1 37
1 38
1 39
1 40
1 41
1 42
1 43
1 44
1 45
1 46
1 47
1 48
1 49
1 50
1 51
1 52
1 53
1 54
1 55
1 56
1 57
1 58
1 59
1 60
1 6...

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
15
339
4761
52929
517761
4767849
43046721
387420489
486784380
381059392
429534507
865810542
792294...

result:

ok 10000 numbers

Test #3:

score: 0
Accepted
time: 3ms
memory: 3868kb

input:

10000
1705 810
454 699
1749 1057
1177 326
132 74
1657 1927
1688 781
1870 1278
261 681
901 1166
740 1088
1762 344
1519 1027
887 1049
1871 1800
533 173
873 1725
1960 1555
1582 628
1197 453
1668 810
1882 468
1163 1011
1077 627
438 113
1150 480
927 407
1393 1348
784 1650
198 903
939 1930
173 1726
1276 1...

output:

4664542
474135175
453284040
865070735
892936842
930878193
929505944
730204219
878002827
776271982
319486673
354630833
31019262
653603083
316945266
163467758
910052980
502234498
692029941
37337160
838442854
94243481
112835966
363282856
563398619
682187998
379850832
751053515
449670075
419120473
96439...

result:

ok 10000 numbers

Test #4:

score: 0
Accepted
time: 1ms
memory: 3660kb

input:

10000
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 ...

output:

460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
...

result:

ok 10000 numbers