結果
| 問題 | No.3743 World Mapper |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-09-18 09:11:12 |
| 言語 | C++23 (gcc 15.3.0 + boost 1.92.0 + ACL) |
| 結果 |
WA
不安定
|
| 実行時間 | - |
| コード長 | 1,611 bytes |
| 記録 | |
| コンパイル時間 | 2,151 ms |
| コンパイル使用メモリ | 339,156 KB |
| 実行使用メモリ | 6,528 KB |
| 最終ジャッジ日時 | 2026-09-19 13:24:22 |
| 合計ジャッジ時間 | 16,367 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge4_0 |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| 部分点1 | 10 % | AC * 1 WA * 3 |
| 部分点2 | 10 % | AC * 1 WA * 8 |
| 部分点3 | 10 % | AC * 1 WA * 13 |
| 部分点4 | 10 % | AC * 1 WA * 18 |
| 部分点5 | 10 % | AC * 1 WA * 23 |
| 部分点6 | 10 % | AC * 1 WA * 28 |
| 部分点7 | 10 % | AC * 1 WA * 33 |
| 部分点8 | 10 % | AC * 1 WA * 38 |
| 部分点9 | 10 % | AC * 1 WA * 43 |
| 満点 | 10 % | AC * 1 WA * 48 |
| 合計 | 5 * 0% = 0 点 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N;
cin >> N;
constexpr ll P = 2503;
constexpr ll G = 709;
constexpr ll M = P * (P - 1);
// Ruzsa Sidon set
vector<ll> a;
a.reserve(P - 1);
ll pw = 1;
for (ll k = 1; k <= P - 1; k++) {
pw = pw * G % P; // G^k mod P
ll x = (k * P - pw * (P - 1)) % M;
if (x < 0) x += M;
a.push_back(x);
}
sort(a.begin(), a.end());
// 蛇行 Hamilton 路上での番号
auto id = [&](int r, int c) -> int {
if (r % 2 == 0) {
return r * N + c;
} else {
return r * N + (N - 1 - c);
}
};
auto weight = [&](int r1, int c1, int r2, int c2) -> ll {
return llabs(a[id(r1, c1)] - a[id(r2, c2)]);
};
// 念のため。
// この定数では max = 295759 になる。
for (int i = 0; i < (int)a.size(); i++) {
for (int d = 1; d <= 99 && i + d < (int)a.size(); d++) {
assert(a[i + d] - a[i] <= 300000);
}
}
// 横辺、縦辺を交互に出力
for (int r = 0; r < N; r++) {
// (r,c) -- (r,c+1)
for (int c = 0; c + 1 < N; c++) {
if (c) cout << ' ';
cout << weight(r, c, r, c + 1);
}
cout << '\n';
if (r + 1 == N) break;
// (r,c) -- (r+1,c)
for (int c = 0; c < N; c++) {
if (c) cout << ' ';
cout << weight(r, c, r + 1, c);
}
cout << '\n';
}
return 0;
}