CF地址:https://codeforces.com/problemset/problem/55/C
Cf访问慢的可以去洛谷:https://www.luogu.com.cn/problem/CF55C
题意:
Volodya和Vlad在玩下面的这个游戏。这里有k个派,分布在n×m的板子上。每一回合Volodya移动一个派到这个派边界的格子,如果这个派在板子的边界,Volodya就可以把它移出板,得到这个派并且获胜。在Volodya移动之后,Vlad在板的边界放一个长度为1的挡板,然后Volodya就不能把派从挡住的边移出。 请问,Volodya会赢得这次比赛吗?(我们假设两个玩家都无比聪明)
解析:
很容易想到,肯定是让某个棋子往最近的边走,如果下一步被封,就往角落走,因为角落含有两个出口,只要在两个出口封掉之前到达,一定能赢。
所以Vlad要先把四个角各封上一条边,然后再封掉派离得最近的一边。一共5步。
所以只要Volody能在5步以内走到边界,那么肯定有一个出口在封掉之前能出去。
#include<bits/stdc++.h> #include<cmath> #include<map> #define pb push_back using namespace std; typedef long long ll; const int maxn=2e5+10; int mp[105][105]; int n,m,k; int main() { int x,y; cin>>n>>m>>k; int ok = 0; for(int i=1;i<=k;i++) { cin>>x>>y; if(x<=5||y<=5||(n-x)<=4||(m-y)<=4) ok=1; } if(ok) cout<<"YES"<<endl; else cout<<"NO"<<endl; }