Submission #1125482

#TimeUsernameProblemLanguageResultExecution timeMemory
1125482BananabreadL-triominoes (CEOI21_ltriominoes)C++20
0 / 100
395 ms589824 KiB
#include<bits/stdc++.h>
#define ll long long
#define ntr "\n"
#define mod (ll)(1e9+7)
#define taskname "MOTOR"
#define frep freopen(taskname".inp","r",stdin); freopen(taskname".out","w",stdout);
using namespace std;
ll dp[1<<13][13][1001];
ll arr[14][1002];
ll n,m,k;
void solve(){
    cin>>m>>n>>k;
    if((n*m-k)%3!=0){
        cout<<"NO\n";
        return ;
    }
    if(k==0){
        if(n%3==0&&m%2==0){
            cout<<"YES\n";
            return ;
        }
        if(n%2==0&&m%3==0){
            cout<<"YES\n";
            return ;
        }
        cout<<"NO\n";
        return;
    }
    else{
        for(int i=1;i<=k;i++){
            ll x,y;
            cin>>x>>y;
            x--;
            arr[y][x]=1;
        }
        dp[0][0][1]=1;
        for(int i=1;i<=n;i++){
            for(int j=0;j<m;j++){
                for(int mask=0;mask<(1<<m);mask++){
                    if(!dp[mask][j][i]) continue;
                    if(arr[i][j]||(mask&(1<<j))){
                        dp[mask^(arr[i+1][j]<<j)][j+1][i]=1;
                        continue;
                    }
                    if(!arr[i][j+1]&&!arr[i+1][j]){
                        dp[mask^(1<<j)^(arr[i+1][j+1]<<(j+1))][j+2][i]=1;
                    }
                    if(!arr[i][j+1]&&!arr[i+1][j+1]){
                        dp[mask^(1<<j)^(arr[i+1][j]<<(j+1))][j+2][i]=1;
                    }
                    if(!arr[i][j+1]&&!arr[i+1][j+1]){
                        dp[mask^(arr[i+1][j]<<j)^(1<<(j+1))][j+2][i]=1;
                    }
                    if(arr[i][j+1]){
                        if(!arr[i+1][j]&&!arr[i+1][j+1]){
                            dp[mask^(1<<j)^(1<<(j+1))][j+2][i]=1;
                        }
                    }
                    if(j){
                        if(!arr[i+1][j-1]&&!arr[i+1][j]){
                            dp[mask^(1<<j)^(1<<(j-1))][j+1][i]=1;
                        }
                    }
                }
            }
            for(int mask=0;mask<(1<<m);mask++){
                dp[mask][0][i+1]=dp[mask][m][i];
            }
        }
        if(dp[0][0][n+1]){
            cout<<"YES\n";
        }
        else{
            cout<<"NO\n";
        }
        memset(dp,0,sizeof(dp));
        memset(arr,0,sizeof(arr));
    }
}
int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    //frep;
    ll t=1;
    //cin>>t;
    while(t--) solve();
}
#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...