結果
問題 | No.2845 Birthday Pattern in Two Different Calendars |
ユーザー |
![]() |
提出日時 | 2024-08-24 10:51:46 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 707 ms / 2,000 ms |
コード長 | 2,008 bytes |
コンパイル時間 | 2,395 ms |
コンパイル使用メモリ | 205,416 KB |
最終ジャッジ日時 | 2025-02-24 00:35:08 |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 22 |
ソースコード
#include <bits/stdc++.h>using namespace std;struct Edge {Edge() {}Edge(int from_, int to_, long long cost_, int idx_) : from(from_), to(to_), cost(cost_), idx(idx_) {}int from, to;long long cost;int idx;};struct Graph {private:int n, m;bool dir;vector<vector<Edge>> g;vector<Edge> e;public:Graph() {}Graph(int n_, bool dir_) : n(n_), m(0), dir(dir_), g(n), e(0) {}Graph(int n_) : n(n_), m(0), dir(false), g(n), e(0) {}int size() {return n;}int edgesize() {return m;}bool directed() {return dir;}void add(int u, int v, long long w) {g[u].emplace_back(u, v, w, m);e.emplace_back(u, v, w, m);if (!dir) {g[v].emplace_back(v, u, w, m);}m++;}vector<Edge> operator[](int v) {return g[v];}Edge edge(int i) {return e[i];}};int main() {int t;cin >> t;while (t--) {int k, m, n;cin >> k >> m >> n;Graph g(k, true);for (int i = 1; i <= k; i++) {int j = (i + m - 2) % k + 1;g.add(i - 1, j - 1, 1);}vector<bool> visit(k, false);vector<int> ans;for (int v = 0; v < k; v++) {if (visit[v]) {continue;}int cur = v;while (!visit[cur]) {visit[cur] = true;if (g[cur][0].to != v) {ans.emplace_back(cur + 1);}cur = g[cur][0].to;visit[cur] = true;cur = g[cur][0].to;}}if (ans.size() >= n) {cout << "Yes" << endl;for (int i = 0; i < n; i++) {cout << ans[i] << " ";}cout << endl;} else {cout << "No" << endl;}}}