1 条题解
-
0
C++ :
#include <cstdio> #include <iostream> #include <algorithm> #include <vector> #include <cstring> #include <set> #include <map> using namespace std; string s[11]; set<char>st; map<char,double>mp; struct node{ char c; double va; }p[27]; bool cmp(node a,node b){ return a.va<b.va; } int main(){ int n; while(scanf("%d",&n)!=EOF){ st.clear(); for(int i=0;i<n;i++){ cin>>s[i]; for(int j=0;j<s[i].size();j++) st.insert(s[i][j]); } int now=0; mp.clear(); for(set<char>::iterator it=st.begin();it!=st.end();it++){ p[++now].c=*it; p[now].va=now; mp[*it]=now; } /*for(int i=1;i<=now;i++) printf("%c %lf\n",p[i].c,p[i].va); */ while(1){ bool ok=true; bool _f=false; char x,y; for(int i=0;i<n;i++){ for(int j=0;j<s[i].size();j++){ for(int k=j+1;k<s[i].size();k++){ if(mp[s[i][j]]>mp[s[i][k]]){ x=s[i][j]; y=s[i][k]; _f=true; break; } } if(_f) break; } if(_f) break; } if(_f==false) break; int ii,jj; for(ii=1;ii<=now;ii++){ if(p[ii].c==x) break; } for(jj=1;jj<=now;jj++){ if(p[jj].c==y) break; } if(jj==1){ p[ii].va=p[jj].va-1; } else{ p[ii].va=(p[jj].va+p[jj-1].va)/2; } mp[p[ii].c]=p[ii].va; sort(p+1,p+1+now,cmp); } sort(p+1,p+1+now,cmp); for(int i=1;i<=now;i++) printf("%c",p[i].c); printf("\n"); } return 0; }
- 1
信息
- ID
- 1294
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者