模拟——cf1301D

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
 
int n,m,k,tot;
 
vector<char>v[10005];//先把连续动作放在v里 
struct Step{
    string s;
    int loop;
    Step(){}
};
vector<Step> ans;
 
void solve(){
    int sum=0;
    for(int i=1;i<=tot;i++){
        if(v[i].size()==0)continue;
        if(v[i].size() && v[i][0]=='R'){//RRRR 
            int k=v[i].size();
            Step step;
            step.s="R";
            step.loop=k;
            ans.push_back(step);
            continue;
        }
        if(v[i].size() && v[i][0]=='L'){//LLLL
            int k=v[i].size();
            Step step;
            step.s="L";
            step.loop=k;
            ans.push_back(step);
            continue;
        }
        if(v[i].size() && v[i][0]=='U'){//UUUU
            int k=v[i].size();
            Step step;
            step.s="U";
            step.loop=k;
            ans.push_back(step);
            continue;
        }
        if(v[i].size() && v[i].size()>1 && v[i][0]=='D'){//DRU
            int k=v[i].size();
            if(k/3>0){
                Step step;
                step.s="DRU";
                step.loop=k/3;
                ans.push_back(step);
            }
            if(k%3){
                Step step;
                if(k%3==1){
                    Step step;
                    step.s="D";
                    step.loop=1;
                    ans.push_back(step);
                } 
                else if(k%3==2){
                    Step step;
                    step.s="DR";
                    step.loop=1;
                    ans.push_back(step);
                }
            }
            continue;
        }
        if(v[i].size()==1 && v[i][0]=='D'){//D
            Step step;
            step.s="D";
            step.loop=1;
            ans.push_back(step);
            continue;
        }
    }
    cout<<ans.size()<<'\n';
    for(int i=0;i<ans.size();i++)
        cout<<ans[i].loop<<" "<<ans[i].s<<'\n';
    
}
 
int main(){
    int t=1;
    while(t--){
        cin>>n>>m>>k;
        int sum=n*m*4-2*n-2*m;
        if(sum<k){puts("NO");continue;}
        
        puts("YES");
        tot=0;
        if(m>1)++tot;
        for(int i=1;i<m;i++){
            v[tot].push_back('R');
            k--;
            if(k==0)break;        
        }
        if(k==0){solve();continue;}
        
        if(m>1)++tot;
        for(int i=1;i<m;i++){
            v[tot].push_back('L');
            k--;
            if(k==0)break;        
        }        
        if(k==0){solve();continue;}
        
        for(int i=1;i<n;i++){
            if(m>1)++tot;
            for(int j=1;j<m;j++){
                v[tot].push_back('D');
                k--;
                if(k==0)break;
                v[tot].push_back('R');
                k--;
                if(k==0)break;
                v[tot].push_back('L');
                k--;
                if(k==0)break;
            }
            if(k==0)break;
            
            ++tot;
            v[tot].push_back('D');
            k--;
            if(k==0)break;
            
            ++tot;
            for(int j=1;j<m;j++){
                v[tot].push_back('L');
                k--;
                if(k==0)break;    
            }
            if(k==0)break;
        }
        if(k==0){solve();continue;}
        
        ++tot;
        for(int i=1;i<n;i++){
            v[tot].push_back('U');
            k--;
            if(k==0)break;
        }
        if(k==0){solve();continue;}
        
        for(int i=1;i<=tot;i++)v[i].clear();    
    }
}

猜你喜欢

转载自www.cnblogs.com/zsben991126/p/12310156.html