D. Time to Run-1301(构造)

总结

在这里插入图片描述
构造一个最大路线数量,然后模拟,注意宽跟列为1的情况

void f1(int n,int m,int k)
{
    vector<pair<int,char> >vec;
    for(int i=0; i<m-1&&k; i++)
    {
        if(k)
        vec.pb( {1,'R'} ),k--;
        if(k&&n-1)
            vec.pb( {min(k,n-1),'D'} ),k-=min(k,n-1);
        if(k&&n-1)
            vec.pb( {min(k,n-1),'U'} ),k-=min(k,n-1);
    }
    if(k&&m-1)
        vec.pb( {min(k,m-1),'L'} ),k-=min(k,m-1);


    for(int i=1; i<n&&k; i++)
    {
        if(k)
            vec.pb( {1,'D'} ),k--;
        if(k&&m-1)
            vec.pb( {min(k,m-1), 'R'} ),k-=min(k,m-1);
        if(k&&m-1)
            vec.pb( {min(k,m-1), 'L'} ),k-=min(k,m-1);
    }
    if(k)
        vec.pb( {k,'U'} );

    cout<<"YES"<<endl;
    cout<<vec.size()<<endl;
    for(int i=0; i<vec.size(); i++)
    {
        cout<<vec[i].F<<" "<<vec[i].S<<endl;
    }
}
signed main()
{
    IOS;
    //file();
    int n,m,k;
    cin>>n>>m>>k;
    if(4*n*m-2*n-2*m<k)
        cout<<"NO"<<endl;
    else
        f1(n,m,k);
    return 0;
}
发布了130 篇原创文章 · 获赞 5 · 访问量 4983

猜你喜欢

转载自blog.csdn.net/weixin_44224825/article/details/104342822
今日推荐