#include <bits/stdc++.h>
using namespace std;
#define int long long
int32_t main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int W,H,K;
cin >> W >> H >> K;
vector<pair<int,int>> poss;
{
for(int mask1=0;mask1<(1<<W);mask1++){
for(int mask2=0;mask2<(1<<W);mask2++){
bool extra = false;
bool doublesause = false;
bool works = true;
for(int i=0;i<W;i++){
if(doublesause){
doublesause = false;
if(!(mask1&(1<<i)) or !(mask2&(1<<i)))works=false;
} else if(extra){
extra=false;
if(!(mask1&(1<<i)) and !(mask2&(1<<i)))works=false;
if((mask1&(1<<i)) and (mask2&(1<<i)))doublesause=true;
} else {
if((mask1&(1<<i)) and (mask2&(1<<i)))extra=true;
else if((mask1&(1<<i)) or (mask2&(1<<i)))doublesause=true;
}
}
if(extra or doublesause)works=false;
if(works)poss.emplace_back(mask1,mask2);
}
}
}
vector<pair<int,int>> missing(K);
for(auto&[a,b]:missing)cin>>b>>a;
sort(missing.begin(),missing.end());
auto combine = [&](vector<vector<bool>> &DP1,vector<vector<bool>> &DP2){
if(DP1.empty())return DP2;
vector DP((1<<W),vector<bool>(1<<W));
for(int mask1=0;mask1<(1<<W);mask1++){
for(int mask2=0;mask2<(1<<W);mask2++){
for(auto&[mask3,mask4]:poss){
if(DP1[mask1][mask3] and DP2[mask4][mask2]){
DP[mask1][mask2]=true;
break;
}
}
}
}
return DP;
};
vector DPbase((1<<W),vector<bool>(1<<W));
for(int mask=0;mask<(1<<W);mask++)DPbase[mask][mask^((1<<W)-1)]=true;
function<vector<vector<bool>>(int)> solve = [&](int a){
if(a==1)return DPbase;
auto curr = solve(a>>1);
curr = combine(curr,curr);
if(a&1)curr=combine(curr,DPbase);
return curr;
};
// auto ans = solve(H);
// ST
auto ans = DPbase;
for(int i=1;i<=H;i++){
if(ans[0][0]){
if(H%i == 0)cout << "YES\n";
else cout << "NO\n";
break;
}
ans = combine(ans,DPbase);
}
// ST
// if(ans[0][0])cout<<"YES\n";
// else cout << "NO\n";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |