#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);
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);
}
}
}
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;
}
}
}
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;
}
bool ok = true;
for (vector<int> ids : per)
{
if (ids.empty())
continue;
int var = 0;
for (int i = 0; i < 3; i++)
if (t[ids[0]] == variants[i][ids[0]])
var = i;
for (int i : ids)
if (variants[var][i] != t[i])
ok = false;
}
for (int i = 0; i < n; i++)
if (forced[i] and s[0][i] != t[i])
ok = false;
if (ok || num_comps > 4)
cout << "Yes\n";
else
cout << "No\n";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |