QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#72367 | #5031. 核 | zhoukangyang | 10 | 18ms | 5504kb | C++17 | 1.7kb | 2023-01-15 15:02:38 | 2023-01-15 15:04:01 |
Judging History
answer
#include<bits/stdc++.h>
#define L(i, j, k) for(int i = (j); i <= (k); ++i)
#define R(i, j, k) for(int i = (j); i >= (k); --i)
#define ll long long
#define sz(a) ((int) (a).size())
#define vi vector < int >
#define me(a, x) memset(a, x, sizeof(a))
#define ull unsigned long long
#define ld __float128
using namespace std;
const int N = 1145;
int n, q, mod;
int qpow(int x, int y = mod - 2) {
int res = 1;
for(; y; x = (ll) x * x % mod, y >>= 1) if(y & 1) res = (ll) res * x % mod;
return res;
}
int a[N][N];
int f[N][N];
int det(int n) {
int p = 1;
L(i, 1, n) {
L(j, p + 1, n) {
while(f[j][i]) {
int t = f[p][i] / f[j][i];
L(k, i, n) (f[p][k] += q - (ll) f[j][k] * t % q) %= q;
swap(f[p], f[j]);
}
}
if(f[p][i]) ++p;
}
return p - 1;
}
int ans[N];
void search(int x, int y) {
if(y == n + 1) ++x, y = 1;
if(x == n + 1) {
L(i, 1, n) {
L(j, 1, n) {
f[i][j] = a[i][j];
}
}
if(det(n) != n)
return ;
L(i, 1, n) {
L(j, 1, n) {
f[i][j] = a[i][j];
}
}
L(i, 1, n)
(f[i][i] += q - 1) %= q;
// L(i, 1, n) {
// L(j, 1, n) {
// cout << f[i][j] << ' ';
// }
// cout << '\n';
// }
// cout << '\n';
// cout << "det : " << det(n) << '\n';
ans[det(n)] += 1;
return ;
}
L(i, 0, q - 1) {
a[x][y] = i;
search(x, y + 1);
}
}
int main() {
ios :: sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >> q >> mod;
search(1, 1);
int pw = 1, s = 1;
L(i, 1, n) pw = (ll) pw * q % (mod - 1);
int ns = 0;
R(i, n, 0) {
(ns += (ll) ans[i] * qpow(3, s) % mod) %= mod;
s = (ll) s * pw % (mod - 1);
}
cout << ns << '\n';
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 10
Accepted
Test #1:
score: 10
Accepted
time: 0ms
memory: 5348kb
input:
1 2 540053233
output:
9
result:
ok 1 number(s): "9"
Test #2:
score: 0
Accepted
time: 2ms
memory: 5504kb
input:
2 2 156542707
output:
43046970
result:
ok 1 number(s): "43046970"
Test #3:
score: 0
Accepted
time: 2ms
memory: 5364kb
input:
1 2 186225229
output:
9
result:
ok 1 number(s): "9"
Test #4:
score: 0
Accepted
time: 18ms
memory: 5348kb
input:
3 3 109884329
output:
100602209
result:
ok 1 number(s): "100602209"
Test #5:
score: 0
Accepted
time: 2ms
memory: 5424kb
input:
1 2 144802297
output:
9
result:
ok 1 number(s): "9"
Subtask #2:
score: 0
Time Limit Exceeded
Dependency #1:
100%
Accepted
Test #6:
score: 0
Time Limit Exceeded
input:
20 21992843 328859143
output:
result:
Subtask #3:
score: 0
Skipped
Dependency #2:
0%
Subtask #4:
score: 0
Memory Limit Exceeded
Test #26:
score: 0
Memory Limit Exceeded
input:
998818 198334853 998244353
output:
result:
Subtask #5:
score: 0
Runtime Error
Test #36:
score: 0
Runtime Error
input:
9909956 720431399 720431401
output:
result:
Subtask #6:
score: 0
Skipped
Dependency #1:
100%
Accepted
Dependency #2:
0%