#include <iostream>
using namespace std;
int n,ans[10],t[10];string s;
void pick_number_from(string s){
int p=0;
for(int i=0;i<s.size();i++)
if(s[i]>='0'&&s[i]<='9')
t[p++]=s[i]-'0';
}
void print_ans(){
cout<<(s[0]=='A'?"B":"A");
cout<<"=(";
for(int i=0;i<n;i++)
printf("%s%d",i?",":"",ans[i]);
cout<<")";
}
void encode(){
for(int i=0;i<n;i++){
int sum=0;
for(int j=0;j<i;j++)
if(t[j]<t[i]) sum++;
ans[i]=sum;
}
}
void decode(){
int min_num=0;
for(int i=0;i<n;i++)
for(int j=n-1;j>=0;j--) //从后向前第一个为0的数一定是该数列中最小的
if(t[j]==0){
ans[j]=min_num++;
for(int k=j+1;k<n;k++) t[k]--;
t[j]=-1;break; //抹去该数,迭代余下数列
}
}
int main(){
cin>>n>>s;
pick_number_from(s);
s[0]=='A'?encode():decode();
print_ans();
return 0;
}
4329: 编码问题
最新推荐文章于 2024-04-25 15:42:46 发布