結果
問題 |
No.3137 Non-Intersect Chord Triangle Game
|
ユーザー |
|
提出日時 | 2025-05-02 23:31:20 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 38 ms / 2,000 ms |
コード長 | 1,459 bytes |
コンパイル時間 | 744 ms |
コンパイル使用メモリ | 79,244 KB |
実行使用メモリ | 9,088 KB |
最終ジャッジ日時 | 2025-05-02 23:31:24 |
合計ジャッジ時間 | 4,139 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 65 |
ソースコード
#include <iostream> #include <cstdint> using namespace std; static inline constexpr const uint32_t* prepare(const uint32_t N, const uint32_t M, const pair<uint32_t, uint32_t>* const strings) { uint32_t* flag = new uint32_t[N + 1]; for (uint32_t i = 1; i <= N; ++i) flag[i] = 0; for (uint32_t i = 0; i != M; ++i) { if (strings[i].first < strings[i].second) flag[strings[i].first] = 1, flag[strings[i].second] = 2; else flag[strings[i].first] = 2, flag[strings[i].second] = 1; } return flag; } static inline constexpr const char* solve(const uint32_t N, const uint32_t* const flag) { uint32_t count = 0, stacking_count = 0; uint32_t* stack = new uint32_t[N]; for (uint32_t i = 1; i <= N; ++i) switch (flag[i]) { case 0: ++count; break; case 1: stack[stacking_count] = count; ++stacking_count; count = 0; break; case 2: if ((count & 3) == 2) { delete[] stack; return "Akane"; } count = stack[--stacking_count]; break; } delete[] stack; if ((count & 3) == 2) return "Akane"; else return "Aoi"; } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); uint32_t N, M, i; cin >> N >> M; pair<uint32_t, uint32_t>* strings = new pair<uint32_t, uint32_t>[M]; for (i = 0; i != M; ++i) cin >> strings[i].first >> strings[i].second; const uint32_t* const flag = prepare(N, M, strings); cout << solve(N, flag) << '\n'; delete[] strings; delete[] flag; return 0; }