比赛链接:https://www.jisuanke.com/contest/823
A. 图像压缩四叉树
按题意构造一下树,然后按2,3,0,1的顺序遍历孩子就可以了。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 const int maxn=1e4+5; 6 int n,order[4]={2,3,0,1}; 7 char a[maxn],ans[maxn]; 8 int idx; 9 struct node{ 10 char c; 11 node *son[4]; 12 node(char c){ 13 this->c=c; 14 for(int i=0;i<4;i++) 15 son[i]=NULL; 16 } 17 }; 18 void build(node *s){ 19 if(s->c!='x')return; 20 for(int i=0;i<4;i++){ 21 s->son[i]=new node(a[++idx]); 22 if(s->son[i]->c=='x'){ 23 build(s->son[i]); 24 } 25 } 26 } 27 void read(node *s){ 28 if(s->c!='x')return; 29 for(int i=0;i<4;i++){ 30 ans[++idx]=s->son[order[i]]->c; 31 if(s->son[order[i]]) 32 read(s->son[order[i]]); 33 } 34 } 35 int main(){ 36 //freopen("e:\in.txt","r",stdin); 37 int t,kase=0; 38 scanf("%d",&t); 39 while(t--){ 40 scanf("%s",a); 41 int len=strlen(a); 42 node *root=new node(a[0]); 43 ans[0]=a[0]; 44 idx=0; 45 build(root); 46 idx=0; 47 read(root); 48 ans[len]='