[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;
}

 

posted @ 2024-12-14 22:13  _Acheron  阅读(4)  评论(0编辑  收藏  举报