結果
| 問題 | No.3584 Camouflage Mole |
| コンテスト | |
| ユーザー |
Iroha_3856
|
| 提出日時 | 2026-07-10 21:58:43 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.90.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 2,667 bytes |
| 記録 | |
| コンパイル時間 | 4,245 ms |
| コンパイル使用メモリ | 380,748 KB |
| 実行使用メモリ | 5,888 KB |
| 最終ジャッジ日時 | 2026-07-10 21:58:58 |
| 合計ジャッジ時間 | 8,713 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | RE * 3 |
| other | WA * 8 RE * 29 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#include <atcoder/all>
using mint = atcoder::modint998244353;
#define rep(i, l, r) for (int i = (l); i < (r); i++)
#define ll long long
#define all(x) (x).begin(), (x).end()
#define siz(x) (int)x.size()
#define debug(x) cout << #x << " : " << endl; for (auto u : x) cout << u << " "; cout << endl
template<class T> bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }
template<class T> bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
const int inf = 1e9;
const ll INF = 4e18;
template<class T> using spq = priority_queue<T, vector<T>, greater<T>>;
vector<int> di = {1, 0, -1, 0}, dj = {0, 1, 0, -1};
int main() {
int N, M, K; cin >> N >> M >> K;
int R = N * (N - 1) / 2 - M;
if (R < N - 1) {
cout << "No\n";
return 0;
}
vector<int> A(K + 1, 1);
auto score = [&](vector<int> X) -> int {
int ret = 0;
rep(i, 0, K) ret += A[i] * A[i + 1];
rep(i, 0, K + 1) ret += A[i] * (A[i] - 1) / 2;
return ret;
};
rep(_, 0, N - K - 1) {
int amx = -1, mx = -1;
rep(j, 1, K + 1) {
A[j]++;
if (chmax(mx, score(A))) amx = j;
A[j]--;
}
A[amx]++;
}
// for (int a : A) cout << a << " ";
// cout << "\n";
int sc = score(A);
if (R <= sc) {
cout << "Yes\n";
vector<vector<int>> V(K + 1);
int c = 0;
rep(i, 0, K + 1) {
rep(_, 0, A[i]) V[i].push_back(c++);
}
vector<vector<bool>> choose(N, vector<bool>(N, false));
vector<pair<int, int>> choosable;
rep(i, 0, K) {
rep(j, 0, A[i]) rep(k, 0, A[i + 1]) {
if (j == 0) {
choose[V[i][j]][V[i + 1][k]] = true;
}
else {
choosable.push_back({V[i][j], V[i + 1][k]});
}
}
}
rep(i, 0, K + 1) {
rep(j, 0, A[i]) rep(k, j + 1, A[i]) {
choosable.push_back({V[i][j], V[i][k]});
}
}
// cout << "choosable : " << "\n";
// for (auto[u, v] : choosable) {
// cout << u << " " << v << "\n";
// }
// cout << "====" << endl;
int chosen = N - 1;
// assert(siz(choosable) >= R - chosen);s
rep(i, 0, R - chosen) {
auto[u, v] = choosable[i];
choose[u][v] = true;
}
rep(i, 0, N) rep(j, i + 1, N) {
if (not choose[i][j]) cout << i + 1 << " " << j + 1 << "\n";
}
}
else {
cout << "No\n";
}
}
Iroha_3856