| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
忘了空格 搞了一次PE 真是不该#include <iostream>
#include <string>
using namespace std;
const int mx = -1;
int depth[26];
void init(){
for(int i = 0; i < 26; i++) depth[i] = mx;
}
struct node{
int val;
node *left, *right;
};
int lgIdx(int l, int u){
int m=-1, v=mx;
for(int i = l; i <= u; i++){
if(depth[i] > v){
m=i;
v=depth[i];
}
}
return m;
}
void buildTree(node *root, int l, int u, int m){
root->val = m;
int lv, rv;
if((lv = lgIdx(l, m-1)) != -1){
root->left = new node();
buildTree(root->left, l, m-1, lv);
}
else{
root->left = NULL;
}
if((rv = lgIdx(m+1, u)) != -1){
root->right = new node();
buildTree(root->right, m+1, u, rv);
}
else{
root->right = NULL;
}
}
void visitTree(node *root){
if(root == NULL) return;
cout << (char)(root->val+'A');
visitTree(root->left);
visitTree(root->right);
}
int main() {
while(1){
bool toBreak = 0;
init();
int dpth = 0;
while(1){
string s;
getline(cin, s);
if(s[0] < 'A' || s[0] > 'Z'){
if(s[0]=='$') toBreak=1;
break;
}
else{
int l = s.length();
for(int i = 0; i < l; i++){
depth[s[i]-'A'] = dpth;
}
}
dpth++;
}
node *root = new node();
buildTree(root, 0, 25, lgIdx(0,25));
visitTree(root);
cout << endl;
if(toBreak) break;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator