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 |
我也c++AC,g++WA。神马问题??我用的号称地球上最快的SizeBalancedTree,居然1360msrt 代码: /* ID: talenth1 PROG: p2418 LANG: C++ */ #include<cstdio> #include<iostream> #include<cstdlib> #include<cstring> #include<cmath> #define maxl 35 using namespace std; struct Node{ int num,s; char name[maxl]; Node *left,*right; Node(); }; Node ::Node() { memset(name,0,sizeof(name)); s=num=0; left=right=NULL; } int n; Node *root; void LeftRotate(Node * &t) { Node *k=t->left; t->right=k->left; k->left=t; k->s=t->s; t->s=t->left->s+t->right->s+1; t=k; } void RightRotate(Node * &t) { Node *k=t->right; t->left=k->right; k->right=t; k->s=t->s; t->s=t->left->s+t->right->s+1; t=k; } void Maintain(Node *t,bool flag) { if(!flag){ if(t->left==NULL)return; if(t->left->left==NULL)return; if(t->left->left->s > t->right->s) RightRotate(t); else if(t->left->right->s > t->right->s){ LeftRotate(t->left); RightRotate(t); } else return; } else { if(t->right==NULL)return; if(t->right->right==NULL)return; if(t->right->right->s > t->left->s) LeftRotate(t); else if(t->right->left->s > t->left->s){ RightRotate(t->right); LeftRotate(t); } else return; } Maintain(t->left,false); Maintain(t->right,true); Maintain(t,false); Maintain(t,true); } void ins(char *str) { Node *x=root,*y=NULL; while(x!=NULL){ y=x; if(strcmp(str,x->name)==0){ x->num++; return; } x->s++; if(strcmp(str,x->name)<0) x=x->left; else x=x->right; } Node *p=new(Node); p->s=1; p->num=1; strcpy(p->name,str); if(y==NULL)root=p; else if(strcmp(str,y->name)<0){ y->left=p; Maintain(y,false); } else { y->right=p; Maintain(y,true); } } void destory(Node*t) { if(t->left!=NULL)destory(t->left); if(t->right!=NULL)destory(t->right); delete(t); } void goaround(Node *t) { if(t->left!=NULL)goaround(t->left); printf("%s %.4lf\n",t->name,(t->num)*100.0/n); if(t->right!=NULL)goaround(t->right); } void datain() { char tmp[30]; n=0; while(gets(tmp)!=NULL){ ins(tmp); n++; } } void work() { goaround(root); destory(root); } int main() { datain(); work(); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator