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]<<" "; } } }