提交时间:2024-09-15 14:56:39
运行 ID: 32597
#include<bits/stdc++.h> using namespace std; int n,b[200010],atot; struct node{ int num; int cnt; int id; }a[200010]; int togettimes(int num){ int cnt1=0,cnt2=1,ans=0,res=num; while(res){ res>>=1; cnt1++; }while(num){ if(num&1){ans+=cnt1-cnt2;} num>>=1; ans++; cnt2++; }return ans; }void togetans(int num){ int cnt=0,cnt2=1,ans=0,cnt3=0,res=num; //cout<<"1"; while(res){ res>>=1; cnt++; }while(num){ cout<<"c"; if(num&1){ans+=cnt-cnt2;cnt3++;cout<<'c';} num>>=1; cnt2++; cout<<'+'; }for(int i=2;i<=cnt3;i++){ cout<<'+'; }for(int i=1;i<=ans;i++){ cout<<"1+"; } }bool cmp(node a,node b){ return a.id<b.id; }int main(){ //freopen("polaris.in","r",stdin); //freopen("polaris.out","w",stdout); cin>>n; for(int i=1;i<=n;i++){ cin>>b[i]; }int last=0,sum=0; for(int i=n;i>=1;i--){ if(b[i]!=last){ last=b[i]; a[++atot].num=b[i]+sum; sum+=togettimes(a[atot].num); //a[++atot].num=b[i]+sum; a[atot].id=i; }a[atot].cnt++; }sort(a+1,a+atot+1,cmp); for(int i=1;i<=atot;i++){ //cout<<a[i].num<<' '; cout<<'1'; togetans(a[i].num); for(int i=2;i<=a[i].cnt;i++){ cout<<'c'; } } }