提交记录 14996


用户 题目 状态 得分 用时 内存 语言 代码长度
PinkRabbit noi18f. 【NOI2018】多边形 Wrong Answer 0 1.025 s 30660 KB C++11 2.21 KB
提交时间 评测时间
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();
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #11.024 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #21.024 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #31.024 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #41.025 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #51.024 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #61.024 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #71.024 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #81.024 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #91.024 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #101.024 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #111.024 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #121.025 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #131.024 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #141.024 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #151.024 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #161.024 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #171.024 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #181.024 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #191.024 s29 MB + 964 KBWrong AnswerScore: 0

Testcase #201.024 s29 MB + 964 KBWrong AnswerScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-03-21 13:48:27 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠