这题的数据量应该很大,之前char ans[10000];
char str[10000];
Node* stack[1000]; //10000 AC
Node* queue[1000]; //10000 AC
一直runtime error!
AC后用时:0.900
相关参考:动态STL http://blog.youkuaiyun.com/ultimater/article/details/8015040 用时:0.08
静态 http://blog.youkuaiyun.com/u011345461/article/details/10063707 用时:0.84
#include<stdio.h>
#include<ctype.h>
#include<string.h>
struct Node
{
Node *left,*right;
char ch;
Node(char c, Node* l = 0, Node* r = 0)
{
ch = c;
left = l;
right = r;
}
};
char ans[10000];
char str[10000];
Node* stack[10000];
Node* queue[10000];
void cleanup(Node* h);
int main()
{
//
freopen("input.txt","r",stdin);
int numtest;
scanf("%d", &numtest);
Node* first,* sec;
for(int i = 0; i < numtest; i++)
{
scanf("%s", str);
int top = 0;
for(int j = 0; j < strlen(str); j++)
{
if(islower(str[j]) )
stack[++top] = new Node(str[j]);
else if(isupper(str[j]) )
{
first = stack[top--];
sec = stack[top--];
stack[++top] = new Node(str[j], sec, first);
}
}
int f = 0;
int r = 1;
memset(queue, 0, sizeof(queue) );
queue[f] = stack[1];
int num = 0;
while(f < r)
{
Node* temp = queue[f++];
if(temp->left) queue[r++] = temp->left;
if(temp->right) queue[r++] = temp->right;
ans[num++] = temp->ch;
}
for(int k = num -1; k >= 0; k--)
{
putchar(ans[k]);
}
putchar('\n');
cleanup(stack[1]);
}
}
void cleanup(Node* h)
{
if(!h) return;
cleanup(h->left);
cleanup(h->right);
delete h;
}