QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#542367 | #8940. Piggy Sort | Speed Star (Kentaro Matsushita, Ryomei Sugai)# | Compile Error | / | / | C++14 | 4.6kb | 2024-09-01 00:53:07 | 2024-09-01 00:53:07 |
Judging History
This is the latest submission verdict.
- [2024-09-01 00:53:07]
- Judged
- Verdict: Compile Error
- Time: 0ms
- Memory: 0kb
- [2024-09-01 00:53:07]
- Submitted
answer
#include <bits/stdc++.h>
using namespace std;
const long long MOD = 998244353;
long long modpow(long long a, long long b){
long long ans = 1;
while (b > 0){
if (b % 2 == 1){
ans *= a;
ans %= MOD;
}
a *= a;
a %= MOD;
b /= 2;
}
return ans;
}
long long modinv(long long a){
return modpow(a, MOD - 2);
}
int main(){
int t;
cin >> t;
for (int i = 0; i < t; i++){
int n, m;
cin >> n >> m;
vector<vector<int>> x(m, vector<int>(n));
for (int j = 0; j < m; j++){
for (int k = 0; k < n; k++){
cin >> x[j][k];
}
}
vector<long long> s(m, 0);
for (int j = 0; j < m; j++){
for (int k = 0; k < n; k++){
s[j] += x[j][k];
}
}
long long d = 0;
for (int j = 0; j < m - 1; j++){
d = gcd(d, s[j + 1] - s[j]);
}
if (d == 0){
for (int j = 0; j < n; j++){
cout << j + 1;
if (j < n - 1){
cout << ' ';
}
}
cout << endl;
} else {
vector<int> t(m);
for (int j = 0; j < m; j++){
t[j] = (s[j] - s[0]) / d;
}
vector<vector<long long>> psum(n + 1, vector<long long>(n + 1, 0));
for (int j = 0; j <= n; j++){
for (int k = 0; k < n; k++){
long long tmp = 1;
for (int l = 0; l <= n; l++){
psum[j][l] += tmp;
psum[j][l] %= MOD;
tmp *= x[j][k];
tmp %= MOD;
}
}
}
vector<long long> ti(m);
for (int j = 0; j < m; j++){
ti[j] = modinv(t[j]);
}
vector<vector<long long>> di(m, vector<long long>(m));
for (int j = 0; j < m; j++){
for (int k = 0; k < m; k++){
if (j != k){
di[j][k] = modinv(t[j] - t[k]);
}
}
}
vector<long long> b(n, 0);
for (int j = 0; j < n; j++){
vector<long long> X(j + 2), Y(j + 2);
for (int k = 0; k < j + 2; k++){
X[k] = t[k];
Y[k] = psum[k][j + 1];
}
vector<vector<long long>> dp(j + 3, vector<long long>(j + 3, 0));
dp[0][0] = 1;
for (int k = 0; k < j + 2; k++){
for (int l = 0; l <= k; l++){
dp[k + 1][l] += dp[k][l] * (MOD - X[k]);
dp[k + 1][l] %= MOD;
dp[k + 1][l + 1] += dp[k][l];
dp[k + 1][l + 1] %= MOD;
}
}
for (int k = 0; k < j + 2; k++){
long long add;
if (X[k] == 0){
add = dp[j + 2][2];
} else {
add = (dp[j + 2][1] + dp[j + 2][0] * ti[k]) % MOD * (MOD - ti[k]) % MOD;
}
add *= Y[k];
add %= MOD;
for (int l = 0; l < j + 2; l++){
if (k != l){
add *= di[k][l];
add %= MOD;
}
}
b[j] += add;
}
b[j] %= MOD;
}
vector<long long> inv(n + 1);
inv[1] = 1;
for (int j = 2; j <= n; j++){
inv[j] = MOD - inv[MOD % j] * (MOD / j) % MOD;
}
for (int j = 0; j < n; j++){
b[j] *= inv[j + 1];
b[j] %= MOD;
}
vector<vector<long long>> A(n, vector<long long>(n + 1));
for (int j = 0; j < n; j++){
A[0][j] = 1;
for (int k = 1; k < n; k++){
A[k][j] = A[k - 1][j] * x[0][j] % MOD;
}
}
for (int j = 0; j < n; j++){
A[j][n] = b[j];
}
for (int j = 0; j < n; j++){
if (A[j][j] == 0){
for (int k = j + 1; k < n; k++){
if (A[k][j] == 0){
swap(A[j], A[k]);
break;
}
}
}
long long tmp = modinv(A[j][j]);
for (int k = j; k <= n; k++){
A[j][k] *= tmp;
A[j][k] %= MOD;
}
for (int k = 0; k < n; k++){
if (k != j){
long long a = A[k][j];
for (int l = j; l <= n; l++){
A[k][l] += MOD - a * A[j][l] % MOD;
A[k][l] %= MOD;
}
}
}
}
vector<int> v(n);
for (int j = 0; j < n; j++){
v[j] = A[j][n];
}
vector<int> p(n);
for (int j = 0; j < n; j++){
p[j] = j;
}
stable_sort(p.begin(), p.end(), [&](int j, int k){
return v[j] < v[k];
});
vector<int> r(n);
for (int j = 0; j < n; j++){
r[p[j]] = j;
}
for (int j = 0; j < n; j++){
cout << r[j] + 1;
if (j < n - 1){
cout << ' ';
}
}
cout << endl;
}
}
}
Details
answer.code: In function ‘int main()’: answer.code:40:11: error: ‘gcd’ was not declared in this scope 40 | d = gcd(d, s[j + 1] - s[j]); | ^~~