結果
| 問題 | No.3722 Blended Taste |
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2026-06-30 07:08:07 |
| 言語 | C++23 (gcc 15.3.0 + boost 1.92.0 + ACL) |
| 結果 |
WA
不安定
|
| 実行時間 | - |
| コード長 | 1,787 bytes |
| 記録 | |
| コンパイル時間 | 2,410 ms |
| コンパイル使用メモリ | 349,780 KB |
| 実行使用メモリ | 23,912 KB |
| 最終ジャッジ日時 | 2026-09-19 12:30:43 |
| 合計ジャッジ時間 | 7,194 ms |
|
ジャッジサーバーID (参考情報) |
judge2_1 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 38 WA * 3 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, K, M;
cin >> N >> M >> K;
long long q = 1LL * N * N / M;
vector<vector<int>> ans(N, vector<int>(N, 0));
vector<long long> cnt(M + 1, 0);
// 各 mod K の行数・列数
vector<int> num(K);
for (int r = 0; r < K; r++) {
num[r] = (N + K - 1 - r) / K;
}
// size <= q の剰余類だけ候補にする
vector<tuple<long long, int, int>> classes;
for (int r = 0; r < K; r++) {
for (int c = 0; c < K; c++) {
long long sz = 1LL * num[r] * num[c];
if (sz <= q) {
classes.emplace_back(sz, r, c);
}
}
}
// 小さい剰余類から使う
sort(classes.begin(), classes.end());
int take = min(M, (int)classes.size());
// 選べるだけ剰余類を色に割り当てる
for (int color = 1; color <= take; color++) {
auto [sz, r, c] = classes[color - 1];
for (int i = r; i < N; i += K) {
for (int j = c; j < N; j += K) {
ans[i][j] = color;
cnt[color]++;
}
}
}
// 残りの空きマスを、各色が q 個になるように適当に埋める
int cur = 1;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (ans[i][j] != 0) continue;
while (cur <= M && cnt[cur] == q) {
cur++;
}
ans[i][j] = cur;
cnt[cur]++;
}
}
// 出力
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (j) cout << ' ';
cout << ans[i][j];
}
cout << '\n';
}
return 0;
}