QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#281830#6425. Harmonious RectanglejrjyyWA 2ms3668kbC++203.8kb2023-12-10 21:55:242023-12-10 21:55:24

Judging History

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

  • [2023-12-10 21:55:24]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:3668kb
  • [2023-12-10 21:55:24]
  • 提交

answer

#include <bits/stdc++.h>

using i64 = long long;

template <typename T>
constexpr T power(T a, i64 b) {
    T c{1};
    while (b) {
        if (b % 2) {
            c *= a;
        }
        a *= a;
        b /= 2;
    }
    return c;
}

template <int P>
struct MInt {
    int x;
    constexpr MInt() : x{} {}
    constexpr MInt(i64 x_) : x{up(x_ % getMod())} {}
    constexpr static MInt fromNormed(int x) {
        MInt v{};
        v.x = x;
        return v;
    }

    static int Mod;
    constexpr static int getMod() {
        return P > 0 ? P : Mod;
    }
    constexpr static void setMod(int Mod_) {
        Mod = Mod_;
    }

    inline constexpr static int up(int x) {
        if (x < 0) {
            x += getMod();
        }
        return x;
    }
    inline constexpr static int down(int x) {
        if (x >= getMod()) {
            x -= getMod();
        }
        return x;
    }
    inline constexpr static int norm(int x) {
        return up(down(x));
    }

    inline constexpr int val() const {
        return x;
    }
    inline explicit constexpr operator int() const {
        return val();
    }
    inline constexpr MInt operator-() const {
        MInt res;
        res.x = norm(getMod() - x);
        return res;
    }
    inline constexpr MInt inv() const {
        assert(x != 0);
        return power(*this, getMod() - 2);
    }
    inline constexpr MInt &operator+=(MInt rhs) {
        x = down(x + rhs.x);
        return *this;
    }
    inline constexpr MInt &operator-=(MInt rhs) {
        x = up(x - rhs.x);
        return *this;
    }
    inline constexpr MInt &operator*=(MInt rhs) {
        x = 1ll * x * rhs.x % getMod();
        return *this;
    }
    inline constexpr MInt &operator/=(MInt rhs) {
        return *this *= rhs.inv();
    }
    friend inline constexpr MInt operator+(MInt lhs, MInt rhs) {
        return lhs += rhs;
    }
    friend inline constexpr MInt operator-(MInt lhs, MInt rhs) {
        return lhs -= rhs;
    }
    friend inline constexpr MInt operator*(MInt lhs, MInt rhs) {
        return lhs *= rhs;
    }
    friend inline constexpr MInt operator/(MInt lhs, MInt rhs) {
        return lhs /= rhs;
    }
    friend inline constexpr bool operator==(MInt lhs, MInt rhs) {
        return lhs.val() == rhs.val();
    }
    friend inline constexpr bool operator!=(MInt lhs, MInt rhs) {
        return lhs.val() != rhs.val();
    }
    friend constexpr std::istream &operator>>(std::istream &is, MInt &a) {
        i64 x = 0;
        is >> x;
        a = MInt(x);
        return is;
    }
    friend constexpr std::ostream &operator<<(std::ostream &os, const MInt &a) {
        return os << a.val();
    }
};

template <int P>
int MInt<P>::Mod = P;
template <>
int MInt<0>::Mod = 998244353;

template <int V, int P>
constexpr MInt<P> CInv = MInt<P>(V).inv();

constexpr int P = 1000000007;
using Z = MInt<P>;

const int f[10][10] = {
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683},
    {0, 9, 66, 390, 1800, 6120, 13680, 15120, 0, 0},
    {0, 27, 390, 3198, 13176, 27000, 13680, 15120, 0, 0},
    {0, 81, 1800, 13176, 24336, 4320, 0, 0, 0, 0},
    {0, 243, 6120, 27000, 4320, 4320, 0, 0, 0, 0},
    {0, 729, 13680, 13680, 0, 0, 0, 0, 0, 0},
    {0, 2187, 15120, 15120, 0, 0, 0, 0, 0, 0},
    {0, 6561, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 19683, 0, 0, 0, 0, 0, 0, 0, 0},
};

void solve() {
    int n, m;
    std::cin >> n >> m;

    Z ans = power(Z(3), n * m);
    if (std::max(n, m) <= 9) {
        ans -= f[n][m];
    }
    std::cout << ans << "\n";
}

int main() {
    std::cin.tie(nullptr)->sync_with_stdio(false);

    int t;
    std::cin >> t;

    while (t--) {
        solve();
    }

    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3588kb

input:

3
1 4
2 2
3 3

output:

0
15
16485

result:

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

Test #2:

score: -100
Wrong Answer
time: 2ms
memory: 3668kb

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
59049
177147
531441
1594323
4782969
14348907
43046721
129140163
387420489
162261460
486784380
460353133
381059392
143178169
429534507
288603514
865810542
597431612
792294829
376884473
130653412
391960236
175880701
527642103
582926302
748778899
246336683
739010049
217030133
65109039...

result:

wrong answer 10th numbers differ - expected: '0', found: '59049'