[AGC029D] Grid game题解
这题很显然可以用贪心来解。
由于先手不动一定会让局数更少,所以先手要能动就动。
而后手一定是希望他的石子可以撞到一个障碍物上,这样先手就无法移动了,后手就可以让局数更少。
因为先手一定会能动就动,所以后手只能走到横坐标大于纵坐标的障碍物上方。那就很简单了,我们只需要统计符合特点的障碍物即可。
code:
bool mp[200001][200001];//存图 pair<long long,long long> a[555555];//一个结构体,有两个元素,一个叫first,一个叫second long long col[555555]={0,1};//第i行有几个可到达的列 long long ret; int main() { int n,m,k; cin>>n>>m>>k; ret=n; for(int i=1;i<=k;i++) { cin>>a[i].first>>a[i].second;//障碍物的位置 mp[a[i].first][a[i].second]=true; } long long sum=1; for(int i=2;i<=n;i++) { if(!mp[i][sum+1]&&sum<m)//高木最优策略 { sum++; } col[i]=sum; } for(int i=1;i<=k;i++) { if(col[a[i].first]>=a[i].second) { ret=min(ret,a[i].first-1);//统计答案 } } cout<<ret; return 0; }