D 题 ,CodeForces - 1265D,一开始做的时候就是有0 先放0,没有就放1,以此类推,然后在判断后面的情况,但是不对,想到了特殊情况1 2 0 0这样的,后来又发现只要枚举0 先1先2先3先四种情况,都不行的时候才是不行就可以了,代码:

#include<bits/stdc++.h>
using namespace std;
int vis[200005];
int ans[200005];
int main()
{
    int a,b,c,d;
    cin>>a>>b>>c>>d;
    int aa=a,bb=b,cc=c,dd=d;
    vector<int>p;
    p.clear();
    int flag=0;
    int res=-1;
    while(1)
    {
        //if(a+b+c+d<100000)
        //cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
        if(a+b+c+d==0)break;
        if(res==-1)
        {
            if(a>0)p.push_back(0),a--,res=0;
            else if(b>0)p.push_back(1),b--,res=1;
            else if(c>0)p.push_back(2),c--,res=2;
            else if(d>0)p.push_back(3),d--,res=3;    
        }
        else
        {
            if(a>0)
            {
                if(res==2||res==3)
                {
                    flag=1;
                    break;
                }
                if(res==0)
                {
                    if(b==0)
                    {
                        flag=1;
                        break;
                    }
                    else
                    {
                        p.push_back(1),b--,res=1;
                    }
                }
                else
                {
                    if(res==1)
                    p.push_back(0),a--,res=0;
                }
            }
            else if(b>0)
            {
                if(res==3)
                {
                    flag=1;
                    break;
                }
                if(res==0||res==2)
                {
                    p.push_back(1),b--,res=1;
                }
                else if(res==1)
                {
                    if(a!=0)
                        {
                            p.push_back(0),a--,res=0;
                        }
                else    if(c==0)
                    {
                        
                                flag=1;
                            break;        
                    }
                    else
                    {
                        p.push_back(2),c--,res=2;
                    }
                }
            }
            else if(c>0)
            {
                if(res==0)
                {
                    flag=1;
                    break;
                }
                if(res==1||res==3)
                {
                    p.push_back(2),c--,res=2;
                }
                
                else
                {
                    if(res==2)
                    {
                        if(b!=0)
                            {
                                p.push_back(1),b--,res=1;
                            }
                    else    if(d==0)
                        {
                            
                                flag=1;
                                break;
                            
                        }
                        else
                        {
                            p.push_back(3),d--,res=3;
                        }
                    }
                }
            }
            else if(d>0)
            {
                if(res==0||res==1)
                {
                    flag=1;
                    break;
                }
                if(res==2)
                p.push_back(3),d--,res=3;
                else
                {
                    flag=1;
                    break;
                }
            }
        }
    }
    if(flag==0)
    {
        cout<<"YES"<<endl;
        for(int i=0;i<p.size();i++)
        {
            cout<<p[i]<<" ";
        }
        return 0;
    }
    a=aa;b=bb;c=cc;d=dd;
    p.clear();
    flag=0;
    res=-1;
    while(1)
    {
        //if(a+b+c+d<100000)
        //cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
        if(a+b+c+d==0)break;
        if(res==-1)
        {
            if(b>0)p.push_back(1),b--,res=1;
            else if(a>0)p.push_back(0),a--,res=0;
            else if(c>0)p.push_back(2),c--,res=2;
            else if(d>0)p.push_back(3),d--,res=3;    
        }
        else
        {
            if(a>0)
            {
                if(res==2||res==3)
                {
                    flag=1;
                    break;
                }
                if(res==0)
                {
                    if(b==0)
                    {
                        flag=1;
                        break;
                    }
                    else
                    {
                        p.push_back(1),b--,res=1;
                    }
                }
                else
                {
                    if(res==1)
                    p.push_back(0),a--,res=0;
                }
            }
            else if(b>0)
            {
                if(res==3)
                {
                    flag=1;
                    break;
                }
                if(res==0||res==2)
                {
                    p.push_back(1),b--,res=1;
                }
                else if(res==1)
                {
                    if(a!=0)
                        {
                            p.push_back(0),a--,res=0;
                        }
                else    if(c==0)
                    {
                        
                                flag=1;
                            break;        
                    }
                    else
                    {
                        p.push_back(2),c--,res=2;
                    }
                }
            }
            else if(c>0)
            {
                if(res==0)
                {
                    flag=1;
                    break;
                }
                if(res==1||res==3)
                {
                    p.push_back(2),c--,res=2;
                }
                
                else
                {
                    if(res==2)
                    {
                        if(b!=0)
                            {
                                p.push_back(1),b--,res=1;
                            }
                    else    if(d==0)
                        {
                            
                                flag=1;
                                break;
                            
                        }
                        else
                        {
                            p.push_back(3),d--,res=3;
                        }
                    }
                }
            }
            else if(d>0)
            {
                if(res==0||res==1)
                {
                    flag=1;
                    break;
                }
                if(res==2)
                p.push_back(3),d--,res=3;
                else
                {
                    flag=1;
                    break;
                }
            }
        }
    }
    if(flag==0)
    {
        cout<<"YES"<<endl;
        for(int i=0;i<p.size();i++)
        {
            cout<<p[i]<<" ";
        }
        return 0;
    }
    a=aa;b=bb;c=cc;d=dd;
    p.clear();
    flag=0;
    res=-1;
    while(1)
    {
        //if(a+b+c+d<100000)
        //cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
        if(a+b+c+d==0)break;
        if(res==-1)
        {
            if(c>0)p.push_back(2),c--,res=2;
            else if(a>0)p.push_back(0),a--,res=0;
            else if(b>0)p.push_back(1),b--,res=1;
            else if(d>0)p.push_back(3),d--,res=3;    
        }
        else
        {
            if(a>0)
            {
                if(res==2||res==3)
                {
                    flag=1;
                    break;
                }
                if(res==0)
                {
                    if(b==0)
                    {
                        flag=1;
                        break;
                    }
                    else
                    {
                        p.push_back(1),b--,res=1;
                    }
                }
                else
                {
                    if(res==1)
                    p.push_back(0),a--,res=0;
                }
            }
            else if(b>0)
            {
                if(res==3)
                {
                    flag=1;
                    break;
                }
                if(res==0||res==2)
                {
                    p.push_back(1),b--,res=1;
                }
                else if(res==1)
                {
                    if(a!=0)
                        {
                            p.push_back(0),a--,res=0;
                        }
                else    if(c==0)
                    {
                        
                                flag=1;
                            break;        
                    }
                    else
                    {
                        p.push_back(2),c--,res=2;
                    }
                }
            }
            else if(c>0)
            {
                if(res==0)
                {
                    flag=1;
                    break;
                }
                if(res==1||res==3)
                {
                    p.push_back(2),c--,res=2;
                }
                
                else
                {
                    if(res==2)
                    {
                        if(b!=0)
                            {
                                p.push_back(1),b--,res=1;
                            }
                    else    if(d==0)
                        {
                            
                                flag=1;
                                break;
                            
                        }
                        else
                        {
                            p.push_back(3),d--,res=3;
                        }
                    }
                }
            }
            else if(d>0)
            {
                if(res==0||res==1)
                {
                    flag=1;
                    break;
                }
                if(res==2)
                p.push_back(3),d--,res=3;
                else
                {
                    flag=1;
                    break;
                }
            }
        }
    }
    if(flag==0)
    {
        cout<<"YES"<<endl;
        for(int i=0;i<p.size();i++)
        {
            cout<<p[i]<<" ";
        }
        return 0;
    }
    a=aa;b=bb;c=cc;d=dd;
    p.clear();
    flag=0;
     res=-1;
    while(1)
    {
        //if(a+b+c+d<100000)
        //cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
        if(a+b+c+d==0)break;
        if(res==-1)
        {
            if(d>0)p.push_back(3),d--,res=3;
            else if(a>0)p.push_back(0),a--,res=0;
            else if(b>0)p.push_back(1),b--,res=1;
            else if(c>0)p.push_back(2),c--,res=2;    
        }
        else
        {
            if(a>0)
            {
                if(res==2||res==3)
                {
                    flag=1;
                    break;
                }
                if(res==0)
                {
                    if(b==0)
                    {
                        flag=1;
                        break;
                    }
                    else
                    {
                        p.push_back(1),b--,res=1;
                    }
                }
                else
                {
                    if(res==1)
                    p.push_back(0),a--,res=0;
                }
            }
            else if(b>0)
            {
                if(res==3)
                {
                    flag=1;
                    break;
                }
                if(res==0||res==2)
                {
                    p.push_back(1),b--,res=1;
                }
                else if(res==1)
                {
                    if(a!=0)
                        {
                            p.push_back(0),a--,res=0;
                        }
                else    if(c==0)
                    {
                        
                                flag=1;
                            break;        
                    }
                    else
                    {
                        p.push_back(2),c--,res=2;
                    }
                }
            }
            else if(c>0)
            {
                if(res==0)
                {
                    flag=1;
                    break;
                }
                if(res==1||res==3)
                {
                    p.push_back(2),c--,res=2;
                }
                
                else
                {
                    if(res==2)
                    {
                        if(b!=0)
                            {
                                p.push_back(1),b--,res=1;
                            }
                    else    if(d==0)
                        {
                            
                                flag=1;
                                break;
                            
                        }
                        else
                        {
                            p.push_back(3),d--,res=3;
                        }
                    }
                }
            }
            else if(d>0)
            {
                if(res==0||res==1)
                {
                    flag=1;
                    break;
                }
                if(res==2)
                p.push_back(3),d--,res=3;
                else
                {
                    flag=1;
                    break;
                }
            }
        }
    }
    if(flag==1)cout<<"NO"<<endl;
    else 
    {
        cout<<"YES"<<endl;
        for(int i=0;i<p.size();i++)
        {
            cout<<p[i]<<" ";
        }
    }
}
View Code

 

posted on 2021-02-26 12:09  小灰灰的父亲  阅读(42)  评论(0编辑  收藏  举报