QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#281830 | #6425. Harmonious Rectangle | jrjyy | WA | 2ms | 3668kb | C++20 | 3.8kb | 2023-12-10 21:55:24 | 2023-12-10 21:55:24 |
Judging History
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'