제출 #1221865

#제출 시각아이디문제언어결과실행 시간메모리
1221865trideserCrossing (JOI21_crossing)C++20
26 / 100
7091 ms2212 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
	int size;
	cin >> size;
	string a;
	string b;
	string c;
	cin >> a;
	cin >> b;
	cin >> c;
	unordered_set<string> st;
	st.insert(a);
	st.insert(b);
	st.insert(c);

	queue<string> q;
	q.push(a);
	q.push(b);
	q.push(c);
	while(!q.empty()) {
		string s = q.front();
		q.pop();
		for(auto it = st.begin(); it != st.end(); it++) {
			string t = *it;
			string u = a;
			for(int i = 0; i < a.size(); i++) {
				if(s[i] == t[i])
					u[i] = s[i];
				else {
					if(s[i] != 'J' && t[i] != 'J')
						u[i] = 'J';
					if(s[i] != 'O' && t[i] != 'O')
						u[i] = 'O';
					if(s[i] != 'I' && t[i] != 'I')
						u[i] = 'I';
				}
			}
			if(st.find(u) == st.end()) {
				st.insert(u);
				q.push(u);
	//			cout << st.size() << '\n';
			}
		}
	}
	
	int Q;
	cin >> Q;
	string query;
	cin >> query;
	if(st.find(query) == st.end()) {
		cout << "No\n";
	}
	else {
		cout << "Yes\n";
	}
	for(int i = 0; i < Q; i++) {
		int x, y;
		char z;
		cin >> x;
		cin >> y;
		cin >> z;
		for(int j = x - 1; j <= y - 1; j++) {
			query[j] = z;
		}
		cout << (st.find(query) == st.end() ? "No" : "Yes") << "\n";
	}

	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...