QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#694765 | #6425. Harmonious Rectangle | atzk | WA | 36ms | 4624kb | C++20 | 2.7kb | 2024-10-31 18:36:17 | 2024-10-31 18:36:51 |
Judging History
answer
# include <bits/stdc++.h>
using namespace std;
# ifndef ONLINE_JUDGE
# include "debug.h"
# else
# define debug(...) 0721
# define ps 0721
# endif
using i32 = signed;
using i64 = long long;
const int mod = 1e9 + 7;
int power(int a,int n) {
int res = 1;
while(n) {
if(n & 1) res = res * a % mod;
a = a * a % mod;
n >>= 1;
}
return res;
}
map<pair<int,int>,int> mp;
vector<int> res = {
15,339,4761,52929,517761,4767849,43046721,339,16485,518265,14321907,387406809,870403484,961694959,4761,518265,43022385,191812792,961694959,796636458,498665608,52929,14321907,191812792,180047804,989859015,348873122,689956897,517761,387406809,961694959,989859015,46619359,914644770,911671240,4767849,870403484,796636458,348873122,914644770,735013706,918707425,43046721,961694959,498665608,689956897,911671240,918707425,38349043
};
void solve() {
int n,m;
cin >> n >> m;
vector<vector<int>> a(n + 1,vector<int>(m + 1, 0));
vector<vector<int>> b(n + 1,vector<int>(4,0));
auto check = [&] (int x,int y,int val) -> bool {
a[x][y] = val;
if(b[x][0] <=3 && b[x][1] <= 3 && b[x][2] <= 3) {
for (int i = 1; i < x; i++) {
for (int j = 1; j < y; j++) {
if(a[i][j] == a[i][y] && a[x][y] == a[x][j]) {
return false;
}
if(a[i][j] == a[x][j] && a[i][y] == a[x][y]) {
return false;
}
}
}
return true;
}
return false;
};
int ans = 0;
auto dfs = [&] (auto self,int x,int y) -> void {
if(x > n) {
ans++;
return;
}
if(y > m) {
self(self,x + 1,1);
return;
}
for (int i = 1; i <=3 ; i++) {
b[x][i]++;
if(check(x,y,i)) {
self(self,x,y + 1);
}
b[x][i]--;
}
};
if(n == 1 || m == 1) {
cout << 0 << '\n';
return;
}
if(n > 8 || m > 8) {
cout << power(3,n * m) << '\n';
}
cout << res[mp[{n,m}] - 1] << '\n';
}
i32 main() {
ios::sync_with_stdio(0);
cin.tie(0);
# ifndef ONLINE_JUDGE
freopen("Input.txt", "r", stdin);
freopen("Output.txt", "w", stdout);
freopen("Error.txt", "w", stderr);
# endif
int tot = 0;
for (int i = 2; i <= 8;i++) {
for (int j = 2;j <= 8;j++) {
mp[{i,j}] = ++tot;
}
}
i32 t = 1;
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: 3600kb
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: 36ms
memory: 4624kb
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 0 -808182895 0 316288530 0 -38305048 0 -754810...
result:
wrong answer 110th numbers differ - expected: '486784380', found: '0'