Editorial for Compromising Painters


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.

Submitting an official solution before solving the problem yourself is a bannable offence.

Türkçe

Eğer Mecem olmasaydı, Ozi'nin toplam boyayabileceği alan herhangi bir köşeden başlayarak boyayabileceği tüm 2x2'lik alanların toplamına eşit olurdu. Alanların birbirine kesişimleri olmadığına dikkat edin. Bu tür alanların sayısını \(\mathbf{\lfloor \frac{N}{2} \rfloor * \lfloor \frac{M}{2} \rfloor}\) ile bulabiliriz.

Fakat Mecem her adımında bir kareyi boyayarak Ozi'nin boyayabileceği alanlardan bir tanesini engelleyebilir. Önceki hesaplamamızda sadece birbiriyle kesişmeyen boyayabileceği maksimum alanı bulduğumuz için Mecem bir adımı ile 1'den fazla 2x2'lik alanın boyanmasını engelleyemez.

Bu şekilde Ozi, Mecem'in engellemesinden dolayı, toplamda boyayabileceği alanların yarısı kadar (tekse de yarısının üste yuvarlanması kadar) 2x2'lik alan boyayabilir. Bu alanların dışındaki tüm alanları da en sonda Mecem boyar.

English

If Mecem wasn't there, the area that Ozi could paint would be equal to the area that he can paint by painting every 2x2 starting from a corner. See that there is no intersection between the 2x2 areas. The number of 2x2 areas can be found with the formula \(\mathbf{\lfloor \frac{N}{2} \rfloor * \lfloor \frac{M}{2} \rfloor}\).

However, Mecem can block Ozi by painting a 1x1 square each one of her turns. Since there are no intersections on the total number of 2x2 squares Ozi can paint, Mecem cannot block two 2x2 areas at the same time

Because Mecem is blocking half of the areas, Ozi can paint half of the total area he can paint. If the total number of 2x2 is odd, he can also paint the last remaining 2x2 square. All of the other squares can be painted by Mecem in the very end.

Örnek Çözüm / Sample Solution
#include <bits/stdc++.h>

using namespace std;

int main(){
    long long d;
    cin >> d;

    for(long long t=0;t<d;t++){
        long long n,m;
        cin >> n >> m;

        long long a=n/2,b=m/2,c=n%2,d=m%2;

        long long ozi=(a*b+1)/2*4;
        long long mecem=n*m-ozi;

        if(ozi>mecem) cout << "ozi\n";
        else if(ozi<mecem) cout << "mecem\n";
        else cout << "yes\n";
    }

    return 0;
}