UVa 12166 - Equilibrium Mobile
2014-11-25 21:31
225 查看
dfs类的题,感觉应该还能再优化,时间用了0.9s+,挺长的。。
#include<iostream> #include<algorithm> #include<string> #include<sstream> #include<vector> using namespace std; struct Node{ string s; unsigned long long t; Node *left,*right; Node():t(0),left(NULL),right(NULL){} }; Node *root; int cnt1,cnt2,cnt; vector<unsigned long long>heavy; Node* newnode(){ return new Node; } void build(Node* a,int n){ int i,k=0; if(a->s.find("[")==string::npos){ stringstream ss(a->s); ss>>a->t; cnt1++; heavy.push_back(a->t<<n); return; } a->left=newnode(); for(i=1;i<a->s.length();i++){ if(a->s[i]=='[') k++; if(a->s[i]==']') k--; if(!k&&a->s[i]==',') break; a->left->s+=a->s[i]; } a->right=newnode(); for(i++;i<a->s.length()-1;i++) a->right->s+=a->s[i]; build(a->left,n+1); build(a->right,n+1); return; } int main(){ int t; cin>>t; while(t--){ string s; cin>>s; cnt1=0; cnt2=cnt=1; root=newnode(); root->s=s; build(root,0); sort(heavy.begin(),heavy.end()); for(int i=0;i<heavy.size()-1;i++){ if(heavy[i]==heavy[i+1]) cnt++; else cnt=1; cnt2=max(cnt2,cnt); } cout<<cnt1-cnt2<<endl; heavy.clear(); } return 0; }
相关文章推荐
- UVA12166 修改天平
- UVA 12166 Equilibrium Mobile(贪心,反演)
- UVA 12166 dfs+Map库的巧用
- Uva-12166-Equilibrium Mobile(逆向思维, map)
- uva 12166 bfs
- uva12166 修改天平 元素的贡献值-最优解
- UVA-12166 天平性质+字符处理
- uva12166 - Equilibrium Mobile
- UVA - 12166 Equilibrium Mobile
- UVA 12166 Equilibrium Mobile (天平性质 + DFS)
- 习题6-6 修改天平(Equilibrium Mobile, NWERC 2008, UVa12166)
- UVa 12166 Equilibrium Mobile——思路题
- 天平&二叉树--uva12166 Equilibrium Mobile
- Equilibrium Mobile UVA - 12166
- UVA-12166 Equilibrium Mobile(二叉树)
- uva12166 dfs+思维
- uva12166 遍历带括号的二叉树类型
- UVa-12166 Equilibrium Mobile
- UVa 12166 - Equilibrium Mobile(二叉树+递归处理括号匹配+模板)
- UVA - 12166 Equilibrium Mobile