In this HackerEarth Fixed parities, problem-solution Alice and Bob are playing a board game. They have n x n boards and two arrays a and b of length n. The value of each cell in the ith row and jth row is a[i] + b[j]. Alice asks q questions, Bob. In each question, Alice provides two cells A and B. She asks the following questions to Bob:

Are there any paths from A to B that contain the same parity as A and B?


HackerEarth Fixed parities problem solution


HackerEarth Fixed parities problem solution.

#include <bits/stdc++.h>

using namespace std;

const int maxn = 1e5 + 12;

int r[maxn], c[maxn];
int d[2][maxn];
int main(){
    int n, q, r1, c1, r2, c2;
    cin >> n;
    for(int i = 0; i < n; i++)
        cin >> r[i];
    for(int i = 0; i < n; i++)
        cin >> c[i];
    cin >> q;
    for(int i = 1; i < n; i++){
        d[0][i] = d[0][i - 1];
        d[1][i] = d[1][i - 1];
        if(abs(r[i] - r[i - 1]) % 2 == 1)
            d[0][i]++;
        if(abs(c[i] - c[i - 1]) % 2 == 1)
            d[1][i]++;
    }
    while(q--){
        cin >> r1 >> c1 >> r2 >> c2;
        r1--, c1--, r2--, c2--;
        if(abs((r[r1] + c[c1]) - (r[r2] + c[c2])) % 2 == 1){
            cout << "NO\n";
            continue;
        }
        if(abs((d[0][r1] - d[0][r2]) - (d[1][c1] - d[1][c2])) % 2 == 0)
            cout << "YES\n";
        else
            cout << "NO\n";
    }
}