Codeforces Round #604 (Div. 2) -D
题意 : 有 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"; }