제출 #474064

#제출 시각아이디문제언어결과실행 시간메모리
474064blueCrossing (JOI21_crossing)C++17
26 / 100
7069 ms10220 KiB
#include <iostream>
#include <vector>
#include <string>
using namespace std;

int N;

int op(int a, int b)
{
    if(a == b) return a;
    else return 0+1+2 - a - b;
}

vector<int> op(vector<int> a, vector<int> b)
{
    vector<int> r(N);
    for(int i = 0; i < N; i++) r[i] = op(a[i], b[i]);
    return r;
}

vector<int> to_num(string s)
{
    vector<int> r(N);
    for(int i = 0; i < N; i++)
    {
        if(s[i] == 'J') r[i] = 0;
        else if(s[i] == 'O') r[i] = 1;
        else if(s[i] == 'I') r[i] = 2;
    }
    return r;
}

vector<int> S[9];

void brute_check(vector<int> G)
{
    for(int i = 0; i < 9; i++) if(S[i] == G)
    {
        cout << "Yes\n";
        return;
    }
    cout << "No\n";
}

int main()
{
    cin >> N;


    for(int i = 0; i < 3; i++)
    {
        string T;
        cin >> T;
        S[i] = to_num(T);
    }

    S[3] = op(S[1], S[2]);
    S[4] = op(S[0], S[2]);
    S[5] = op(S[0], S[1]);

    S[6] = op(S[0], S[3]);
    S[7] = op(S[1], S[4]);
    S[8] = op(S[2], S[5]);


    // for(int z = 0; z < 9; z++)
    // {
    //     for(int i = 0; i < N; i++) cerr << S[z][i];
    //     cerr << '\n';
    // }
    // cerr << '\n';

    int Q;
    cin >> Q;

    string T;
    cin >> T;

    brute_check(to_num(T));
    // for(int i = 0; i < N; i++) cerr << to_num(T)[i];
    // cerr << '\n';

    for(int q = 1; q <= Q; q++)
    {
        int L, R;
        char C;
        cin >> L >> R >> C;
        for(int i = L-1; i <= R-1; i++) T[i] = C;

        brute_check(to_num(T));
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...