結果
問題 |
No.3234 Infinite Propagation
|
ユーザー |
|
提出日時 | 2025-08-17 10:48:58 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 30 ms / 2,000 ms |
コード長 | 2,673 bytes |
コンパイル時間 | 1,284 ms |
コンパイル使用メモリ | 133,556 KB |
実行使用メモリ | 9,448 KB |
最終ジャッジ日時 | 2025-08-17 10:49:01 |
合計ジャッジ時間 | 2,712 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 18 |
ソースコード
#include <iostream> #include <vector> #include <cmath> #include <memory> #include <algorithm> #include <set> #include <map> #include <queue> #include <iomanip> #include <bitset> #include <string> #include <list> #include <deque> #include <stack> #include <limits> #include <atcoder/fenwicktree.hpp> #include <atcoder/segtree.hpp> #include <atcoder/modint.hpp> #include <atcoder/dsu.hpp> using namespace atcoder; using namespace std; using ll = long long; using ull = unsigned long long; template <class T> using max_heap = priority_queue<T>; template <class T> using min_heap = priority_queue<T, vector<T>, greater<>>; ll ll_min = numeric_limits<ll>::min(); ll ll_max = numeric_limits<ll>::max(); ll ALPHABET_N = 26; using mint = modint998244353; #define rep(i, n) for (ll i = (ll)0; i < (ll)n; i++) #define rep_(i, k, n) for (ll i = (ll)k; i < (ll)n; i++) #define all(a) a.begin(), a.end() int main() { ll t; cin >> t; rep(_, t) { ll n; cin >> n; bool flag_a = false, flag_b = false; string tgt = ""; vector<string> A(n), B(n); rep(i, n) cin >> A[i] >> B[i]; rep(i, n) { if (A[i] == "a") { if (B[i].size() > 1 && find(all(B[i]), 'a') != B[i].end()) { flag_a = true; } else if (!flag_a && all_of(all(B[i]), [](char c) { return c == 'b'; })) { flag_b = true; if (tgt.size() < B[i].size()) { tgt = B[i]; } } } } if (flag_a) { cout << "Yes" << endl; continue; } if (!flag_a && !flag_b) { cout << "No" << endl; continue; } ll b_len1 = tgt.size() - 1; bool ok = false; rep(i, n) { if (all_of(all(A[i]), [](char c) { return c == 'b'; }) && all_of(all(B[i]), [](char c) { return c == 'b'; }) && B[i].size() > A[i].size() && tgt.find(A[i]) != string::npos) { ok = true; break; } else if (tgt.find(A[i]) != string::npos && B[i].find('a') != string::npos) { if (b_len1 + (B[i].size() - 1) > 0) { ok = true; break; } } } cout << (ok ? "Yes" : "No") << endl; } return 0; }