제출 #1239221

#제출 시각아이디문제언어결과실행 시간메모리
1239221farukCrossing (JOI21_crossing)C++20
0 / 100
58 ms840 KiB
#include <bits/stdc++.h> #define all(a) a.begin(), a.end() using namespace std; typedef long long ll; typedef pair<int, int> pii; string cross(string &a, string &b) { string c = ""; for (int i = 0; i < a.size(); i++) { if (a[i] == b[i]) c += a[i]; else c += ('J' + 'O' + 'I' - a[i] - b[i]); } return c; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); set<string> strt = {"IO", "OO"}; int n; cin >> n; vector<string> s(3); for (int i = 0; i < 3; i++) cin >> s[i]; vector<bool> forced(n, true); for (int i = 0; i < n; i++) { if (s[0][i] != s[1][i] || s[0][i] != s[2][i] || s[1][i] != s[2][i]) forced[i] = false; } vector<int> cmp(n); iota(all(cmp), 0); vector<vector<int>> per(4); /* 0, 1 and 2 are diff 1, 0 and 2 are diff 2, 0 and 1 are diff 3 all are diff */ for (int i = 0; i < n; i++) { if (forced[i]) continue; set<char> s1; for (int k = 0; k < 3; k++) s1.insert(s[k][i]); if (s1.size() == 3) per[3].push_back(i), cmp[i] = 3; else { for (int j = 0; j < 3; j++) { bool ok = true; for (int k = 0; k < 3; k++) if (j != k and s[j][i] == s[k][i]) ok = false; if (ok) per[j].push_back(i), cmp[i] = j; } } } int num_comps = 0; vector<vector<char>> variants(3, vector<char>(n)); for (vector<int> ids : per) { if (!ids.empty()) num_comps++; for (int i : ids) { variants[0][i] = s[0][i], variants[1][i] = s[1][i], variants[2][i] = s[2][i]; for (int j = 0; j < 3; j++) { bool can_change = false; for (int k = 0; k < 3; k++) if (j != k and variants[j][i] == variants[k][i]) can_change = true; if (!can_change) continue; char me = 'J' + 'O' + 'I'; for (int k = 0; k < 3; k++) if (j != k) me -= variants[k][i]; variants[j][i] = me; break; } } } set<string> poss; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { for (int k = 0; k < 3; k++) { for (int l = 0; l < 3; l++) { string I = ""; for (int t = 0; t < n; t++) { if (cmp[t] == 0) I += variants[i][t]; if (cmp[t] == 1) I += variants[j][t]; if (cmp[t] == 2) I += variants[k][t]; if (cmp[t] == 3) I += variants[l][t]; } poss.insert(I); } } } } string t; int q; cin >> q; cin >> t; for (int Q = 0; Q <= q; Q++) { if (Q > 0) { int l, r; cin >> l >> r; char c; cin >> c; for (; l <= r; l++) t[l - 1] = c; } if (poss.count(t)) cout << "Yes\n"; else cout << "No\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...