제출 #1125286

#제출 시각아이디문제언어결과실행 시간메모리
1125286IcelastL-triominoes (CEOI21_ltriominoes)C++20
0 / 100
168 ms145984 KiB
#include <iostream>
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn = 5*1e5+5, INF = 4e18+9;
void solve(){
    ll W, L, k;
    cin >> W >> L >> k;
    if((W*L - k)%3 != 0){
        cout << "NO";
        return;
    }
    if(k == 0){
        if(W > 1 && L > 1 && W*L%6 == 0){
            cout << "YES";
        }else{
            cout << "NO";
        }
        return;
    }
    struct point{
        ll x, y;
    };
    vector<point> a(k+1);
    for(int i = 1; i <= k; i++){
        cin >> a[i].x >> a[i].y;
    }
    if(W > L){
        swap(W, L);
        for(int i = 1; i <= k; i++){
            swap(a[i].x, a[i].y);
        }
    }
    a.push_back({0, INF});
    a.push_back({0, INF});
    if(W == 2){
        ll cur = 0;
        sort(a.begin()+1, a.end(), [&](point a, point b){return a.y < b.y;});
        int i = 1;
        while(i <= k){
            if(a[i].y == a[i+1].y){
                if((a[i].y-cur-1)%3 == 0){
                    cur = a[i].y;
                    i++;
                }else{
                    cout << "NO";
                    return;
                }
            }else{
                if(cur >= a[i].y){
                    cout << "NO";
                    return;
                }
                if((a[i].y-1-cur-1)%3 == 0){
                    cur = a[i].y;
                }else if((a[i].y-cur-1)%3 == 0){
                    cur = a[i].y+1;
                }else{
                    cout << "NO";
                    return;
                }
            }
            i++;
        }
        cout << "YES";
        return;
    }
    cout << "YES";
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    //freopen("TRIOMINO.inp", "r", stdin);
    //freopen("TRIOMINO.out", "w", stdout);
    int t;
    cin >> t;
    while(t--){
        solve();
        cout << "\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...