欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

D. Time to Run-1301(构造)

程序员文章站 2022-07-12 13:50:54
...

总结

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;
}
相关标签: 构造