제출 #1339129

#제출 시각아이디문제언어결과실행 시간메모리
1339129repmannCrossing (JOI21_crossing)C++20
26 / 100
7093 ms2212 KiB
#include <bits/stdc++.h>
using namespace std;
int N, Q;
string S1, S2, S3, S;
char F['Z' + 1]['Z' + 1];
unordered_set <string> SET;
void DFS(string s)
{
  if(SET.find(s) != SET.end()) return;
  SET.insert(s);
  string x = s;
  for(int i = 0; i < N; i++) x[i] = F[s[i]][S1[i]];
  DFS(x);
  for(int i = 0; i < N; i++) x[i] = F[s[i]][S2[i]];
  DFS(x);
  for(int i = 0; i < N; i++) x[i] = F[s[i]][S3[i]];
  DFS(x);
  return;
}
int main()
{
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  F['J']['J'] = F['O']['I'] = F['I']['O'] = 'J';
  F['O']['O'] = F['J']['I'] = F['I']['J'] = 'O';
  F['I']['I'] = F['J']['O'] = F['O']['J'] = 'I';
  cin >> N >> S1 >> S2 >> S3 >> Q >> S;
  DFS(S1);
  DFS(S2);
  DFS(S3);
  if(SET.find(S) != SET.end()) cout << "Yes\n";
  else cout << "No\n";
  int l, r;
  char c;
  while(Q--)
  {
    cin >> l >> r >> c;
    for(int i = l - 1; i < r; i++) S[i] = c;
    if(SET.find(S) != SET.end()) cout << "Yes\n";
    else cout << "No\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...