提交记录 14996
| 提交时间 |
评测时间 |
| 2020-11-14 05:47:20 |
2020-11-14 05:47:35 |
// fileName: test_O2_Transpose_Tilling_35_Unroll_loops_13_type_2.cpp
#pragma GCC optimize("O2")
#include <random>
#include <chrono>
std::mt19937 rng(std::chrono::steady_clock::now().time_since_epoch().count());
typedef unsigned int UI;
typedef unsigned long long ULL;
const UI Mod = 998244353;
const int N = 1400;
UI A[N][N], B[N][N], C[N][N];
inline UI Reduce(ULL t) {
UI a = t * 998244351;
return (t + (ULL)a * Mod) >> 32;
}
void Mul() {
static UI B[N][N];
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
B[i][j] = ::B[j][i];
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
C[i][j] = 0;
for (int si = 0; si < N; si += 35)
for (int sj = 0; sj < N; sj += 35)
for (int i = si; i < si + 35; ++i)
for (int j = sj; j < sj + 35; ++j) {
ULL tmp = 0;
for (int k = 0; k < N; k += 8)
tmp += Reduce((ULL)A[i][k] * B[j][k] +
(ULL)A[i][k + 1] * B[j][k + 1] +
(ULL)A[i][k + 2] * B[j][k + 2] +
(ULL)A[i][k + 3] * B[j][k + 3] +
(ULL)A[i][k + 4] * B[j][k + 4] +
(ULL)A[i][k + 5] * B[j][k + 5] +
(ULL)A[i][k + 6] * B[j][k + 6] +
(ULL)A[i][k + 7] * B[j][k + 7]);
C[i][j] = tmp % Mod;
}
}
void toMontgomery() {
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
A[i][j] = ((ULL)A[i][j] << 32) % Mod,
B[i][j] = ((ULL)B[i][j] << 32) % Mod;
}
void frMontgomery() {
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
A[i][j] = Reduce(A[i][j]),
B[i][j] = Reduce(B[i][j]),
C[i][j] = Reduce(C[i][j]);
}
int Check() {
static UI V[N], W1[N], W2[N], Tmp[N];
for (int i = 0; i < N; ++i) {
V[i] = rng() % Mod;
W1[i] = 0;
W2[i] = 0;
Tmp[i] = 0;
}
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
Tmp[i] = (Tmp[i] + (ULL)B[i][j] * V[j]) % Mod;
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
W1[i] = (W1[i] + (ULL)A[i][j] * Tmp[j]) % Mod;
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
W2[i] = (W2[i] + (ULL)C[i][j] * V[j]) % Mod;
for (int i = 0; i < N; ++i)
if (W1[i] != W2[i]) return 1;
return 0;
}
int main() {
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
A[i][j] = rng() % Mod;
B[i][j] = rng() % Mod;
}
}
toMontgomery();
Mul();
frMontgomery();
return Check();
}
| Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
| Testcase #1 | 1.024 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #2 | 1.024 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #3 | 1.024 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #4 | 1.025 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #5 | 1.024 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #6 | 1.024 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #7 | 1.024 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #8 | 1.024 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #9 | 1.024 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #10 | 1.024 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #11 | 1.024 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #12 | 1.025 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #13 | 1.024 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #14 | 1.024 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #15 | 1.024 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #16 | 1.024 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #17 | 1.024 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #18 | 1.024 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #19 | 1.024 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #20 | 1.024 s | 29 MB + 964 KB | Wrong Answer | Score: 0 | 显示更多 |
Judge Duck Online | 评测鸭在线
Server Time: 2026-03-21 13:48:27 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠