제출 #600369

#제출 시각아이디문제언어결과실행 시간메모리
600369PlurmCrossing (JOI21_crossing)C++11
26 / 100
7037 ms6032 KiB
#include <bits/stdc++.h>
using namespace std;

string sa, sb, sc;

string cross(string x, string y){
  if(x.empty()) return y;
  else if(y.empty()) return x;
  int n = x.size();
  string ret;
  for(int i = 0; i < n; i++){
    if(x[i] == y[i]) ret.push_back(x[i]);
    else ret.push_back(x[i] ^ y[i] ^ 'J' ^ 'O' ^ 'I');
  }
  return ret;
}

set<string> rec(int left, string cur = ""){
  if(left == 0) return {cur};
  set<string> s = {cur}, t;
  t = rec(left-1, cross(cur, sa));
  s.insert(t.begin(), t.end());
  t = rec(left-1, cross(cur, sb));
  s.insert(t.begin(), t.end());
  t = rec(left-1, cross(cur, sc));
  s.insert(t.begin(), t.end());
  return s;
}

int main(){
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n >> sa >> sb >> sc;
  set<string> pool = rec(4);
  int q;
  cin >> q;
  string t;
  cin >> t;
  cout << (pool.count(t) ? "Yes" : "No") << endl;
  while(q--){
    int l, r;
    char c;
    cin >> l >> r >> c;
    for(int i = l; i <= r; i++){
      t[i-1] = c;
    }
    cout << (pool.count(t) ? "Yes" : "No") << endl;
  }
  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...