C. Pie or die
题意:
两个人博弈
有一个用木棍拼成 N*M的方格
开始的时候 有 几个馅饼 在块中
小A每次可以将馅饼上下左右 移动一格asfcus
小B每次可以移除一条木棍
如果小A将馅饼移出 方格小A获胜,否则小B获胜
其中:
小A先操作
小A不将馅饼 从没有木棍的地方移出去
问题分析:
如果小A无法 移出 方格外 就表明下一步 小B一定可以 将边界堵上
但是我看方格的 四个角,他和外界 有两条变相邻,也就是说,如果小A想要
获胜(除了馅饼本身就在靠近边界的小方块里)就必须 移动到 四个角落才行
对于小B来说 如果防止 小A获胜 ,就必须 在将馅饼移动到 四个角落之前 将四个角落的 两条边界各自移除一条
换句话说 就是在小A走第五步之前 将四调边界 补好,这样当小A移动到 边界的时候
可以直接将一角的 另一边界补上就行了
这是 小A和小B最优的 操作 在这个前提下
只要馅饼的任意坐标离边界 小于等于5(等于5移动4步就行)
这样A 获胜
否则 边界封上 B获胜
AC代码:
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<sstream>
#include<algorithm>
using namespace std;
#define ll long long
#define mem(a,b) memset((a),(b),sizeof(a));
#define lowbit(a) ((a)&-(a))
const ll inf=0x3f3f3f3f;//1061109567,2*未超int,allinf=mem(a,0x3f,sizeof(a));
const int N=1e5+10,M=1e6+10;
int main(){
// #define io
#ifdef io
freopen("in.txt","r",stdin);
#endif
cin.tie(0);
int n,m,k;
cin>>n>>m>>k;
int flag= 0;
for(int i=0;i<k;i++){
int x,y;
cin>>x>>y;
if(x<=5||y<=5||x>n-5||y>m-5){
flag=1;
}
}
if(flag)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
return 0;
}