Codeforces Round #604 (Div. 2) -D

Problem - D - Codeforces

题意 : 有 a 个0,b个1,c个2,d个3,构成一个序列,使得每两个数字之间的差值为1

题解: 就是以四种数字分别为起点,暴力模拟

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int N=4e5+50;
const ll inf=1e18;
const ll mod=998244353;
ll a[N];
pll q[N];
ll vis[N];
signed main(){
   ios::sync_with_stdio(false);
   cin.tie(0);cout.tie(0);
   ll sum=0;
   for(ll i=1;i<=4;i++){ cin>>a[i];sum+=a[i];}
   for(ll i=1;i<=4;i++){
      if(!a[i]) continue;
      vector<ll> temp(5,0);
      vector<ll> pt;
      for(ll j=1;j<=4;j++) temp[j]=a[j];
      ll now=i;
      while(1){
         pt.push_back(now);
         temp[now]--;
         if(now>=2&&temp[now-1]) now--;
         else if(now<=3&&temp[now+1]) now++;
         else break;
      }
      if(pt.size()!=sum) continue;
      if(temp[1]+temp[2]+temp[3]+temp[4]==0){
         cout<<"YES"<<endl;
         for(ll j=0;j<pt.size();j++) cout<<pt[j]-1<<" ";
         cout<<endl; 
         return 0;
      }
   }
   cout<<"NO";
}

 

posted @ 2022-08-05 19:26  HHzp  阅读(16)  评论(0)    收藏  举报